मुझे हमेशा एक भाषा में कई विरासतों का समर्थन करने का विचार पसंद आया है। बहुधा यद्यपि यह जानबूझकर माफ़ किया जाता है, और माना "प्रतिस्थापन" इंटरफेस है। इंटरफेस बस एक ही ग्राउंड को कवर नहीं करता है जो कई मल्टीपल इनहेरिटेंस करता है, और यह प्रतिबंध कभी-कभी अधिक बॉयलरप्लेट कोड को जन्म दे सकता है।
एकमात्र बुनियादी कारण जो मैंने इसके लिए सुना है वह आधार वर्गों के साथ हीरे की समस्या है । मैं बस इसे स्वीकार नहीं कर सकता। मेरे लिए, यह एक भयानक बहुत से आता है जैसे, "ठीक है, इसे पेंच करना संभव है, इसलिए यह स्वचालित रूप से एक बुरा विचार है।" आप एक प्रोग्रामिंग भाषा में कुछ भी पेंच कर सकते हैं, और मेरा मतलब कुछ भी है। मैं इसे गंभीरता से नहीं ले सकता, कम से कम अधिक गहन विवरण के बिना नहीं।
बस इस समस्या के बारे में पता होना लड़ाई का 90% है। इसके अलावा मुझे लगता है कि मैंने कुछ साल पहले एक सामान्य-प्रयोजन के काम के बारे में सुना था, जिसमें एक "लिफाफा" एल्गोरिथ्म शामिल था या ऐसा कुछ (क्या यह घंटी बजाता है, किसी को भी?)।
हीरे की समस्या के बारे में, मैं संभावित रूप से वास्तविक समस्या के बारे में सोच सकता हूँ, अगर आप किसी तीसरे पक्ष के पुस्तकालय का उपयोग करने की कोशिश कर रहे हैं और यह नहीं देख सकते हैं कि उस पुस्तकालय में दो प्रतीत होने वाली असंबंधित कक्षाएं एक सामान्य आधार वर्ग हैं, लेकिन इसके अलावा दस्तावेज़ीकरण, एक सरल भाषा सुविधा, कह सकती है, आवश्यकता है कि आप विशेष रूप से एक हीरा बनाने के लिए अपने इरादे की घोषणा करने से पहले यह वास्तव में आपके लिए एक संकलन करेंगे। इस तरह की विशेषता के साथ, हीरे का कोई भी निर्माण या तो जानबूझकर, लापरवाह है, या क्योंकि कोई इस नुकसान से अनजान है।
तो यह सब कहा जा रहा है ... क्या कोई वास्तविक कारण है कि ज्यादातर लोग कई विरासत से नफरत करते हैं, या क्या यह सब उन्माद का एक गुच्छा है जो अच्छे से अधिक नुकसान पहुंचाता है? क्या ऐसा कुछ है जो मैं यहाँ नहीं देख रहा हूँ? धन्यवाद।
उदाहरण
कार WheeledVehicle तक फैली हुई है, KIASpectra कार और इलेक्ट्रॉनिक का विस्तार करती है, KIASpectra में रेडियो शामिल है। KIASpectra में इलेक्ट्रॉनिक क्यों नहीं है?
क्योंकि यह है एक इलेक्ट्रॉनिक। विरासत बनाम रचना हमेशा एक-एक संबंध बनाम एक-एक संबंध होना चाहिए।
क्योंकि यह है एक इलेक्ट्रॉनिक। उस चीज़ के ऊपर और नीचे तार, सर्किट बोर्ड, स्विच आदि होते हैं।
क्योंकि यह है एक इलेक्ट्रॉनिक। यदि आपकी बैटरी सर्दियों में मृत हो जाती है, तो आप बस इतनी परेशानी में हैं जैसे कि आपके सभी पहिये अचानक गायब हो गए हों।
इंटरफेस का उपयोग क्यों नहीं करते? उदाहरण के लिए # 3 लें। मैं इसे बार-बार लिखना नहीं चाहता, और मैं वास्तव में ऐसा करने के लिए कुछ विचित्र छद्म सहायक वर्ग बनाना नहीं चाहता:
private void runOrDont()
{
if (this.battery)
{
if (this.battery.working && this.switchedOn)
{
this.run();
return;
}
}
this.dontRun();
}
(हम इस बात पर विचार नहीं कर रहे हैं कि यह कार्यान्वयन अच्छा है या बुरा है।) आप कल्पना कर सकते हैं कि इलेक्ट्रॉनिक से जुड़े ऐसे कई कार्य कैसे हो सकते हैं जो कि व्हीलेवेडिकल और वाइस-वर्सा में किसी भी चीज़ से संबंधित नहीं हैं।
मुझे यकीन नहीं था कि उस उदाहरण पर बसा है या नहीं, क्योंकि वहां व्याख्या के लिए जगह नहीं है। आप प्लेन का विस्तार करने वाले वाहन और फ्लाइंगऑब्जेक्ट और बर्ड का विस्तार करने वाले पशु और फ्लाइंगऑबजेक्ट के संदर्भ में, या बहुत अधिक शुद्ध उदाहरण के संदर्भ में भी सोच सकते हैं।
Traits
- वे वैकल्पिक कार्यान्वयन के साथ इंटरफेस की तरह काम करते हैं, लेकिन कुछ प्रतिबंध हैं जो हीरे की समस्या जैसे मुद्दों को उत्पन्न होने से रोकने में मदद करते हैं।
KiaSpectra
नहीं है Electronic
; यह है इलेक्ट्रॉनिक्स, और एक हो सकता है ElectronicCar
(विस्तार होगा जो Car
...)