Junior — Middle
Kas saaksite anda näidet, mis illustreerib Liskovi asenduspõhimõtet objektorienteeritud programmeerimises?
sobes.tech AI
Vastus AI-lt
Liskovi asenduspõhimõte (Liskov Substitution Principle, LSP) ütleb, et alamsüsteemi objektid peaksid olema asendatavad nende superklasside objektidega ilma, et see mõjutaks programmi õigsust.
Näide:
// Superklass
class Bird {
void fly() {
System.out.println("Lind lendab");
}
}
// Õigesti laiendatud alamsüsteem
class Sparrow extends Bird {
@Override
void fly() {
System.out.println("Varblane lendab");
}
}
// LSP rikkumine
class Ostrich extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Struts ei saa lennata");
}
}
// Kasutamine
void makeBirdFly(Bird bird) {
bird.fly(); // Oodatakse, et lind lendab
}
// Kui antakse Ostrich, fly() meetod viskab erandi, rikkudes LSP.
LSP järgimiseks on parem jagada hierarhia:
interface Flyable {
void fly();
}
class Bird {}
class Sparrow extends Bird implements Flyable {
public void fly() { System.out.println("Varblane lendab"); }
}
class Ostrich extends Bird {
// Ei rakenda Flyable, kuna ei saa lennata
}
Nii saab alamsüsteemi objekte kasutada ilma ootamatute käitumisteta.