S.O.L.I.D. 3 – Liskov’s Substitution Principle (LSP)

Liskov’s Substitution Principle (LSP) – zasada podstawienia Liskov. Nazwa tej motody pochodzi od programistki Barbary Liskov, która sformułowała poniższą zasadę:

Funkcje, które korzystają z referencji bądź wskaźników do klas bazowych, muszą być w stanie poprawnie używać obiektów klas dziedziczących po tych klasach bazowych, bez ich dokładnej znajomości.

Zasada mówi o tym, żeby w miejscu klasy bazowej zawsze można było użyć dowolnej klasy pochodnej. Kod klasy bazowej musi w całości współpracować ze wszystkimi podklasami np. jeżeli w klasie bazowej, jest pięć metod, to wszystkie klasy pochodne, które dziedziczą po klasie głównej muszą używać tych pięciu metod. Inaczej zasada LSP zostanie złamana.

Przykład: Abstrakcyjna klasa Car zawiera metodę refueling() – uzupełnij paliwo. Klasa KiaCar, która dziedziczy po klasie Car używa tej metody, natomiast klasa TeslaCar już nie. Elektryczny samochód nie potrzebuje paliwa, stąd nie będzie użyta metoda refueling(), zasada LSP nie zostaje spełniona.

public abstract class Car {
    public void refueling() {
    }
}
public class KiaCar extends Car{
    public void refueling(){
        System.out.println("fuel reffiled");
    }
}
public class TeslaCar extends Car{
    //don't use refueling() method - electric car needs electricity
}

Rozwiązaniem jest stworzenie oddzielnych klas – CarFuel i CarElectric, po których będą dziedziczy odpowiednio KiaCar i TeslaCar.

public abstract class CarFuel {
    public void refueling() {}
}
public abstract class CarElectric {
    public void plugging(){}
}

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *