Wyjaśnij, na czym polega zasada podstawiania Liskov i jak jest stosowana w programowaniu obiektowym.
sobes.tech AI
Odpowiedź od AI
Zasada podstawienia Liskova (Liskov Substitution Principle, LSP) jest jednym z pięciu zasad SOLID w programowaniu obiektowym. Mówi ona, że obiekty klasy pochodnej powinny być wymienialne z obiektami klasy bazowej bez zmiany poprawności działania programu.
Mówiąc prościej, jeśli klasa B dziedziczy po klasie A, to obiekty klasy B powinny zachowywać się tak, aby można je było używać zamiast obiektów klasy A bez nieoczekiwanych błędów lub zmian w logice.
Osiąga się to poprzez zapewnienie, że klasa pochodna nie:
- Narusza invariants klasy bazowej.
- Zawęża prewarunki metod (wymaga bardziej restrykcyjnych danych wejściowych).
- Rozszerza postwarunki (daje mniej gwarantowany wynik).
Przykład:
class Bird {
func fly() {
print("Ptak lata")
}
}
class Sparrow: Bird {
override func fly() {
print("Sikora lata")
}
}
// Naruszenie LSP, jeśli dodamy klasę Penguin, która nie potrafi latać
class Penguin: Bird {
override func fly() {
fatalError("Pingwin nie potrafi latać")
}
}
W tym przykładzie Penguin narusza LSP, ponieważ nie można go używać zamiast Bird bez błędów. Lepszym rozwiązaniem byłoby wydzielenie osobnego interfejsu dla ptaków latających.
W ten sposób LSP pomaga tworzyć hierarchie klas, które są łatwe do rozbudowy i utrzymania, unikając nieoczekiwanych błędów przy zamianie obiektów.