Sobes.tech
Junior — Middle

Môžete uviesť príklad, ktorý demonštruje princíp Liskovovej substitúcie v objektovo orientovanom programovaní?

sobes.tech AI

Odpoveď od AI

Princíp Liskovovej substitúcie (Liskov Substitution Principle, LSP) hovorí, že objekty podtriedy by mali byť zameniteľné s objektmi nadtriedy bez narušenia správnosti programu.

Príklad:

// Nadtrieda
class Bird {
    void fly() {
        System.out.println("Vták lieta");
    }
}

// Podtrieda, ktorá správne rozširuje správanie
class Sparrow extends Bird {
    @Override
    void fly() {
        System.out.println("Vrabc lieta");
    }
}

// Porušenie LSP
class Ostrich extends Bird {
    @Override
    void fly() {
        throw new UnsupportedOperationException("Pštros nemôže lietať");
    }
}

// Použitie
void makeBirdFly(Bird bird) {
    bird.fly(); // Očakáva sa, že vták bude lietať
}

// Ak sa odovzdá Ostrich, metóda fly() vyhodí výnimku, čo porušuje LSP.

Aby sa LSP dodržiaval, je lepšie hierarchiu rozdeliť:

interface Flyable {
    void fly();
}

class Bird {}

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

class Ostrich extends Bird {
    // Neimplementuje Flyable, pretože nemôže lietať
}

Takto môžu byť objekty podtried použité bez neočakávaného správania.