Junior — Middle
Můžete uvést příklad principu Liskovovy substituce v objektově orientovaném programování?
sobes.tech AI
Odpověď od AI
Princip Liskovovy substituce (Liskov Substitution Principle, LSP) říká, že objekty podtřídy by měly být zaměnitelné s objekty třídy základní bez narušení správnosti programu.
Příklad v C#:
class Bird {
public virtual void Fly() {
Console.WriteLine("Pták létá");
}
}
class Sparrow : Bird {
public override void Fly() {
Console.WriteLine("Vrabec létá");
}
}
class Ostrich : Bird {
public override void Fly() {
throw new NotSupportedException("Pštros neumí létat");
}
}
void MakeBirdFly(Bird bird) {
bird.Fly();
}
// Použití:
MakeBirdFly(new Sparrow()); // správně
MakeBirdFly(new Ostrich()); // porušuje LSP, protože vyvolává výjimku
V tomto příkladu třída Ostrich porušuje princip Liskovovy substituce, protože nepodporuje chování třídy Bird (metoda Fly), a vyvolává výjimku. Abychom LSP dodrželi, je třeba změnit hierarchii tříd nebo rozdělit rozhraní tak, aby podtřídy neměly implementovat nepodporované chování.