संरचना और विरासत।क्या कोई संरचना ऐसी विरासत को पूरा नहीं कर सकती है?
मुझे पता है कि उचित होने पर वे दोनों टूल्स चुनने के लिए हैं, और संरचना और विरासत के बीच चयन में संदर्भ बहुत महत्वपूर्ण है। हालांकि, प्रत्येक के लिए उपयुक्त संदर्भ के बारे में चर्चा आमतौर पर थोड़ी अस्पष्ट होती है; इसने मुझे इस बात पर विचार करना शुरू कर दिया है कि परंपरागत ओओपी के अलग-अलग पहलुओं को कितना स्पष्ट रूप से विरासत और बहुरूपता है।
पॉलिमॉर्फिज्म एक को "एक-एक" संबंधों को समान रूप से विरासत के रूप में निर्दिष्ट करने की अनुमति देता है। विशेष रूप से, बेस क्लास से उत्तराधिकारी उस वर्ग और उसके उप-वर्गों के बीच एक बहुरूप संबंध बनाता है। हालांकि, जबकि शुद्ध इंटरफेस का उपयोग करके बहुरूपता लागू की जा सकती है, विरासत एक साथ कार्यान्वयन विवरण स्थानांतरित करके पॉलिमॉर्फिक संबंधों को जटिल बनाती है। इस तरह, विरासत शुद्ध बहुरूपता से काफी अलग है।
एक उपकरण के रूप में, विरासत तुच्छ मामलों में कार्यान्वयन फिर से उपयोग को सरल बनाकर अलग ढंग से बहुरूपता से प्रोग्रामर (शुद्ध इंटरफेस के माध्यम से) कार्य करता है। अधिकांश मामलों में, हालांकि, एक सुपरक्लास के कार्यान्वयन विवरण उप-वर्ग की आवश्यकताओं के साथ संक्षेप में संघर्ष करते हैं। यही कारण है कि हमने "ओवरराइड" और "सदस्य छिपाने" हैं। इन मामलों में, विरासत द्वारा प्रदान किए गए कार्यान्वयन पुन: उपयोग को कोड के कैस्केडिंग स्तरों में राज्य परिवर्तनों और निष्पादन पथों को सत्यापित करने के अतिरिक्त प्रयास के साथ खरीदा जाता है: उप वर्ग के पूर्ण "चतुर" कार्यान्वयन विवरण कई वर्गों के बीच फैले हुए हैं, जिसका आमतौर पर मतलब है कई फाइलें, जिनमें से केवल प्रश्न उप-वर्ग पर लागू होते हैं। विरासत से निपटने के दौरान उस पदानुक्रम को देखना बिल्कुल जरूरी है, क्योंकि सुपरक्लास के कोड को देखे बिना, यह जानने का कोई तरीका नहीं है कि आपके राज्य के साथ अनजान विवरण क्या बंद हो रहे हैं या आपके निष्पादन को हटा रहे हैं।
तुलनात्मक रूप से, संयोजन गारंटी के विशेष उपयोग से आप देखेंगे कि स्पष्ट रूप से तत्काल वस्तुओं द्वारा किस राज्य को संशोधित किया जा सकता है जिनके तरीकों को आपके विवेकाधिकार पर बुलाया जाता है। वास्तव में कार्यान्वित कार्यान्वयन अभी भी हासिल नहीं किया गया है (और वास्तव में वांछनीय भी नहीं है, क्योंकि संरचित प्रोग्रामिंग का लाभ कार्यान्वयन विवरणों का समावेशन और अमूर्त है) लेकिन आपको अभी भी अपना कोड-पुन: उपयोग मिलता है, और आपको केवल एक ही स्थान पर देखना होगा जब कोड गलत व्यवहार करता है।
व्यवहार में इन विचारों का परीक्षण, शुद्ध इंटरफ़ेस आधारित बहुरूपता और वस्तु रचना का एक संयोजन के लिए पारंपरिक विरासत को छोड़कर रखने के लक्ष्य को, मैं सोच रहा हूँ,
क्या वस्तु रचना है और इंटरफेस है कि विरासत कर सकते हैं को पूरा नहीं कर सकते ?
संपादित
प्रतिक्रियाओं में अब तक, ewernli का मानना है कि कोई तकनीकी एक तकनीक के लिए उपलब्ध कारनामों लेकिन अन्य नहीं हैं; बाद में उन्होंने उल्लेख किया कि प्रत्येक तकनीक के लिए अलग-अलग पैटर्न और डिज़ाइन दृष्टिकोण कैसे निहित हैं। इसका कारण है। हालांकि, सुझाव मुझे यह पूछकर मेरे प्रश्न को परिष्कृत करने के लिए प्रेरित करता है कि पारंपरिक विरासत के बदले संरचना और इंटरफेस का विशेष उपयोग किसी भी प्रमुख डिजाइन पैटर्न के उपयोग को प्रतिबंधित करेगा? और यदि हां, तो मेरी स्थिति में उपयोग के लिए समकक्ष पैटर्न नहीं हैं?
व्यक्तिगत रूप से, मुझे मिश्रण पसंद है। :) –
मेरे पास प्रभावी डुप्लिकेशन की जांच करने के लिए समय नहीं है, लेकिन यह विरासत बनाम रचना विषय पूर्व में एसओ पर बार-बार दौरा किया जाता है। http://stackoverflow.com/questions/216523/object-oriented-best-practices-inheritance-v-composition-v-interfaces या http://stackoverflow.com/questions/1598722/should-i-use- विरासत -या-रचना। 'कोई भी इस विषय पर हमेशा एक मोड़ डाल सकता है और इसे एक उपन्यास चीजों पर ले सकता है ...' फिर भी एक बात हमें सहमत करनी चाहिए कि इस प्रकार का प्रश्न निश्चित या यहां तक कि आधिकारिक उत्तर नहीं देता है। शायद एक सीडब्ल्यू अधिक उपयुक्त प्रारूप हो सकता है ... – mjv
मेरा मतलब थका हुआ बहस फिर से नहीं करना था। माना जाता है कि जिस तरह से मैंने अपना मामला बताया था, वह बहस के एक तरफा नमूना था, लेकिन मेरा प्राथमिक हित इस जवाब में है कि विरासत के लिए उपयोग किया गया है या नहीं, जिसे वास्तव में रचना और इंटरफेस के साथ प्रतिस्थापित नहीं किया जा सकता है। पी। एसडब्ल्यू प्रारूप क्या है? हो सकता है कि मैं कोशिश करूँगा ... –