Spis treści
Liskov Substitution Principle — zasada podstawień Barbary Liskov
Oprogramowanie powinno dobrze działać, gdy w miejsce klasy bazowej podstawimy jej którąkolwiek klasę potomną. Wymagana jest pełna zgodność interfejsu oraz metod. Projektując hierarchię klas, należy zrobić to tak, aby każda klasa pochodna mogła wykorzystywać wszystkie metody klasy bazowej bez konieczności ich przesłaniania. Metody klas pochodnych powinny najwyżej rozszerzać działanie metod z klasy bazowej (wywołując je w swojej implementacji). Dziedziczenie należy wykonać tak, aby klasa pochodna wykorzystała wszystkie metody implementowanej klasy bazowej.
Regułę tę można stosować do metod, funkcji, klas, modułów oraz pakietów.
Zalety
- Czytelniejszy i łatwiejszy w utrzymaniu kod.
- Możliwość podstawienia dowolnej klasy pochodnej w miejsce klasy bazowej bez obaw, że program źle zadziała.
- Mniej zależności w kodzie — obsługiwanie kolekcji obiektów danego typu bazowego nie wymaga sprawdzania, czy dany typ jest specjalnym typem i należy potraktować go inaczej.
Wady
- Konieczność lepszego przemyślenia struktury klas i ich dziedziczenia.
Przykład
- Kwadrat dziedziczący z klasy Prostokąt — metoda liczenia pola powierzchni jest nadpisana w kwadracie. Zasada Liskov jest złamana.
- Ryba dziedzicząca po klasie Zwierzę, gdzie Klasa Zwierzę ma metodę Biegnij. Ryba oczywiście nie biega. Zasada Liskov jest złamana.
- Klasa PlikTylkoDoOdczytu i PlikDoZapisuIOdczytu, dziedzicząca po klasie Plik. Klasa Plik ma metody Czytaj i Zapisuj. W klasie PlikTylkoDoOdczytu metoda Zapisuj nie będzie robiła tego, czego od niej oczekujemy, ponieważ nie można zapisać nic do pliku tylko do odczytu.
Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:
- Początek mini projektu: Poznaj zasady SOLID i OOP
- SOLID
- S jak Single responsibility principle, czyli zasada jednej odpowiedzialności
- O jak Open-closed principle, czyli zasada otwarte/zamknięte
- L jak Liskov Substitution Principle, czyli zasada podstawień Barbary Liskov
- I jak Interface segregation principle, czyli Zasada segregacji interfejsów
- D jak Dependency Inversion Principle, czyli Zasada odwrócenia zależności
- CS jak Ćwiczenia Single responsibility principle, czyli zasada jednej odpowiedzialności
- CO jak Ćwiczenia Open/closed principle, czyli Zasada otwarte-zamknięte
- CL jak Ćwiczenia Liskov Substitution Principle, czyli zasada podstawień Barbary Liskov
- CI jak Ćwiczenia Interface segregation principle, czyli Zasady segregacji interfejsów
- CI jak Ćwiczenia Dependency Inversion Principle, czyli Zasada odwrócenia zależności
- Ćwiczenia z SOLID
- Podsumowanie połowy projektu: Poznaj zasady SOLID i OOP
- Ćwiczenia z SOLID — Kata
- OOP — Object Oriented Programming, czyli programowanie obiektowe
- OOP — Myślenie obiektowe
- OOP — Object Oriented Programming, czyli programowanie obiektowe — Modelowanie dziedziny
- KISS — Keep it simple, stupid, czyli Bez udziwnień zapisu, idioto (BUZI)
- Lod — Law of Demeter, czyli Prawo Demeter
- DRY — Don’t repeat yourself, czyli Nie powtarzaj się
- SLAP — Single Level of Abstraction Principle, czyli Pojedynczy poziom abstrakcji
- Composition Over Inheritance, czyli Kompozycja ponad dziedziczeniem
- Encapsulate what changes, czyli Ukrywaj zmieniające się rzeczy
- Podsumowanie projektu: Poznaj zasady SOLID i OOP
- Podsumowanie zasad SOLID i OOP
- Mini kurs: Poznaj zasady SOLID i OOP – Zapisz się!
- Praca cząstkowa w Metodzie Kanban
Źródła
Obraz główny
Materiały
- Czysta architektura — Robert C. Martin
- https://sii.pl/blog/solid-dobre-praktyki-programowania/
- https://javadeveloper.pl/solid/
- https://www.p-programowanie.pl/paradygmaty-programowania/zasady-solid/
- https://www.samouczekprogramisty.pl/solid-czyli-dobre-praktyki-w-programowaniu-obiektowym/
- https://pl.wikipedia.org/wiki/Zasada_podstawienia_Liskov
- https://en.wikipedia.org/wiki/Liskov_substitution_principle
- http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
- The Liskov Substitution Principle – Robert C. Martin – https://drive.google.com/file/d/0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh/view
- https://dev-hobby.pl/csharp/liskov-substitution-principle-lsp/
1
/
51
2024_12_04 Formalizm opóźnia
Aplikacja Wielojęzyczna - Multilingual App| Bubble.io TUTORIAL
2024_12_03 Oczekiwania i Zarost | Walka I Postępy
Prosty Sposób na Przełącznik - Toggle Between YES/NO| Bubble.io Quick Tip
Własne Szerokości Ekranu - Custom Responsive Breakpoints| Bubble.io Quick TipPluginy:
2024_12_02 Casting na klienta | Walka I Postępy
Animacja Ładowania Strony - Page Loading Animation| Bubble.io Quick Tip
Przestrzenie w Powtarzającej Grupie - Space in Repeating Group| Bubble.io Quick Tip
2024_11_29 Nieprzyjemny kontrahent | Walka I Postępy
Podziel Długi Tekst Na Paragrafy - Separate Paragraphs| Bubble.io Quick Tip
Pływająca Grupa - Sticky Groups| Bubble.io TUTORIAL
2024_11_28 Strzelnica i Wspaniała Obsługa | Walka I Postępy
2024_11_27 Priorytety NFZ | Walka I Postępy
Rozwijane FAQ - Accordion Menu FAQ| Bubble.io TUTORIAL
Debuger - Turn Off Debugger| Bubble.io Quick Tip
2024_11_26 Co robić, aby być potrzebnym? | Walka I Postępy
2024_11_25 Jak zmniejszyć liczbę zgłoszeń? | Walka I Postępy
Zorganizuj Lepiej Swoją Aplikację - Organize Your Bubble App| Bubble.io Quick Tip
Dlaczego Używam Bubble.io? | Bubble.io Quick Tip
2024_11_22 Złośliwość Rzeczy Martwych | Walka I Postępy
Własne Wydarzenie Zwraca Wartość - Custom Event - Return Value| Bubble.io TUTORIAL
Animacja Ładowania z Lottie - Loading Animation with Lottie| Bubble.io TUTORIAL
2024_11_21 Przekraczanie Budżetu | Walka I Postępy
2024_11_20 Otwieranie Spółki jest Szybkie | Walka I Postępy
Wiele Widoków Na Jednej Stronie - Multi Screen Navigation on Single Page Bubble.io TUTORIAL
2024_11_19 Przewiduj Swoje Oczekiwania | Walka I Postępy
Połącz Bazę Danych z Wyświetlaniem Listy - Connect Repeating Group with Database Bubble.io Quick Tip
2024_11_18 Obsługa Klienta... | Walka I Postępy
Pobierz Zdjęcia będące w base64 - Save base64 Image| Bubble.io Quick Tip
Wyślij Dane Do Popupa z Powtarzającej Grupy - Send to Popup from RG Bubble.io TUTORIAL
1
/
51