Angenommen, ich habe eine abstrakte Klasse wie:
%Vor% Mein Programm behandelt Pet
s abhängig davon, ob das Spezialbehandlungs-Flag gesetzt ist. Meine Frage ist, ob dies das Liskow-Substitutionsprinzip verletzt, das besagt:
[...] in einem Computerprogramm, wenn S ein Untertyp von T ist, dann können Objekte vom Typ T durch Objekte vom Typ S [...] ersetzt werden, ohne dass eine der wünschenswerten Eigenschaften davon geändert wird Programm (Korrektheit, Aufgabe ausgeführt , etc.).
Nein. Jede Verwendung der Methode im Programm würde wie jede andere Methode nachfolgende Entscheidungen auf den Rückgabewert stützen. Aufgrund der Art der Existenz der Methode sollte kein Programm Annahmen hinsichtlich seines Ergebnisses machen. Daher sollte die Änderung des von dieser Methode zurückgegebenen Werts die Eigenschaften des Programms nicht ändern.
In diesem Fall schreiben Benutzer dieser Klassen wahrscheinlich:
%Vor%Dieser Code wird in beiden Fällen funktionieren, so dass Sie LSP nicht verletzen würden. Wenn Sie jedoch
hatten %Vor% Dann würden Sie LSP verletzen, weil der vorhandene Code bei Verwendung von UnknownAnimal
Instanzen bricht.
Erstens, starker Einwand gegen Ihre Diskriminierung von Katzen!
Wenn Programmierer jetzt das sogenannte "Liskov-Substitutionsprinzip" aufrufen, sprechen sie nicht wirklich akademisch darüber. Wir müssen es in einem informellen, vulgären, bastardisierten Sinn verwenden.
Welchen Sinn hat das? Ich finde es nichts weiter als zu fordern, dass die Unterklasse dem Vertrag entsprechen muss, der von der Superklasse festgelegt wird. Es ist also wirklich uninteressant. Leute rufen diese Phrase auf, nur um fansy zu sein.