Is-a iku hubungan tipe — dimodelake kanthi inheritance (sawijining ). iku hubungan — dimodelake kanthi (sawijining ). Milih ingkang tenggak iku putusan modeling inti.
Is-a iku hubungan tipe — dimodelake kanthi inheritance (sawijining ). iku hubungan — dimodelake kanthi (sawijining ). Milih ingkang tenggak iku putusan modeling inti.
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
}
Panjaluk: "Apa X jenis saka Y, utawa X duwe/nggunakake Y?"
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) ✅
Wonten tiyang sing nyedhak inheritance kanggo ngulang-ulang kode, sanajan hubungane pancen has-a. Yen punika ora bakal ngganti subclass kanggo basis ing endi-endi, asale ora is-a — gunakakake composition.
Pedafaran iki iku panjaluk keputusan praktis ana mburine "favor composition over inheritance": pilih hubungan ingkang leres, dudu ingkang nyiksa saweneh baris.
Nggawe ing tenggak ndhudhuk hierarki cekak lan jujur, lan njegog pelanggaran Liskov dene "subtype" ora bisa manggon kanggo indukan.