2016-09-12 11 views
5

मैंने स्टैक ओवरफ्लो पर रिश्तों के बीच अंतर को समझाते हुए कई पदों को देखा है: उदाहरणों के साथ संघ, एकत्रीकरण, संरचना और विरासत। हालांकि, मैं इन दृष्टिकोणों में से प्रत्येक के पेशेवरों और विपक्ष के बारे में अधिक विशेष रूप से उलझन में हूं, और जब एक दृष्टिकोण हाथ में कार्य के लिए सबसे प्रभावी है। यह ऐसा कुछ है जिसे मैं वास्तव में एक अच्छा जवाब खोजने में सक्षम नहीं हूं।एसोसिएशन, एकत्रीकरण, संरचना और विरासत का उपयोग कब करें?

फोरम के दिशानिर्देशों के साथ इनलाइन रखना, मैं नहीं पूछ रहा हूं कि क्यों लोग व्यक्तिगत रूप से संरचना पर विरासत का उपयोग करना पसंद करते हैं, उदाहरण के लिए। मैं विशेष रूप से प्रत्येक दृष्टिकोण में किसी भी उद्देश्य लाभ/कमजोरियों में रूचि रखता हूं, जितना मजबूत हो सकता है। अर्थात। क्या एक दृष्टिकोण दूसरे की तुलना में अधिक पठनीय कोड बनाता है, या इसमें बेहतर रन टाइम दक्षता इत्यादि है।

आदर्श रूप से, अगर कोई मुझे कुछ वास्तविक विश्व उदाहरण दे सकता है जहां ये दृष्टिकोण सफल हो गए या विफल हो गए और क्यों, यह होगा अत्यंत मेरे विकास के लिए उपयोगी है, और मुझे उम्मीद है, दूसरों के ज्ञान।

काम करने के लिए ठोस आधार सुनिश्चित करने के हित में, मैंने पाइथन 2 में प्रत्येक रिश्ते के उदाहरण शामिल किए हैं। उम्मीद है कि अगर इन संबंधों की मेरी समझ वास्तव में सही नहीं है, तो इससे भ्रम से बचा जा सकता है। के रूप में यह addAllNums विधि में एक से विशिष्ट विशेषताओं का उपयोग करता

एसोसिएशन

कक्षा बी, वर्ग ए के साथ एक सप्ताह संघ संबंध नहीं है। हालांकि, यह संबंधों की सीमा है।

class A(object): 
    def __init__(self, a, b, c): 
     self.a = a 
     self.b = b 
     self.c = c 

    def addNums(): 
     self.b + self.c 

class B(object): 
    def __init__(self, d, e): 
     self.d = d 
     self.e = e 

    def addAllNums(self, Ab, Ac): 
     x = self.d + self.e + Ab + Ac 
     return x 

ting = A("yo", 2, 6) 
ling = B(5, 9) 

print ling.addAllNums(ting.b, ting.c) 

एकत्रीकरण

कक्षा बी क्लास ए के साथ एक एकत्रीकरण संबंध बनाता है, यह संदर्भ के रूप में एक स्वतंत्र एक वस्तु जब प्रारंभ, इसकी विशेषताओं में से एक के रूप में। जबकि एक बी वस्तु एक पर निर्भर है, बी के विनाश की स्थिति में, एक अस्तित्व के लिए के रूप में यह बी से स्वतंत्र है जारी रहेगा

class A(object): 
    def __init__(self, a, b, c): 
     self.a = a 
     self.b = b 
     self.c = c 

    def addNums(): 
     self.b + self.c 

class B(object): 
    def __init__(self, d, e, A): 
     self.d = d 
     self.e = e 
     self.A = A 

    def addAllNums(self): 
     x = self.d + self.e + self.A.b + self.A.c 
     return x 

ting = A("yo", 2, 6) 
ling = B(5, 9, ting) 

print ling.addAllNums() 

संरचना

बहुत एकत्रीकरण की तरह

, तथापि के बजाय संदर्भित एक स्वतंत्र वस्तु, बी वास्तव में एक विशेषता के रूप में अपने स्वयं के निर्माता में ए का एक उदाहरण शुरू करता है। यदि बी वस्तु नष्ट हो जाती है तो भी एक वस्तु है। यही कारण है कि रचना इतनी मजबूत रिश्ता है।

class A(object): 
    def __init__(self, a, b, c): 
     self.a = a 
     self.b = b 
     self.c = c 

    def addNums(): 
     self.b + self.c 

class B(object): 
    def __init__(self, d, e): 
     self.d = d 
     self.e = e 
     self.A = A("yo", 2, 6) 

    def addAllNums(self): 
     x = self.d + self.e + self.A.b + self.A.c 
     return x 

ling = B(5, 9) 

print ling.addAllNums() 

मैं के रूप में मैं इसके साथ पूरी तरह से खुश हूँ विरासत का एक उदाहरण में शामिल नहीं करने का फैसला किया है, और मुझे लगता है कि इसके शामिल किए जाने के एक स्पर्श का एक सा पर सवाल की बात फेंक सकता है।

भले ही, उपरोक्त उदाहरणों और विरासत के पेशेवरों और विपक्ष (एक दूसरे की तुलना में) क्या हैं।

धन्यवाद।

उत्तर

0

मेरी व्यक्तिगत राय यह है कि आपको पहले इस बारे में सोचना चाहिए कि आप वास्तविक दुनिया के डेटा को कैसे मॉडल करेंगे, जो आपको वास्तविक वास्तविक दुनिया की समस्याओं को हल करने में मदद करते हैं। कक्षाओं में चीजों को आवंटित करना, कक्षाओं और/या उदाहरणों के बीच संबंधों का वर्णन करना, चीजों के गुणों का वर्णन करना, कठिन हिस्सा है: यह अधिकार प्राप्त करें, और कोड में पैटर्न (चाहे वह विरासत, एकत्रीकरण, सबक्लासिंग आदि हो) आसान हो जाए।उदाहरण के लिए:

वर्गों और आयताकारों के बीच संबंध क्या है? क्या उलटा मैट्रिस स्क्वायर मैट्रिस का उप-वर्ग है? क्या एक मृत गाय एक स्तनपायी है? क्या छात्र व्यक्ति का उप-वर्ग है? शिक्षक एक उपclass है? टीए के बारे में क्या?

+0

मुझे लगता है कि के रूप में एक नाम संग्रहीत करना चाहिए समस्या तब आती है जब मैं वास्तव में असली दुनिया वस्तुओं से निपट नहीं रहा हूं। जैसे अगर मैंने कार डीलरशिप में काम किया है, तो एक कार के साथ एक संयोजन संबंध होगा: स्टीयरिंग व्हील, टायर इत्यादि, क्योंकि ये तत्व कार के बाहर मौजूद नहीं हैं। आखिरकार, आप किसी को एक नई कार नहीं बेच सकते हैं लेकिन निकास रखने का फैसला करते हैं। समान रूप से, अगर मैंने गेराज में काम किया है, तो मैं इसे अलग करके एक कार को नष्ट कर सकता हूं, लेकिन निकास अभी भी स्वतंत्र रूप से मौजूद होगा; रिश्ते एकत्रीकरण करना। हालांकि, जब मैं वैचारिक वस्तुओं से निपट रहा हूं, ऐसा लगता है कि चीजें इतनी स्पष्ट कट नहीं हैं ... – daydreamingwill

1

wikipedia के अनुसार अंगूठे का नियम यह है कि संबंध समय के साथ नरम हो जाते हैं, या आपके वैचारिक मॉडल की बढ़ती विस्तार पर यानी रचनाएं एकत्रीकरण और एकत्रीकरण बन जाती हैं, उदाहरण के लिए एक इंजन मूल रूप से कार की संरचना हो सकता है लेकिन जैसे ही आप कार्यक्षमता जोड़ते हैं, इंजन को एक कार से दूसरे में स्थानांतरित किया जा सकता है जिससे इसे एकत्रीकरण मिल जाता है।

तो पेशेवरों और प्रत्येक विधि के विपक्ष के अपने सवाल का जवाब देने, इसे और अधिक संबंध आप मॉडल कर रहे हैं का सवाल है, सवाल के समान मैं एक स्ट्रिंग या एक नंबर

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