Heim > häufiges Problem > Hauptteil

Was ist das Richter-Substitutionsprinzip?

青灯夜游
Freigeben: 2020-07-28 12:01:12
Original
6239 Leute haben es durchsucht

Das Liskov-Substitutionsprinzip ist eines der Grundprinzipien des objektorientierten Designs. Es befürwortet die Verwendung von „Abstraktion“ und „Polymorphismus“, um die statische Struktur im Design in eine dynamische Struktur zu ändern und so die Stabilität des zu gewährleisten Design. Nähe. „Abstraktion“ ist eine von der Sprache bereitgestellte Funktion, und „Polymorphismus“ wird durch Vererbungssemantik implementiert.

Was ist das Richter-Substitutionsprinzip?

Das Liskov-Substitutionsprinzip (LSP) wurde 1987 von Frau Liskov vom MIT Computer Science Laboratory vorgeschlagen. Es wurde in einem Artikel „Data Abstraction and Hierarchy“ veröffentlicht auf der „Object-Oriented Technology Summit Conference“ (OOPSLA). Sie schlug vor, dass die Vererbung sicherstellen muss, dass die Eigenschaften der Superklasse in der Unterklasse vorhanden sind. Die Vererbung sollte sicherstellen, dass jede Eigenschaft, die für Supertyp-Objekte nachgewiesen wurde, auch für Subtyp-Objekte gilt .

Das Liskov-Substitutionsprinzip erklärt hauptsächlich einige Prinzipien der Vererbung, das heißt, wann die Vererbung verwendet werden sollte, wann die Vererbung nicht verwendet werden sollte und welche Prinzipien ihr zugrunde liegen. Die Liskov-Substitution ist ursprünglich die Grundlage für die Wiederverwendung der Vererbung. Sie spiegelt die Beziehung zwischen Basisklassen und Unterklassen wider, ergänzt das Öffnungs- und Schließprinzip und regelt die spezifischen Schritte zur Erzielung einer Abstraktion.

Die Funktion des Liskov-Substitutionsprinzips

Die Hauptfunktionen des Liskov-Substitutionsprinzips sind wie folgt.

1. Das Liskov-Substitutionsprinzip ist eine der wichtigen Möglichkeiten, das Eröffnungs- und Schlussprinzip zu verwirklichen.

2. Es überwindet die Mängel der schlechten Wiederverwendbarkeit, die durch das Überschreiben von Elternklassen bei der Vererbung verursacht werden.

3. Es ist die Garantie für die Richtigkeit der Aktion. Das heißt, durch die Erweiterung der Klasse werden keine neuen Fehler in das bestehende System eingeführt, wodurch die Möglichkeit von Codefehlern verringert wird.

So implementieren Sie das Liskov-Substitutionsprinzip

Das Liskov-Substitutionsprinzip bedeutet im Allgemeinen: Unterklassen können die Funktionen der übergeordneten Klasse erweitern, aber sie können die ursprünglichen Funktionen nicht ändern die übergeordnete Klassenfunktion. Mit anderen Worten: Wenn eine Unterklasse eine übergeordnete Klasse erbt, versuchen Sie, die Methoden der übergeordneten Klasse nicht zu überschreiben, außer durch das Hinzufügen neuer Methoden zur Vervollständigung neuer Funktionen.

Wenn Sie die Methode der übergeordneten Klasse neu schreiben, um die neue Funktion zu vervollständigen, ist die Wiederverwendbarkeit des gesamten Vererbungssystems relativ schlecht, obwohl sie einfach zu schreiben ist. Insbesondere wenn Polymorphismus häufig verwendet wird, wird das Programm ausgeführt Die Fehlerwahrscheinlichkeit ist sehr hoch.

Wenn das Programm gegen das Liskov-Substitutionsprinzip verstößt, weist das Objekt der geerbten Klasse dort, wo die Basisklasse erscheint, einen Laufzeitfehler auf. Zu diesem Zeitpunkt besteht die Korrekturmethode darin, die ursprüngliche Vererbungsbeziehung aufzuheben und die Beziehung zwischen ihnen neu zu gestalten.

Das bekannteste Beispiel des Liskov-Substitutionsprinzips ist „Ein Quadrat ist kein Rechteck“. Natürlich gibt es viele ähnliche Beispiele im Leben, zum Beispiel werden Pinguine, Strauße und Kiwis aus biologischer Sicht als Vögel klassifiziert, aber aus einer Klassenvererbungsbeziehung, weil sie die Flugfähigkeit „Vogel“ nicht erben können können nicht als Unterklassen von „bird“ definiert werden. Da „Ballonfische“ nicht schwimmen können, können sie auch nicht als Unterkategorie von „Fischen“ definiert werden; „Spielzeugkanonen“ können keine Feinde in die Luft jagen, also können sie nicht als Unterkategorie von „Kanonen“ usw. definiert werden.

Im Folgenden wird „Eine Kiwi ist kein Vogel“ als Beispiel verwendet, um das Richter-Substitutionsprinzip zu veranschaulichen.

【Beispiel 2】Anwendung des Richter-Substitutionsprinzips am Beispiel „Kiwi ist kein Vogel“.

Analyse: Vögel fliegen im Allgemeinen mit einer Fluggeschwindigkeit von etwa 120 Kilometern pro Stunde. Doch Neuseelands Kiwis können aufgrund degenerierter Flügel nicht fliegen. Angenommen, Sie möchten ein Beispiel entwerfen und die Zeit berechnen, die diese beiden Vögel benötigen, um 300 Kilometer weit zu fliegen. Wenn Sie zum Testen dieses Codes eine Schwalbe verwenden, ist das Ergebnis natürlich korrekt und die erforderliche Zeit kann berechnet werden. Wenn Sie ihn jedoch mit einer Kiwi testen, ist das Ergebnis eine „Dividiere durch Null-Ausnahme“ oder „Unendlich“. Das entspricht offensichtlich nicht den Erwartungen. Das Klassendiagramm ist in Abbildung 1 dargestellt.

Was ist das Richter-Substitutionsprinzip?

Der Programmcode lautet wie folgt:

package principle;
public class LSPtest
{
    public static void main(String[] args)
    {
        Bird bird1=new Swallow();
        Bird bird2=new BrownKiwi();
        bird1.setSpeed(120);
        bird2.setSpeed(120);
        System.out.println("如果飞行300公里:");
        try
        {
            System.out.println("燕子将飞行"+bird1.getFlyTime(300)+"小时.");
            System.out.println("几维鸟将飞行"+bird2.getFlyTime(300)+"小时。");
        }
        catch(Exception err)
        {
            System.out.println("发生错误了!");
        }
    }
}
//鸟类
class Bird
{
    double flySpeed;
    public void setSpeed(double speed)
    {
        flySpeed=speed;
    }
    public double getFlyTime(double distance)
    {
        return(distance/flySpeed);
    }
}
//燕子类
class Swallow extends Bird{}
//几维鸟类
class BrownKiwi extends Bird
{
    public void setSpeed(double speed)
    {
           flySpeed=0;
    }
}
Nach dem Login kopieren

Das laufende Ergebnis des Programms lautet wie folgt:

如果飞行300公里:
燕子将飞行2.5小时.
几维鸟将飞行Infinity小时。
Nach dem Login kopieren

Der Grund dafür Fehler beim Ausführen des Programms ist: Kiwi-Vögel Die setSpeed(double speed)-Methode von Vögeln wurde überschrieben, was gegen das Liskov-Substitutionsprinzip verstößt. Der richtige Ansatz besteht darin, die ursprüngliche Vererbungsbeziehung der Kiwi aufzuheben und eine allgemeinere Elternklasse des Vogels und der Kiwi zu definieren, beispielsweise die Tierklasse, die beide rennen können. Obwohl die Fluggeschwindigkeit des Kiwis 0 ist, ist seine Laufgeschwindigkeit nicht 0. Sie können die Zeit berechnen, die er benötigt, um 300 Kilometer zu laufen.

Das Klassendiagramm ist in Abbildung 2 dargestellt.

Was ist das Richter-Substitutionsprinzip?

Weitere Informationen zu diesem Thema finden Sie unter: PHP-Website für Chinesisch!

Das obige ist der detaillierte Inhalt vonWas ist das Richter-Substitutionsprinzip?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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