Sobes.tech
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.