Sobes.tech
Junior — Middle

Kunt u een voorbeeld geven dat het Liskov-vervangingsprincipe in objectgeoriënteerd programmeren illustreert?

sobes.tech AI

Antwoord van AI

Het Liskov Substitutieprincipe (Liskov Substitution Principle, LSP) stelt dat objecten van een subklasse verwisselbaar moeten zijn met objecten van de superklasse zonder de correctheid van het programma te schaden.

Voorbeeld:

// Superklasse
class Bird {
    void fly() {
        System.out.println("Vogel vliegt");
    }
}

// Subklasse die het gedrag correct uitbreidt
class Sparrow extends Bird {
    @Override
    void fly() {
        System.out.println("Spreeuw vliegt");
    }
}

// Overtreding van LSP
class Ostrich extends Bird {
    @Override
    void fly() {
        throw new UnsupportedOperationException("Struisvogel kan niet vliegen");
    }
}

// Gebruik
void makeBirdFly(Bird bird) {
    bird.fly(); // Er wordt verwacht dat de vogel kan vliegen
}

// Als Ostrich wordt doorgegeven, zal de fly() methode een uitzondering werpen, wat LSP schendt.

Om LSP te respecteren, is het beter om de hiërarchie te splitsen:

interface Flyable {
    void fly();
}

class Bird {}

class Sparrow extends Bird implements Flyable {
    public void fly() { System.out.println("Spreeuw vliegt"); }
}

class Ostrich extends Bird {
    // Implementeert geen Flyable, omdat hij niet kan vliegen
}

Op deze manier kunnen objecten van subklassen zonder onverwacht gedrag worden gebruikt.