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.