मैं अभी भी एक अमूर्त वर्ग और एक इंटरफेस के बीच के अंतर को पूरी तरह से समझने से दूर हूं। हर बार जब मुझे लगता है कि मुझे बुनियादी अवधारणाओं पर एक हैंडल मिलता है, तो मैं स्टैकएक्सचेंज को देख रहा हूं और मैं दो कदम पीछे हूं। लेकिन विषय पर कुछ विचार और ओपी प्रश्न:
प्रथम:
एक इंटरफ़ेस के दो सामान्य स्पष्टीकरण हैं:
एक इंटरफ़ेस उन विधियों और गुणों की एक सूची है जिन्हें कोई भी वर्ग कार्यान्वित कर सकता है, और एक इंटरफ़ेस लागू करके, एक वर्ग उन विधियों (और उनके हस्ताक्षरों) और उन गुणों (और उनके प्रकारों) की गारंटी देता है, जब उस वर्ग के साथ "हस्तक्षेप" किया जाएगा या उपलब्ध होगा उस वर्ग की एक वस्तु। एक इंटरफ़ेस एक अनुबंध है।
इंटरफेस अमूर्त वर्ग हैं जो कुछ भी नहीं / नहीं कर सकते हैं। वे उपयोगी हैं क्योंकि आप उन माध्य वर्गों के विपरीत एक से अधिक कार्यान्वित कर सकते हैं। जैसे, मैं क्लास बनानाब्रेड का एक ऑब्जेक्ट हो सकता हूं, और बेसब्रैड से विरासत में मिल सकता है, लेकिन इसका मतलब यह नहीं है कि मैं IWithNuts और IT स्वादYummy इंटरफेस दोनों को लागू नहीं कर सकता। मैं भी IDoesTheDishes इंटरफ़ेस को लागू कर सकता था, क्योंकि मैं सिर्फ रोटी, yknow नहीं हूं?
एक अमूर्त वर्ग के दो सामान्य स्पष्टीकरण हैं:
एक अमूर्त वर्ग है, yknow, वह चीज जो वह नहीं कर सकता है। यह पसंद है, सार, वास्तव में बिल्कुल वास्तविक चीज नहीं है। रुको, यह मदद करेगा। एक नाव एक सार वर्ग है, लेकिन एक सेक्सी प्लेबॉय यॉट बेसबोट का एक उप वर्ग होगा।
मैं अमूर्त कक्षाओं में एक पुस्तक पढ़ता हूं, और शायद आपको वह पुस्तक पढ़नी चाहिए, क्योंकि आप शायद इसे प्राप्त नहीं करते हैं और यदि आप उस पुस्तक को नहीं पढ़ते हैं तो यह गलत होगा।
वैसे, सिटीज़ बुक हमेशा प्रभावशाली लगती है, भले ही मैं अभी भी उलझन में हूं।
दूसरा:
एसओ पर, किसी ने इस सवाल का एक सरल संस्करण पूछा, क्लासिक, "क्यों इंटरफेस का उपयोग करें? क्या अंतर है? मैं क्या याद कर रहा हूं?" और एक उत्तर ने एक वायु सेना के पायलट को एक साधारण उदाहरण के रूप में इस्तेमाल किया। यह काफी ज़मीन पर नहीं था, लेकिन इसने कुछ बेहतरीन टिप्पणियों को जन्म दिया, जिनमें से एक में IFlyable इंटरफ़ेस का उल्लेख किया गया था जैसे टेकऑफ़, पायलट-इजेक्ट, आदि। और यह वास्तव में मेरे लिए एक वास्तविक दुनिया के उदाहरण के रूप में क्लिक किया गया कि इंटरफेस सिर्फ उपयोगी क्यों नहीं हैं। लेकिन महत्वपूर्ण है। एक इंटरफ़ेस एक ऑब्जेक्ट / क्लास को सहज बनाता है, या कम से कम यह समझ देता है कि यह है। ऑब्जेक्ट या डेटा के लाभ के लिए एक इंटरफ़ेस नहीं है, लेकिन किसी चीज़ के लिए जिसे उस ऑब्जेक्ट के साथ सहभागिता करने की आवश्यकता होती है। क्लासिक फल-> सेब-> फूजी या आकृति-> त्रिकोण-> वंशानुक्रम के समतुल्य उदाहरण, अपने वंशजों के आधार पर किसी दिए गए ऑब्जेक्ट को टैक्सोनॉमिक रूप से समझने के लिए एक महान मॉडल हैं। यह उपभोक्ता और प्रोसेसर को उसके सामान्य गुणों, व्यवहारों के बारे में सूचित करता है, चाहे वस्तु चीजों का एक समूह हो, आपके सिस्टम को नली देगा यदि आप इसे गलत जगह पर रखते हैं, या संवेदी डेटा का वर्णन करता है, एक विशिष्ट डेटा स्टोर के लिए एक कनेक्टर, या पेरोल बनाने के लिए आवश्यक वित्तीय डेटा।
एक विशिष्ट विमान ऑब्जेक्ट में आपातकालीन लैंडिंग के लिए एक विधि हो सकती है या नहीं भी हो सकती है, लेकिन अगर मैं इसकी आपातकालीन स्थिति को संभालने जा रहा हूं, तो मैं हर दूसरी उड़ने योग्य वस्तु की तरह केवल DumbPlane में कवर किया जा सकता हूं और सीखूंगा कि डेवलपर्स जल्दी से चले गए। क्योंकि वे सोचते थे कि यह सब एक ही है। ठीक उसी तरह जैसे मैं कैसे निराश होऊंगा अगर हर स्क्रू निर्माता के पास राइट की कसौटी की अपनी व्याख्या होती या अगर मेरे टीवी में वॉल्यूम कम करने वाले बटन के ऊपर वॉल्यूम वृद्धि बटन नहीं होता।
अमूर्त वर्ग वह मॉडल है जो स्थापित करता है कि किसी भी वंशज वस्तु को उस वर्ग के रूप में अर्हता प्राप्त करना होगा। यदि आपके पास बतख के सभी गुण नहीं हैं, तो इससे कोई फर्क नहीं पड़ता कि आपके पास IQuack इंटरफ़ेस लागू है, बस आपका एक अजीब पेंगुइन है। इंटरफेस वे चीजें हैं जो किसी और चीज के बारे में सुनिश्चित नहीं होने पर भी समझ में आती हैं। जेफ गोल्डब्लम और स्टारबक दोनों विदेशी अंतरिक्ष यान उड़ाने में सक्षम थे क्योंकि इंटरफ़ेस मज़बूती से समान था।
तीसरा:
मैं आपके सहकर्मी से सहमत हूं, क्योंकि कभी-कभी आपको कुछ विधियों को शुरू करने की आवश्यकता होती है। यदि आप एक सक्रिय रिकॉर्ड ORM बना रहे हैं, तो उसे एक बचत विधि की आवश्यकता है। यह उस उपवर्ग तक नहीं है जिसे त्वरित किया जा सकता है। और अगर आईसीआरयूडी इंटरफ़ेस पर्याप्त रूप से एक सार वर्ग के लिए युग्मित नहीं होने के लिए पोर्टेबल है, तो इसे अन्य वर्गों द्वारा कार्यान्वित किया जा सकता है, ताकि वे किसी भी वर्ग के वंश के किसी भी वर्ग के पहले से परिचित लोगों के लिए उन्हें विश्वसनीय और सहज बना सकें।
दूसरी ओर, इससे पहले एक महान उदाहरण था कि अमूर्त वर्ग को एक इंटरफ़ेस बांधने के लिए कब नहीं कूदना चाहिए, क्योंकि सभी सूची प्रकार एक कतार इंटरफ़ेस को लागू नहीं करेंगे (या करना चाहिए)। आपने कहा कि यह परिदृश्य आधा समय होता है, जिसका अर्थ है कि आप और आपके सहकर्मी दोनों आधे समय गलत हैं, और इस तरह से सबसे अच्छी बात यह है कि बहस, बहस, विचार करें, और यदि वे सही निकले, तो स्वीकार करें और युग्मन स्वीकार करें । लेकिन एक डेवलपर न बनें जो एक दर्शन का अनुसरण करता है, जबकि यह हाथ में नौकरी के लिए सबसे अच्छा नहीं है।