Sobes.tech
Junior — Middle

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.