दोनों "Has-A" संबंध दर्शाते हैं, लेकिन **जीवनचक्र स्वामित्व** में अंतर है।
कंपोजिशन (Composition) - मजबूत स्वामित्व
- "Part-of" संबंध: भाग मालिक के बिना अस्तित्व में नहीं रह सकता।
- पैरेंट नष्ट होता है → चाइल्ड भी नष्ट हो जाता है।
- चाइल्ड केवल एक पैरेंट से संबंधित होता है।
public class Engine { ... }
public class Car
{
Engine engine = new Engine(); // Car बनाता और मालिक है
// Car नष्ट → Engine नष्ट
}
एग्रीगेशन (Aggregation) - कमजोर संबंध
- "Has-A" संबंध: भाग स्वतंत्र रूप से अस्तित्व में रह सकता है।
- पैरेंट नष्ट होता है → चाइल्ड जीवित रह सकता है।
- चाइल्ड एकाधिक पैरेंट्स के साथ साझा किया जा सकता है।
public class Address { ... }
public class Employee
{
private Address address;
public Employee(Address addr) // बाहर से इंजेक्टेड
{
this.address = addr;
}
}
// Employee नष्ट → Address जीवित रह सकता है (दूसरे Employee द्वारा उपयोग)
तुलना तालिका
| पहलू | कंपोजिशन | एग्रीगेशन |
|---|---|---|
| जीवनचक्र | पैरेंट के साथ बंधा | स्वतंत्र |
| स्वामित्व | एक्सक्लूसिव | साझा/बाहरी |
| उदाहरण | Car-Engine, House-Room | Employee-Address, Student-Course |
| UML | भरा डायमंड (◆) | खाली डायमंड (◇) |
| कपलिंग | टाइटर | लूज़र |
डिज़ाइन सिद्धांत
"कंपोजिशन ओवर इनहेरिटेंस" - लेकिन एग्रीगेशन और भी लूज़र है। संदर्भ के अनुसार चुनें।