Pewna awaria OOP jest pokazana z klasą Kwadrat dziedziczącą po Prostokącie, gdzie logicznie Kwadrat jest specjalizacją Prostokąta i dlatego powinien dziedziczyć po nim, ale wszystko się rozpada, gdy próbujesz zmienić długość lub szerokość Kwadratu.
Czy istnieje konkretny termin opisujący, co dzieje się w tej sprawie?
object-oriented
inheritance
liskov-substitution
Zwycięzca
źródło
źródło
Odpowiedzi:
Wikipedia po prostu nazywa to problemem Elipsy Koła
źródło
Uznałbym to za naruszenie zasady substytucji Liskowa -
Square
podklasa szczególnie narusza niezmienność niezależności długości i szerokości.źródło
Na poziomie bardziej podstawowym niż Zasada Zastępstwa Liskowa jest to błąd kategorii lub błąd kategorii
W kontekście zachowania podczas modelowania kwadrat po prostu nie jest rodzajem prostokąta.
Kiedy zdasz sobie z tego sprawę, problem ustępuje, ponieważ początkowe założenie (kwadrat jest rodzajem prostokąta) jest usuwane z gry.
Problem z tą odpowiedzią polega na tym, że od szkoły wierci się w każdym, kto robi geometrię, że kwadrat jest rodzajem prostokąta. Ale bardzo ważne jest, aby zrozumieć, że jest to prawdą tylko w bardzo specyficznym kontekście (klasyfikacja kształtów geometrycznych na podstawie właściwości ich kątów wewnętrznych). Pod względem zachowania kwadrat nie jest prostokątem. Wyświetlanie jednego zestawu klasyfikacji w niewłaściwym kontekście jest błędem w kategorii.
źródło