Sobes.tech
Junior — Middle

Pouvez-vous donner un exemple du principe de substitution de Liskov en programmation orientée objet ?

sobes.tech IA

Réponse de l'IA

Le principe de substitution de Liskov (Liskov Substitution Principle, LSP) stipule que les objets d'une sous-classe doivent pouvoir être utilisés à la place des objets de la classe de base sans violer la correction du programme.

Exemple en C#:

class Bird {
    public virtual void Fly() {
        Console.WriteLine("L'oiseau vole");
    }
}

class Sparrow : Bird {
    public override void Fly() {
        Console.WriteLine("L'étourneau vole");
    }
}

class Ostrich : Bird {
    public override void Fly() {
        throw new NotSupportedException("L'autruche ne peut pas voler");
    }
}

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

// Utilisation:
MakeBirdFly(new Sparrow()); // correct
MakeBirdFly(new Ostrich()); // viole le LSP, car lance une exception

Dans cet exemple, la classe Ostrich viole le principe de substitution de Liskov, car ne supporte pas le comportement de la classe de base Bird (la méthode Fly), en lançant une exception. Pour respecter le LSP, il faut modifier la hiérarchie des classes ou diviser les interfaces pour que les sous-classes n'aient pas à implémenter des comportements non supportés.