என்பது -ன் உறவு — மூலம் மாதிரியாக்கப்பட்டது ( ). என்பது -ன் உறவு — மூலம் மாதிரியாக்கப்பட்டது ( ). சரியான ஒன்றைத் தேர்ந்தெடுப்பது ஒரு முக்கிய மாதிரியாக்கல் முடிவு.
என்பது -ன் உறவு — மூலம் மாதிரியாக்கப்பட்டது ( ). என்பது -ன் உறவு — மூலம் மாதிரியாக்கப்பட்டது ( ). சரியான ஒன்றைத் தேர்ந்தெடுப்பது ஒரு முக்கிய மாதிரியாக்கல் முடிவு.
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 ஆக இருந்தாலும் கூட. நீங்கள் ஒரு பிரிவின் வகுப்பை எல்லா இடங்களிலும் அடிப்படை பிரிவிற்கு மாற்றவிடாமல் இருந்தால், இது aன் உறவு அல்ல — கலவையைப் பயன்படுத்துங்கள்.
இந்த வேறுபாடு "கலவையை பாரம்பரியத்திற்கு முன்னுரிமை கொடுங்கள்" பின்னணியில் உள்ள நடைமுறை முடிவெடுக்கும் விதி: உண்மையான உறவைத் தேர்ந்தெடுங்கள், சில வரிகளைச் சேமிக்கும் ஒன்றல்ல.
திறமையாக செய்ய வெறுக்கபட்டிருப்பு மற்றும் நாண்யம் வைத்திருக்கிறது மற்றும் Liskov மீறல்கள் தடுக்கிறது, அங்கு "பிரிவு" உண்மையில் அதன் பெற்றோரின் இடத்தில் நிற்க முடியாது.