2009-04-17 15 views

उत्तर

20

एक बहुत सार सवाल है यही कारण है, यह देखते हुए कि दोनों रचना & एकत्रीकरण बहुत समान हैं & वास्तव में केवल कोड स्तर पर अलग-अलग अवधारणात्मक और जरूरी नहीं। (यानी आप एक कार को इंजन बनाने के लिए एक कार पर विचार कर सकते हैं, और एक कुत्ते को समेकन करने के लिए fleas हो रहा है, लेकिन अगर आप उन्हें कोड में मॉडलिंग कर रहे थे तो उन्हें लागू करने के लिए कुछ भी नहीं रोक रहा है)।

हालांकि, अगर आप मतभेदों को तोड़ने के लिए चाहते हैं, तो & कोशिश & जबरन उन मतभेदों मुझे लगता है कि आप कुछ इस तरह ... an example from Wikipedia लेने कर सकता है उजागर करने के लिए सॉफ्टवेयर डिजाइन फैसले जोड़ें:

एकत्रीकरण साधारण से अलग है उसमें रचना है कि यह स्वामित्व का मतलब नहीं है। संरचना में, जब स्वामित्व वस्तु नष्ट हो जाती है, तो निहित वस्तुएं होती हैं। एकत्रीकरण में, यह जरूरी नहीं है। उदाहरण के लिए, एक विश्वविद्यालय के विभिन्न विभागों (जैसे, रसायन शास्त्र) का मालिक है, और प्रत्येक विभाग में कई प्रोफेसर हैं। यदि विश्वविद्यालय बंद हो जाता है, तो विभाग अब मौजूद नहीं होंगे, लेकिन उन विभागों के प्रोफेसर मौजूद रहेगा। इसलिए, एक विश्वविद्यालय को विभागों की संरचना के रूप में देखा जा सकता है, जबकि विभागों में प्रोफेसरों का एकत्रीकरण होता है। इसके अलावा, एक प्रोफेसर एक से अधिक विभागों में काम कर सकता है, लेकिन एक विभाग एक से अधिक विश्वविद्यालयों का हिस्सा नहीं हो सकता है।

आप (रचना/एकत्रीकरण के रूप में कई काल्पनिक संकेत के साथ) यह प्रतिनिधित्व करने के लिए इस कोड का निर्माण हो सकता है:

public class University : IDisposable 
{ 
    private IList<Department> departments = new List<Department>(); 

    public void AddDepartment(string name) 
    { 
     //Since the university is in charge of the lifecycle of the 
     //departments, it creates them (composition) 
     departments.Add(new Department(this, name)); 
    } 

    public void Dispose() 
    { 
     //destroy the university... 
     //destroy the departments too... (composition) 
     foreach (var department in departments) 
     { 
      department.Dispose(); 
     } 
    } 
} 

public class Department : IDisposable 
{ 
    //Department makes no sense if it isn't connected to exactly one 
    //University (composition) 
    private University uni; 
    private string name; 

    //list of Professors can be added to, meaning that one professor could 
    //be a member of many departments (aggregation) 
    public IList<Professor> Professors { get; set; } 

    // internal constructor since a Department makes no sense on its own, 
    //we should try to limit how it can be created (composition) 
    internal Department(University uni, string name) 
    { 
     this.uni = uni; 
     this.name = name; 
    } 

    public void Dispose() 
    { 
     //destroy the department, but let the Professors worry about 
     //themselves (aggregation) 
    } 
} 

public class Professor 
{ 
} 
+3

पुराना सवाल, लेकिन मैं इस पर ठोकर खाई, मैं सिर्फ सुझाव है कि अगर विभाग हो रहा है केवल मिश्रित, आप इसे विश्वविद्यालय के अंदर एक नेस्टेड कक्षा होने और इसे निजी बनाने के द्वारा लागू कर सकते हैं। इस प्रकार किसी अन्य स्थान के लिए एक विभाग घोषित करने और माता-पिता/बाल संबंध को स्पष्ट करने के लिए अपरिवर्तनीय बनाना। –

5

ठीक है, एक कचरा एकत्र दुनिया में जहां सभी वस्तुओं संदर्भ, सूक्ष्म अंतर (स्वामित्व में) सख्त संरचना और एकत्रीकरण एक छोटे से blurs के बीच के माध्यम से पहुंचा जा सकता है में - सामान्य में तो (का उपयोग करते समय वर्ग) यह अन्य वस्तु या संग्रह के लिए एक क्षेत्र के लिए नीचे फोड़े:

class Building { 
    private readonly List<Room> rooms = new List<Room>(); 
    public IList<Room> Rooms {get {return rooms;}} 

    public Address Address {get;set;} 
    //... 
} 
class Address { 
    public string Line1 {get;set;} 
    public string PostCode {get;set;} 
    //... 
} 
class Room { 
    public string Name {get;set;} 
    public int Capacity {get;set;} 
    //... 
} 

मैं बिंदु याद किया है, तो कृपया स्पष्ट ...

हालात जब आप struct रों पर चर्चा और अधिक शामिल हैं - लेकिन आम तौर पर जब OO अवधारणाओं के बारे में बात, struct उपयोग मान फ़ील्ड तक सीमित है ...

संबंधित मुद्दे