Junior — Middle
Obyektga yo'naltirilgan dasturlashda Liskov o'rnashish printsipini ko'rsatadigan misol keltira olasizmi?
sobes.tech AI
AIdan javob
Liskov Substitutsiyasi Prinsipi (Liskov Substitution Principle, LSP) shartiga ko‘ra, subklass obyekti superklass obyekti bilan almashtirilganda, dastur to‘g‘ri ishlashini ta’minlashi kerak.
Misol:
// Superklass
class Bird {
void fly() {
System.out.println("Qush uchadi");
}
}
// To‘g‘ri kengaytirilgan subklass
class Sparrow extends Bird {
@Override
void fly() {
System.out.println("Qorqinchiroq uchadi");
}
}
// LSPni buzish
class Ostrich extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Ostrich uchmaydi");
}
}
// Foydalanish
void makeBirdFly(Bird bird) {
bird.fly(); // Qush uchishi kutilyapti
}
// Agar Ostrich yuborilsa, fly() metodi istisno chiqaradi va LSP buziladi.
LSPni saqlash uchun, hierarxiyani bo‘lish tavsiya etiladi:
interface Flyable {
void fly();
}
class Bird {}
class Sparrow extends Bird implements Flyable {
public void fly() { System.out.println("Qorqinchiroq uchadi"); }
}
class Ostrich extends Bird {
// Flyable ni amalga oshirmaydi, chunki u uchmaydi
}
Shu tarzda, subklass obyekti kutilmagan xatti-harakatlarsiz ishlatilishi mumkin.