SOLID - LSP - Reguła Podstawienia Liskov
Nadszedł czas na omówienie reguły podstawienia Liskov (od nazwiska twórcy (Barbara Liskov).
Trzecia już z kolei zasada SOLID .
Reguła która odnosi się do zgodności w dziedziczeniu. Chroni nas przed wieloma błędami .
LSP (Liskov Substitution Principle) - Reguła, która mówi, że w każdym miejscu w którym wymagana jest dana klasa, możemy osadzić jej subklasę z pełną kompatybilnością.
Ale jak to, przecież zawsze w takiej sytuacji możemy tam wrzucić dowolną subklasę. To prawda, ale jednak zasada wymaga pełnej zgodności w użyciu tych klas .
Do rzeczy
Za każdym razem gdy przygotowujesz subklasę - ta subklasa powinna być wymienna w każdym miejscu w którym nadklasa jest wymagana,
Jakakolwiek implementacja abstrakcji czy interfejsu powinna być wymienna tam gdzie abstrakcja jest wymagana.
Bezbłędnie wymienna.
I po takiej wymianie - wszystko powinno nadal działać idealnie.
Konsekwencje
Nie możemy dopuścić do sytuacji w której potencjalny wynik wymiany na subklasę będzie inny (potencjalnie inny output (np. wyjątek czy błąd)).
Zwracane dane również nie mogą różnić się w typie - np. tablica a kolekcja. W przeciwnym wypadku używanie tych implementacji nie będzie działać identycznie. Raz mamy tablicę a innym razem mamy kolekcję... Jest to pogwałcenie reguły LSP. Na szczęście od pewnego czasu mamy możliwość wymuszenia typu jaki ma być zwrócony .
Po co?
Zasada ta chroni nas przed sytuacją, w której jakaś podklasa zachowuje się inaczej niż nadklasa, abstrakcja czy interfejs.
Jak i również chroni nas przed potencjalnymi błędami, nadmiarowymi warunkami (choćby sprawdzanie czy dostaliśmy tablicę czy kolekcję), trudnościami z późniejszym utrzymaniem i rozwijaniem kodu.
Podsumowując
Regułę tę można streścić w czterech punktach, których należy się trzymać .
A oto i one:
- Sygnatury muszą się zgadzać,
- Warunki początkowe nie mogą być większe,
- Warunki końcowe muszą być przynajmniej równe,
- Typy wyjątków muszą się zgadzać.
To tyle w tym temacie
LSP . Kolejna niezmiernie ważna reguła ! Trzymajcie się jej !
Zapraszam do komentowania oraz lektury innych moich artykułów .
Dobrego dnia.