Verstoßen abstrakte Eigenschaften gegen das Liskov-Substitutionsprinzip?

8

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.).

    
Jake 06.06.2011, 18:35
quelle

3 Antworten

4

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.

    
Robin 06.06.2011, 19:05
quelle
6

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.

    
gpeche 06.06.2011 19:04
quelle
1

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.

    
irreputable 06.06.2011 19:33
quelle

Tags und Links