LSP stwierdza, że klasy powinny być substytucyjne dla ich klas podstawowych, co oznacza, że klasy pochodne i podstawowe powinny być semantycznie równoważne.
Ale czy LSP ma również zastosowanie do klas implementujących interfejs? Innymi słowy, jeśli metoda interfejsu zaimplementowana przez klasę różni się semantycznie od tego, czego spodziewa się użytkownik, czy byłoby to uważane za naruszenie LSP?
design-patterns
design-principles
liskov-substitution
użytkownik1483278
źródło
źródło
Odpowiedzi:
Jeśli implementacja różni się semantycznie od zachowania udokumentowanego za pomocą niezmienników interfejsu i warunków wstępnych i końcowych jego metod, odpowiedź brzmi „tak”, byłoby to naruszeniem LSP. Zasada ustanawia zasady dotyczące abstrakcji i jej realizacji, nie wymagając od strony abstrakcji obecności w formie klasy.
Jeśli jednak mówimy o tym, czego oczekują użytkownicy , odpowiedź brzmiałaby „niekoniecznie”: użytkownicy mają prawo do błędnych oczekiwań.
źródło
Name
, której nie można ustawićnull
, wówczasobj.Name != null
mówi się, że jest niezmiennikiem tego interfejsu.