Junior — Middle
Czy możesz podać przykład zasady podstawiania Liskov w programowaniu obiektowym?
sobes.tech AI
Odpowiedź od AI
Zasada podstawienia Liskova (Liskov Substitution Principle, LSP) mówi, że obiekty podklasy powinny być wymienialne z obiektami klasy bazowej bez naruszania poprawności programu.
Przykład w C#:
class Bird {
public virtual void Fly() {
Console.WriteLine("Ptak lata");
}
}
class Sparrow : Bird {
public override void Fly() {
Console.WriteLine("Wróbel lata");
}
}
class Ostrich : Bird {
public override void Fly() {
throw new NotSupportedException("Struś nie potrafi latać");
}
}
void MakeBirdFly(Bird bird) {
bird.Fly();
}
// Użycie:
MakeBirdFly(new Sparrow()); // poprawne
MakeBirdFly(new Ostrich()); // narusza LSP, ponieważ wywołuje wyjątek
W tym przykładzie klasa Ostrich narusza zasadę podstawienia Liskova, ponieważ nie obsługuje zachowania klasy bazowej Bird (metody Fly), wywołując wyjątek. Aby przestrzegać LSP, należy zmienić hierarchię klas lub podzielić interfejsy, aby podklasy nie musiały implementować nieobsługiwanego zachowania.