LSP gibt an, dass Klassen für ihre Basisklassen substituierbar sein sollten, was bedeutet, dass abgeleitete und Basisklassen semantisch äquivalent sein sollten.
Aber gilt LSP auch für Klassen, die eine Schnittstelle implementieren? Mit anderen Worten, wenn eine von einer Klasse implementierte Schnittstellenmethode sich semantisch von den Erwartungen des Benutzers unterscheidet, würde dies als Verstoß gegen LSP angesehen werden?
design-patterns
design-principles
liskov-substitution
user1483278
quelle
quelle
Antworten:
Wenn sich die Implementierung semantisch von dem Verhalten unterscheidet, das durch die Invarianten der Schnittstelle und die Vor- und Nachbedingungen ihrer Methoden dokumentiert wird, lautet die Antwort "Ja". Dies wäre eine Verletzung des LSP. Das Prinzip legt die Regeln für die Abstraktion und ihre Implementierungen fest, ohne dass die Abstraktionsseite in Form einer Klasse vorliegen muss.
Wenn wir jedoch darüber sprechen, was Benutzer erwarten , lautet die Antwort "nicht unbedingt": Die Benutzer haben das Recht, falsche Erwartungen zu haben.
quelle
Name
, die nicht festgelegt werden kannnull
,obj.Name != null
wird von einer Invariante dieser Schnittstelle gesprochen.