Sobes.tech
Junior — Middle

Tudna példát mondani a Liskov-helyettesítési elvre az objektumorientált programozásban?

sobes.tech MI

Válasz az MI-től

A Liskov-helyettesítési elv (Liskov Substitution Principle, LSP) kimondja, hogy az alosztályok objektumai helyettesíthetik az ősosztály objektumait anélkül, hogy a program helyességét sértenék.

Példa C#-ban:

class Bird {
    public virtual void Fly() {
        Console.WriteLine("A madár repül");
    }
}

class Sparrow : Bird {
    public override void Fly() {
        Console.WriteLine("A veréb repül");
    }
}

class Ostrich : Bird {
    public override void Fly() {
        throw new NotSupportedException("A strucc nem tud repülni");
    }
}

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

// Használat:
MakeBirdFly(new Sparrow()); // helyes
MakeBirdFly(new Ostrich()); // sérti az LSP-t, mert kivételt dob

Ebben a példában az Ostrich osztály sérti az Liskov-helyettesítési elvet, mivel nem támogatja az alap osztály (Bird) viselkedését (Fly metódus), és kivételt dob. Az LSP betartásához módosítani kell az osztályhierarchiát vagy az interfészeket, hogy az alosztályok ne legyenek kénytelenek nem támogatott viselkedéseket megvalósítani.