అనేది -ని సంబంధం — ద్వారా రూపొందించబడింది ( ). అనేది -ని సంబంధం — ద్వారా రూపొందించబడింది ( ). సరైనది ఎంచుకోవడం ఒక ప్రధాన మోడలింగ్ నిర్ణయం.
అనేది -ని సంబంధం — ద్వారా రూపొందించబడింది ( ). అనేది -ని సంబంధం — ద్వారా రూపొందించబడింది ( ). సరైనది ఎంచుకోవడం ఒక ప్రధాన మోడలింగ్ నిర్ణయం.
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
}
కోరు: "X Y యొక్క రకం, లేదా X ఒక 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) ✅
జనులు కోడ్ను పునర్వాడుకోవటానికి వారసత్వానికి చేరుకుంటారు, సంబంధం నిజంగా has-a అయినప్పటికీ. ఎప్పుడూ సబ్క్లాస్ను బేస్కు ప్రతిక్షేపించలేకపోతే, ఇది is-a కాదు — కూర్పును ఉపయోగించండి.
ఈ వ్యత్యాసం "కూర్పును వారసత్వానికి అనుకూలించండి" వెనుక ఉన్న ఆచరణాత్మక నిర్ణయ నియమం: నిజమైన సంబంధం ఎంచుకోండి, కొన్ని పంక్తులను సేవ్ చేసే వాటిని కాదు.
ఇది సరిగా పొందడం విస్తృతులను నిస్సార మరియు నిజాయితీగా ఉంచుతుంది, మరియు Liskov ఉల్లంఘనలను నిరోధిస్తుంది, ఇక్కడ "సబ్టైప్" దాని మాతృ-తరగతికి కోసం నిజంగా నిలువుకోలేకపోతుంది.