Junior — Middle
Môžete uviesť príklad princípu Liskovovej substitúcie v objektovo orientovanom programovaní?
sobes.tech AI
Odpoveď od AI
Princíp Liskovovej náhrady (Liskov Substitution Principle, LSP) hovorí, že objekty podtriedy by mali byť zameniteľné s objektmi základnej triedy bez narušenia správnosti programu.
Príklad v C#:
class Bird {
public virtual void Fly() {
Console.WriteLine("Vták lieta");
}
}
class Sparrow : Bird {
public override void Fly() {
Console.WriteLine("Vrabec lieta");
}
}
class Ostrich : Bird {
public override void Fly() {
throw new NotSupportedException("Pštros nemôže lietať");
}
}
void MakeBirdFly(Bird bird) {
bird.Fly();
}
// Použitie:
MakeBirdFly(new Sparrow()); // správne
MakeBirdFly(new Ostrich()); // porušuje LSP, pretože vyvoláva výnimku
V tomto príklade, trieda Ostrich porušuje princíp Liskovovej náhrady, pretože nepodporuje správanie základnej triedy Bird (metódu Fly), a vyvoláva výnimku. Aby sme LSP dodržali, je potrebné zmeniť hierarchiu tried alebo rozdeliť rozhrania tak, aby podtriedy nemali implementovať nepodporované správanie.