Junior — Middle
Можете ли дати пример принципа Лискове замене у објектно оријентисаном програмирању?
sobes.tech АИ
Одговор од АИ
Princip Liskovove zamene (Liskov Substitution Principle, LSP) kaže da objekti podklase treba da budu zamenjivi sa objektima nadklase bez narušavanja ispravnosti programa.
Primer u C#:
class Bird {
public virtual void Fly() {
Console.WriteLine("Ptica leti");
}
}
class Sparrow : Bird {
public override void Fly() {
Console.WriteLine("Soko leti");
}
}
class Ostrich : Bird {
public override void Fly() {
throw new NotSupportedException("Struć ne može da leti");
}
}
void MakeBirdFly(Bird bird) {
bird.Fly();
}
// Upotreba:
MakeBirdFly(new Sparrow()); // ispravno
MakeBirdFly(new Ostrich()); // narušava LSP, jer baca izuzetak
U ovom primeru, klasa Ostrich narušava princip Liskovove zamene, jer ne podržava ponašanje osnovne klase Bird (metod Fly), izazivajući izuzetak. Da bismo poštovali LSP, potrebno je izmeniti hijerarhiju klasa ili podeliti interfejse tako da podklase ne moraju da implementiraju nepodržano ponašanje.