bir ilişkisidir — ile modellenir (bir bir ). bir ilişkisidir — ile modellenir (bir bir ). Doğru olanı seçmek, temel bir modelleme kararıdır.
CarVehicleCarEngine// IS-A → inheritance
class Vehicle { void move() {} }
class Car extends Vehicle { } // a Car IS A Vehicle
// HAS-A → composition
class Engine { void start() {} }
class Car2 {
private Engine engine = new Engine(); // a Car HAS AN Engine
void start() { engine.start(); } // delegate to the part
}
Sorun: "X, Y çeşitli midir, yoksa X bir Y sahip mi/kullanır mı?"
A Dog IS-A Animal → inheritance ✅
A Car HAS-A Engine → composition ✅
A Square IS-A Shape → inheritance ✅
A Manager HAS Employees → composition (a list) ✅
A Stack HAS-A list (not IS-A) → composition (see earlier pitfall) ✅
İnsanlar kodu yeniden kullanmak için kalıtıma başvururlar; hatta ilişki gerçekten has-a olsa bile. Alt sınıfı her yerde tabana hiç koymayacaksanız, muhtemelen is-a değildir — bileşimi kullanın.
Bu ayrım, "bileşimi kalıtıma tercih et" peri arkasındaki pratik karar kuralıdır: doğru olan ilişkiyi seçin, birkaç satır tasarruf eden değil.
Bunu doğru yapmak hiyerarşileri sığ ve dürüst tutar, ve bir "alt tür" ebeveyn sınıfının yerine hiçbir zaman geçemeyeceği Liskov ihlallerini önler.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap