2010-08-09 11 views
42

मैं सुनता हूं (और इस साइट पर पढ़ता हूं) "विरासत पर रचना के पक्ष में" के बारे में बहुत कुछ।संरचना क्या है क्योंकि यह ऑब्जेक्ट ओरिएंटेड डिज़ाइन से संबंधित है?

लेकिन कंपोजिटन क्या है? मैं व्यक्ति के बिंदु से विरासत को समझता हूं: स्तनपायी: पशु, लेकिन मैं वास्तव में कहीं भी कंपोस्टियन की परिभाषा नहीं देख सकता .. क्या कोई मुझे अंदर भर सकता है?

उत्तर

49

संरचना अधिक जटिल बनाने के लिए सरल प्रकारों को संयोजित करने के लिए संदर्भित करती है। अपने उदाहरण में, रचना हो सकता है:

Animal: 
    Skin animalSkin 
    Organs animalOrgans 

Mammal: 
    private Animal _animalRef 
    Hair/fur mammalFur 
    warm-blooded-based_cirulation_system heartAndStuff 

Person: 
    private Mammal _mammalRef 
    string firstName 
    string lastName 

लाभ इस दृष्टिकोण के लिए है जो:

Animal: 
    Skin animalSkin 
    Organs animalOrgans 


Mammal::Animal: 
    Hair/fur mammalFur 
    warm-blooded-based_cirulation_system heartAndStuff 

Person::Mammal: 
    string firstName 
    string lastName 

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

मैं यहाँ अच्छे उदाहरण के साथ एक अच्छा लिंक मिल गया: http://www.artima.com/designtechniques/compoinh.html

+4

तो क्या मैं यह कह सकता हूं: "संरचना तब होती है जब मैं 'कक्षा बी' के अंदर 'कक्षा ए' का ऑब्जेक्ट बनाता हूं (' कक्षा ए' से 'कक्षा बी' के उप-वर्ग के बजाय)। " ? – thesummersign

+0

ओह। ठीक है इसे 'w69rdy' बाद में जवाब दिया। हाँ मैं यह कह सकता हूँ। – thesummersign

31

संरचना केवल उन भागों को बनाती है जो पूरे को बनाती हैं। एक कार में पहियों, एक इंजन और सीटें हैं। विरासत एक "एक" संबंध है। संरचना एक "है" संबंध है। जहां एक और वर्ग के भीतर एक वर्ग का एक उदाहरण है

+2

और एकत्रीकरण एक ... संबंध है। –

+1

एकत्रीकरण सरल संरचना हो सकता है, या यदि यह ऐसी चीजों का संग्रह है (उदाहरण के लिए, कार पर पहियों), इसे संग्रह के रूप में माना जा सकता है।एक कार में चार अलग-अलग पहियों हो सकते हैं, विशिष्ट रूप से पहचाने जाते हैं, या इसमें पहियों का संग्रह हो सकता है। यह उपयोग पर निर्भर करता है। यदि संग्रह वर्ग का उपयोग करना है, तो संग्रह स्वयं एकत्रीकरण है। –

2

संरचना का एक उदाहरण है बजाय इसे से इनहेरिट

This पेज का एक अच्छा कारण है कि लोगों का कहना है के कुछ उदाहरण के साथ "विरासत से अधिक पक्ष रचना" समझा लेख है क्यूं कर।

+1

वास्तव में नहीं * किसी अन्य वर्ग [सी 1] * के भीतर एक वर्ग [सी 2] का एक उदाहरण * लेकिन * एक ** कक्षा ** ** किसी अन्य वर्ग के ** उदाहरण ** के भीतर एक कक्षा का ** ** **। पूर्व को गलत समझा जा सकता है जैसे कि सी 1 को परिभाषित करते समय आपने सी 2 को तुरंत चालू किया, जो सामान्य नहीं होना चाहिए। –

14

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

+1

+1: संरचना राजा है। –

11
class Engine 
{ 

} 

class Automobile 
{ 

} 


class Car extends Automobile // car "is a" automobile //inheritance here 
{ 
Engine engine; // car "has a" engine //composition here 

} 

संरचना - एक वस्तु की कार्यक्षमता विभिन्न वर्गों के एक समग्र से बना है। प्रैक्टिस में, इसका मतलब है कि एक पॉइंटर को दूसरी कक्षा में रखना जिससे काम स्थगित हो जाता है।

विरासत - किसी ऑब्जेक्ट की कार्यक्षमता इसकी अपनी कार्यक्षमता और इसके मूल वर्गों से कार्यक्षमता से बना है।

विरासत पर संरचना क्यों पसंद की जाती है, Circle-ellipse problem पर एक नज़र डालें।

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