क्या कोई व्यक्ति कृपया बता सकता है कि मैं विरासत के बजाय प्रतिनिधिमंडल का उपयोग कब करना चाहूंगा?विरासत के बजाय प्रतिनिधिमंडल का उपयोग कब करें?
उत्तर
जब आप बेस क्लास 'एपीआई "को कॉपी/एक्सपोज़ करना चाहते हैं, तो आप विरासत का उपयोग करते हैं। जब आप केवल "कॉपी" कार्यक्षमता चाहते हैं, प्रतिनिधिमंडल का उपयोग करें।
इसका एक उदाहरण: आप किसी सूची से बाहर निकलना चाहते हैं। ढेर में केवल पॉप, पुश और पिक है। आपको विरासत का उपयोग नहीं करना चाहिए कि आप push_back, push_front, removeAt, et al.-Stack में कार्यक्षमता की तरह नहीं चाहते हैं।
अच्छा नियम अंगूठे का –
उनके पास एक-दूसरे के साथ कुछ लेना देना नहीं है। प्रतिनिधि एक व्यवहार है। विरासत एक आदर्श तकनीक है।
विरासत "is-a" मॉडलिंग के लिए है। एक कंप्यूटर "एक-एक" इलेक्ट्रॉनिक प्रणाली है।
प्रतिनिधिमंडल यह है कि तरीके कैसे परिणाम प्रदान करते हैं। कभी-कभी एक वस्तु किसी अन्य वस्तु को काम सौंपती है। प्रतिनिधि किसी भी रिश्ते के माध्यम से हो सकता है - आप एक समग्र या कुल, या किसी भी रिश्तेदार के सदस्य को सुपरक्लस में भेज सकते हैं।
विरासत "is-a" रिश्तों को मॉडलिंग के लिए है, लेकिन यह भी है कि उप वर्ग बेस क्लास की कार्यक्षमता बढ़ाती है और इसे प्रतिबंधित करने के लिए कुछ भी नहीं करती है। – ChadD
@ चाडवर्थिंगटन: सच नहीं है; एक उप-वर्ग विधियों को ओवरराइड कर सकता है और उन्हें प्रतिस्थापित कर सकता है - अनिवार्य रूप से एक प्रतिबंध - सुपरक्लास पर वापस दिए बिना। –
@ एस।लॉट: जबकि आप विधियों को ओवरराइड कर सकते हैं, आपको उन सभी विधियों को ओवरराइड करने के लिए सावधान रहना होगा जो उस व्यवहार को बेनकाब करते हैं, जिसे आप प्रतिबंधित करना चाहते हैं - जिनमें से कुछ अभी तक लिखे गए नहीं हैं। @ चाडवर्थिंगटन की सलाह सुरक्षित है, खासकर जब आप सुपरक्लास को नियंत्रित नहीं करते हैं। –
आप एक सामान्य समूह में अपनी कार्यक्षमता को सरल बनाने के लिए कई आंतरिक वर्ग उदाहरणों में प्रतिनिधिमंडल का उपयोग कर सकते हैं। यदि आपकी भाषा उदाहरण के लिए एकाधिक विरासत को लागू नहीं करती है तो आप आधारों में से किसी एक से प्राप्त कर सकते हैं और दूसरे को लपेट सकते हैं, जो कार्यक्षमता को अंतर्निहित कार्यान्वयन के लिए प्रकट करना चाहते हैं। विरासत भी आपकी कक्षा को उन वर्गों के पदानुक्रम में जोड़ती है जहां से आप विरासत में हैं, जहां प्रतिनिधिमंडल के साथ आप अपनी जगह अपने पदानुक्रम में रख सकते हैं और दूसरे को कॉल प्रतिनिधि दे सकते हैं।
मान लीजिए आपका वर्ग बी कहा जाता है और व्युत्पन्न/को प्रत्यायोजित वर्ग कहा जाता है एक तो
यहाँ कुछ उदाहरण हैं जब विरासत या प्रतिनिधिमंडल इस्तेमाल किया जा रहा हैं:
तो
- आप व्यक्त करना चाहता हूँ रिलेशनशिप (ए-ए) तो आप विरासत का उपयोग करना चाहते हैं।
- आप अपनी कक्षा को मौजूदा एपीआई को उम्मीद करने में सक्षम होना चाहते हैं, तो आपको विरासत का उपयोग करने की आवश्यकता है।
- आप ए को बढ़ाने के लिए चाहते हैं, लेकिन ए अंतिम है और इसे आगे बढ़ाया नहीं जा सकता है तो आपको संरचना और प्रतिनिधिमंडल का उपयोग करने की आवश्यकता है।
मेरी राय में, जब प्रतिनिधि का उपयोग करने का समय होता है और विरासत कभी भी एम्बेडेड होती है तो प्रतिनिधिमंडल को बुलाया जा सकता है।
उदाहरण के लिए the in_threads gem लें, यह किसी भी रूबी एन्यूमेबल मॉड्यूल के लिए थ्रेड को लागू करने के लिए इनट्रेड्स प्रतिनिधिमंडल का उपयोग करता है। इसके साथ, केवल सरणी पर in_threads विधियों को कॉल करें, यह थ्रेड में चलाएगा।
- 1. टेम्पलेट बनाम विरासत का उपयोग कब करें
- 2. Web.Caching.Cache की बजाय HttpAplicationState का उपयोग कब करें?
- 3. गुणों के बजाय गुणों का उपयोग कब करें?
- 4. और x के बजाय पता (x) का उपयोग कब करें?
- 5. ImageView के बजाय ImageButton का उपयोग कब करें?
- 6. 'मज़ेदार' के बजाय 'फ़ंक्शन' का उपयोग कब करें?
- 7. रूबी में हैश के बजाय स्ट्रक्चर का उपयोग कब करें?
- 8. SFINAE के बजाय `static_assert` का उपयोग कब करें?
- 9. निजी विरासत वीएस संरचना: कब उपयोग करें?
- 10. मुझे विरासत के बजाय टेम्पलेट का उपयोग कब करना चाहिए, और इसके विपरीत?
- 11. मुझे हैश के बजाय ओपनस्ट्रक्चर का उपयोग कब करना चाहिए?
- 12. कोको विरासत के बजाय प्रतिनिधियों का उपयोग क्यों करता है?
- 13. प्रतिनिधिमंडल क्या है? मैं इसका उपयोग कब करना चाहूंगा?
- 14. QueueUserAPC() का उपयोग कब करें?
- 15. $ .extend ({...}) का उपयोग कब करें?
- 16. मुझे इनलाइन के बजाय __forceinline का उपयोग कब करना चाहिए?
- 17. स्ट्रिंगस्ट्रीम के बजाय स्ट्रिंग का उपयोग कब करना चाहिए?
- 18. मुझे UIImagePickerControllerSourceTypePhotoLibrary का उपयोग UIImagePickerControllerSourceTypeSavedPhotosAlbum के बजाय कब करना चाहिए?
- 19. मुझे fprintf के बजाय fputs का उपयोग कब करना चाहिए?
- 20. ट्यूपल का उपयोग कब और कब करें?
- 21. हाइबरनेट में पृथक मानदंडों का उपयोग कब करें? अलग-अलग मानदंडों का उपयोग कब करें
- 22. NSNotificationCenter बनाम प्रतिनिधिमंडल (प्रोटोकॉल का उपयोग कर)?
- 23. प्रत्येक के लिए कब उपयोग करें और xslt में लागू-टेम्पलेट्स का उपयोग कब करें?
- 24. डुप्ली का उपयोग कब करें, और रूबी में क्लोन का उपयोग कब करें?
- 25. Mockito.verify() का उपयोग कब करें?
- 26. स्ट्रिंगबिल्डर का उपयोग कब करें?
- 27. Request.RegisterForDispose का उपयोग कब करें?
- 28. मल्टीथ्रेड का उपयोग कब करें?
- 29. ओपनसीएल का उपयोग कब करें?
- 30. reinterpret_cast का उपयोग कब करें?
यहां अच्छी चर्चा: http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance –
मैं दिए गए उत्तरों पर विस्तार नहीं करूंगा, हालांकि एक पुस्तक जिसे मैंने वास्तव में इस तरह के साथ उपयोगी पाया है ओओ डिजाइन के मुद्दे आर्थर रील की उत्कृष्ट पुस्तक ** ऑब्जेक्ट ओरिएंटेड डिजाइन हेरिस्टिक ** है। http://www.davegardner.me.uk/reading/oo-design-heuristics/ http://www.amazon.co.uk/Object-oriented- डिज़ाइन- ह्यूरिस्टिक्स- आर्थर-Riel/dp/020163385X – Dave