Sobes.tech
Junior — Middle

Kannst du ein Beispiel für das Liskovsche Substitutionsprinzip in der objektorientierten Programmierung geben?

sobes.tech KI

Antwort von AI

Das Liskov-Substitutionsprinzip (Liskov Substitution Principle, LSP) besagt, dass Objekte einer Unterklasse austauschbar mit Objekten der Basisklasse sein müssen, ohne die Korrektheit des Programms zu verletzen.

Beispiel in C#:

class Bird {
    public virtual void Fly() {
        Console.WriteLine("Vogel fliegt");
    }
}

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

class Ostrich : Bird {
    public override void Fly() {
        throw new NotSupportedException("Strauß kann nicht fliegen");
    }
}

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

// Verwendung:
MakeBirdFly(new Sparrow()); // korrekt
MakeBirdFly(new Ostrich()); // verletzt das LSP, da eine Ausnahme ausgelöst wird

In diesem Beispiel verletzt die Klasse Ostrich das Liskov-Substitutionsprinzip, da sie das Verhalten der Basisklasse Bird (die Methode Fly) nicht unterstützt und eine Ausnahme auslöst. Um das LSP einzuhalten, sollte die Klassenhierarchie geändert oder die Schnittstellen aufgeteilt werden, sodass Unterklassen kein unsupported Verhalten implementieren müssen.