Was ist Richters Substitutionsprinzip? (Beispiel)

藏色散人
Freigeben: 2023-04-05 20:30:02
nach vorne
8375 Leute haben es durchsucht

Liskov-Substitutionsprinzip

Liskov-Substitutionsprinzip LSP spricht über die Beziehung zwischen Basisklassen und Unterklassen. Nur wenn diese Beziehung besteht, liegt die Richter-Substitutionsbeziehung vor. Wenn die Beziehung zwischen zwei bestimmten Klassen A und B gegen das Design von LSP verstößt (vorausgesetzt, es handelt sich um eine Vererbungsbeziehung von B nach A), können Sie entsprechend der spezifischen Situation eine der beiden folgenden Rekonstruktionslösungen auswählen.

<?php
//举例说明继承的风险,我们需要完成一个两数相减的功能,由类A来负责。
class a{
public $width;
public $height;
public function func1($a, $b){  
        return $a - $b;  
    }
}
$a = new a();
echo $a->func1(100,50);
//运行结果100-50=50
Nach dem Login kopieren

Später müssen wir eine neue Funktion hinzufügen: Vervollständigen Sie die Addition zweier Zahlen und summieren Sie sie dann mit 100, was von Klasse B verarbeitet wird. Das heißt, Klasse B muss zwei Funktionen ausführen:

Der Code für die Verwendung von Klasse B zum Erben von Klasse A lautet wie folgt:

class b extends a{  
    public function func1($a, $b){  
        return $a + $b;
    }  
      
    public function func2($a, $b){  
        return $this->func1($a, $b) + 100;
    } 
}
$b = new b();
echo $b->func2(100, 50);
Nach dem Login kopieren

Angenommen, Klasse B schreibt versehentlich die Methode der übergeordneten Klasse neu Beim Benennen der Methode führt dies dazu, dass alle Codes, die die Subtraktionsfunktion ausführen, alle die umgeschriebene Methode der Klasse B aufrufen, was zu einem Fehler in der Funktion fun1 führt, die ursprünglich normal ausgeführt wurde (der Grund für den Fehler ist, dass Subtraktion in Addition und andere Benutzer geändert wurden). Ich weiß es nicht. Denken Sie nicht immer, dass der Code von einer Person geschrieben wurde und niemand Zeit hat, Ihren Code Zeile für Zeile zu lesen, sie wenden ihn einfach gemäß den Regeln an.

Laienhaft ausgedrückt lautet das Liskov-Substitutionsprinzip: Unterklassen können die Funktionen der übergeordneten Klasse erweitern, aber sie können die ursprünglichen Funktionen der übergeordneten Klasse nicht ändern. Es enthält die folgenden 4 Bedeutungsebenen:

1. Unterklassen können abstrakte Methoden der übergeordneten Klasse implementieren, jedoch keine nicht-abstrakten Methoden der übergeordneten Klasse überschreiben.

2. Sie können Unterklassen Ihre eigenen einzigartigen Methoden hinzufügen.

3. Wenn eine Methode einer Unterklasse eine Methode einer übergeordneten Klasse überschreibt, sind die Voraussetzungen der Methode (d. h. die formalen Parameter der Methode) lockerer als die Eingabeparameter der Methode der übergeordneten Klasse.

4. Wenn eine Methode einer Unterklasse eine abstrakte Methode einer übergeordneten Klasse implementiert, sind die Nachbedingungen der Methode (d. h. der Rückgabewert der Methode) strenger als die der übergeordneten Klasse.

Es scheint unglaublich, denn wir werden feststellen, dass wir in unserer eigenen Programmierung oft gegen das Liskov-Substitutionsprinzip verstoßen, das Programm aber trotzdem gut läuft. Jeder wird sich also fragen: Welche Konsequenzen hat es, wenn ich darauf bestehe, das Liskov-Substitutionsprinzip nicht zu befolgen?

Die Konsequenz ist: Die Wahrscheinlichkeit von Problemen mit dem von Ihnen geschriebenen Code wird erheblich erhöht.

Das obige ist der detaillierte Inhalt vonWas ist Richters Substitutionsprinzip? (Beispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:hcoder.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage