hija relazzjoni ta' — immudellata b' ( ). hija relazzjoni ta' — immudellata b' ( ). Li tagħżel dik it-tajba hija deċizjoni ta' mudellazzjoni essenzjali.
hija relazzjoni ta' — immudellata b' ( ). hija relazzjoni ta' — immudellata b' ( ). Li tagħżel dik it-tajba hija deċizjoni ta' mudellazzjoni essenzjali.
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
}
Itlob: "Hu X specie ta' Y, jew X għandu/już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) ✅
In-nies jilhqu għal inheritance biex jerġgħu jużaw il-kodiċi, anke meta r-relazzjoni hija verament has-a. Jekk ma tistax tissostitwixxi s-subclass għall-bażi kullimkien, probabbilment mhix is-a — uża komposizzjoni.
Di d-differenza hija r-regola tal-deċizjoni pratika wara "favor composition over inheritance": agħżel ir-relazzjoni li hija vera, mhux dik li tikkonserva ftit linji.
Li tagħmilha sew iżomm il-gerarkija sekonda u onesta, u tiprevieni l-violi ta' Liskov fejn "sottotip" ma jistax verament jissostitwixi l-ġenitur tiegħu.