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