Sobes.tech
Junior — Middle

Poți oferi un exemplu al principiului de substituție Liskov în programarea orientată pe obiecte?

sobes.tech AI

Răspuns de la AI

Principiul substituției lui Liskov (Liskov Substitution Principle, LSP) afirmă că obiectele unei subclase trebuie să poată fi înlocuite cu obiecte ale clasei de bază fără a încălca corectitudinea programului.

Exemplu în C#:

class Bird {
    public virtual void Fly() {
        Console.WriteLine("Pasărea zboară");
    }
}

class Sparrow : Bird {
    public override void Fly() {
        Console.WriteLine("Pițigoiul zboară");
    }
}

class Ostrich : Bird {
    public override void Fly() {
        throw new NotSupportedException("Struțul nu poate zbura");
    }
}

void MakeBirdFly(Bird bird) {
    bird.Fly();
}

// Utilizare:
MakeBirdFly(new Sparrow()); // corect
MakeBirdFly(new Ostrich()); // încalcă LSP, deoarece aruncă o excepție

În acest exemplu, clasa Ostrich încalcă principiul substituției lui Liskov, deoarece nu suportă comportamentul clasei de bază Bird (metoda Fly), aruncând o excepție. Pentru a respecta LSP, trebuie modificată ierarhia claselor sau împărțite interfețele, astfel încât subclasele să nu fie obligate să implementeze comportamente nesuportate.