Sobes.tech
Junior — Middle

Puoi fare un esempio del principio di sostituzione di Liskov nella programmazione orientata agli oggetti?

sobes.tech AI

Risposta dell'AI

Il Principio di Sostituzione di Liskov (Liskov Substitution Principle, LSP) afferma che gli oggetti di una sottoclasse devono poter essere sostituiti agli oggetti della classe base senza violare la correttezza del programma.

Esempio in C#:

class Bird {
    public virtual void Fly() {
        Console.WriteLine("Uccello vola");
    }
}

class Sparrow : Bird {
    public override void Fly() {
        Console.WriteLine("Passero vola");
    }
}

class Ostrich : Bird {
    public override void Fly() {
        throw new NotSupportedException("Struzzo non può volare");
    }
}

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

// Uso:
MakeBirdFly(new Sparrow()); // corretto
MakeBirdFly(new Ostrich()); // viola l'LSP, perché genera un'eccezione

In questo esempio, la classe Ostrich viola il principio di sostituzione di Liskov, poiché non supporta il comportamento della classe base Bird (il metodo Fly), generando un'eccezione. Per rispettare l'LSP, bisogna modificare la gerarchia delle classi o dividere le interfacce in modo che le sottoclassi non siano obbligate a implementare comportamenti non supportati.