Junior — Middle
Obyekt yönümlü proqramlaşdırmada Liskov-un yerinə qoyma prinsipini nümayiş etdirən nümunə verə bilərsinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
Liskov Əvəzetmə Prinsipi (Liskov Substitution Principle, LSP) deyir ki, alt sinifin obyektləri, proqramın düzgünlüyünü pozmadan, super sinifin obyektləri ilə əvəz edilə bilər.
Misal:
// Super sinif
class Bird {
void fly() {
System.out.println("Quş uçur");
}
}
// Doğru şəkildə genişləndirilmiş alt sinif
class Sparrow extends Bird {
@Override
void fly() {
System.out.println("Qorquş uçur");
}
}
// LSP pozuntusu
class Ostrich extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Əjdaha uça bilmir");
}
}
// İstifadə
void makeBirdFly(Bird bird) {
bird.fly(); // Gözlənilir ki, quş uça bilər
}
// Əgər Ostrich verilsə, fly() metodu istisna atacaq və LSP pozulacaq.
LSP-ə riayət etmək üçün, hierarxiyanı bölmək daha yaxşıdır:
interface Flyable {
void fly();
}
class Bird {}
class Sparrow extends Bird implements Flyable {
public void fly() { System.out.println("Qorquş uçur"); }
}
class Ostrich extends Bird {
// Flyable-i tətbiq etmir, çünki uça bilmir
}
Beləliklə, alt sinif obyektləri gözlənilməz davranışlar olmadan istifadə edilə bilər.