Is-a ni mahusiano ya aina — yaonekanwa kwa urithi (kitu ). ni mahusiano ya — yaonekanwa kwa (kitu ). Kuchagua kitanzi sahihi ni uamuzi muhimu wa kuiga.
Is-a ni mahusiano ya aina — yaonekanwa kwa urithi (kitu ). ni mahusiano ya — yaonekanwa kwa (kitu ). Kuchagua kitanzi sahihi ni uamuzi muhimu wa kuiga.
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
}
Uliza: "Je, X ni aina ya Y, au X ina/hutumia 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) ✅
Watu wanakaribiana na urithi ili kutumia tena kod, hata wakati mahusiano yaliyoo ni has-a. Ikiwa haungekuwa na njia ya kubadili darasa dogo kwa msingi kila mahali, labda si is-a — tumia composition.
Tofauti hii ni sheria ya uamuzi wa vitendo nyuma ya "pendekeza composition juu ya urithi": chagua mahusiano yanayotaka, si ile inayookoa mistari michache.
Kupata kazi sawa inahifadhi hierarchies nyingi na adimu, na inazuia ukiukaji wa Liskov ambapo "subtype" haiwezi kweli kusimama mahali pa mzazi wake.