Junior — Middle
Nesne yönelimli programlamada Liskov yerine koyma ilkesini gösteren bir örnek verebilir misiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Liskov İkame Prensibi (Liskov Substitution Principle, LSP), alt sınıf nesnelerinin, programın doğruluğunu bozmadan, alt sınıf nesneleriyle değiştirilebileceğini belirtir.
Örnek:
// Üst sınıf
class Bird {
void fly() {
System.out.println("Kuş uçuyor");
}
}
// Doğru şekilde davranışı genişleten alt sınıf
class Sparrow extends Bird {
@Override
void fly() {
System.out.println("Serçe uçuyor");
}
}
// LSP ihlali
class Ostrich extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("İbis uçamaz");
}
}
// Kullanım
void makeBirdFly(Bird bird) {
bird.fly(); // Kuşun uçması beklenir
}
// Ostrich verildiğinde, fly() metodu istisna fırlatır ve LSP ihlal edilir.
LSP'yi korumak için, hiyerarşiyi ayırmak daha iyidir:
interface Flyable {
void fly();
}
class Bird {}
class Sparrow extends Bird implements Flyable {
public void fly() { System.out.println("Serçe uçuyor"); }
}
class Ostrich extends Bird {
// Uçamadığı için Flyable'ı uygulamaz
}
Bu şekilde, alt sınıf nesneleri beklenmedik davranışlar olmadan kullanılabilir.