के बीच अंतर मैं एक सहकर्मी के साथ चर्चा कर रहा था, जिन्होंने जोर दिया कि जावा और सी # जैसी भाषाओं में शुद्ध सार आधार वर्ग का उपयोग करने का कोई कारण नहीं है, क्योंकि इसका मतलब यह है कि आप बस हैं एकाधिक विरासत की कमी के आसपास पाने में असमर्थ।एक शुद्ध सार वर्ग और इंटरफ़ेस
मुझे लगता है कि वह इस बारे में गलत है, क्योंकि मैंने हमेशा सोचा है कि यदि कोई बात संज्ञा है तो यह एक वस्तु है, और यदि यह एक क्रिया है तो यह एक इंटरफ़ेस है।
उदाहरण के लिए, यदि मैं Bird
टाइप करना चाहता था, जहां मैं इसे लागू किए बिना fly
विधि को लागू करना चाहता था, तो मैं इसे एक शुद्ध अमूर्त वर्ग बनाउंगा।
अगर मैं Flies
टाइप करना चाहता था, तो मैं इसे fly
विधि के साथ एक इंटरफ़ेस बनाउंगा।
Bird
Flies
लागू कर सकता है।
क्या मैं गलत हूँ?
संपादित करें:
केवल ठोस तर्क मैं देखने की मेरी बात का समर्थन करने के दे सकते हैं कि भविष्य में कुछ बिंदु पर डिजाइन इतना बदलने के लिए है कि पक्षियों खा सकते हैं की आवश्यकता हो सकती है। यदि सभी पक्षी समान खाते हैं तो इसे Bird
में जोड़ा जाना चाहिए, जिससे इसे शुद्ध शुद्ध अमूर्त बना दिया जा सके।
तो Bird
एक अंतरफलक किया गया था, इस परिवर्तन को बस एक बुरा सपना हो सकता है, के बाद से मैं चीजें हैं जो कुछ अन्य आधार वर्ग से विरासत भी मेरी Bird
इंटरफ़ेस को लागू है कि क्या पता नहीं कर सकते, तो मैं सिर्फ अपनी समस्याओं दूर refactor नहीं कर सकते।
+1 - अच्छा प्रश्न और मुझे लगता है कि सार वर्गों के उपयोग के लिए आने वाले उत्तरों में कई तर्कसंगत कारणों का पता लगाया जाएगा। –
बस अपने प्रश्न के * भाग * पर उठाएं (इस प्रकार * उत्तर * पोस्ट नहीं कर रहा है): मैं यह नहीं कहूंगा कि इंटरफेस हमेशा * क्रियाएं * हैं। इंटरफेस का उपयोग * बहुत * किया जाता है ताकि कक्षा को दुनिया के सामने एक चेहरा दिखाया जा सके जो कि संज्ञा के रूप में सबसे अच्छा मॉडल है। बस 'java.util' में कुछ इंटरफेस देखें:' तुलनाकर्ता ',' गणना ',' सूची', 'इटरेटर', 'मानचित्र', ... –
राय बैकसाइड्स की तरह हैं, हर किसी को एक मिला है और कुछ बेहतर हैं दूसरों की तुलना में।मुझे विश्वास नहीं है कि व्याकरण के साथ ओओपी की तुलना सही है लेकिन इसके करीब है। इस समरूपता को बढ़ाने के लिए – Lloyd