is a relationship of — modeled with (a ). is a relationship of — modeled with (a ). Ag roghnú an chinn cheart is cinneadh modelála lárnach a bhíonn ann.
is a relationship of — modeled with (a ). is a relationship of — modeled with (a ). Ag roghnú an chinn cheart is cinneadh modelála lárnach a bhíonn ann.
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
}
Ask: "Is X a kind of Y, or does X have/use a 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) ✅
Baineann daoine úsáid as oidirchealadh chun cód a athúsáid, fiú nuair is compositionis-a an gaol i ndáiríre. Mura ndéanfá an subclass a chur in ionad an bhunscoil i ngach áit, is dócha nach is-a a bhíonn ann — úsáid composition.
Is an t-idirdhealú seo an riail dhéanta phraicticiúil taobh thiar de "favor composition over inheritance": roghnaigh an gaol atá fíor, ní an ceann a shábhálann roinnt línte.
Ar an dóigh cheart a dhéanamh de, coinníonn sé líonraithí fúarchéimithe agus macánta, agus coisceann sé Liskov violations áit ar féidir le "subtype" gan a bheith ina ionad dá thuismitheoir.