देर से, मैं उन पदों को पढ़ रहा हूं जो गलत धारणा के बारे में बात करते हैं कि इंटरफेस अबास्ट्रक्शन हैं। ऐसी एक पोस्ट http://blog.ploeh.dk/2010/12/02/InterfacesAreNotAbstractions.aspxइंटरफेस (इंटरफेस/अमूर्त वर्ग) abstractions नहीं हैं?
मैं थोड़ी उलझन में हूं। अगर मेरे पास इंटरफेस (इंटरफ़ेस/अमूर्त वर्ग) नहीं है, तो मैं अपनी निर्भरताओं को कैसे इंजेक्ट करूँगा और उन्हें नकल करूंगा?
इसके अलावा, मैंने लोगों को इंटरफेस का उपयोग न करने के बारे में बात की है जिसमें केवल एक कार्यान्वयन है। इस ब्लॉग की तरह यहां - http://simpleprogrammer.com/2010/11/02/back-to-basics-what-is-an-interface/
अब यह सब सिद्धांत नहीं है - यह एक इंटरफ़ेस पर प्रोग्राम - कार्यान्वयन नहीं करता है?
* जब हम कहते हैं "इंटरफेस" एक अंतरफलक के लिए प्रोग्रामिंग के संदर्भ में। उस प्रकार का इंटरफ़ेस बाहरी वर्ग के तरीकों और वर्ग के गुणों का अर्थ है। यह एक भाषा स्तर इंटरफ़ेस नहीं होना चाहिए। * तो, मुझे यह सब कुछ गलत हो गया है? तो, एक ठोस वर्ग आपके अनुसार एक इंटरफ़ेस हो सकता है? – Sandbox
सही। अधिक विशेष रूप से विधियों और गुणों के सार्वजनिक हस्ताक्षर उस वर्ग के इंटरफ़ेस को बनाते हैं। जब भी आप एक वर्ग बनाते हैं जिसे आप बेनकाब करना चुनते हैं, वह कक्षाएं बाहरी इंटरफ़ेस का हिस्सा बन जाती हैं। इसे बदलना, उन पर भरोसा करता है जो उस पर भरोसा करते हैं। यदि कोई अन्य वर्ग आपके इंटरफ़ेस से अधिक पर निर्भर है, (वे कक्षा के अंदर विशिष्ट कार्यान्वयन विवरणों पर भरोसा कर रहे हैं, उदाहरण के लिए एक सूची कैसे क्रमबद्ध की जाती है या डेटा संग्रहीत किया जाता है), फिर भी छोटी आंतरिक चीजें बदलना उन्हें तोड़ देगा। –
लेकिन जब कोड एक ठोस प्रकार को संदर्भित करता है, तो इसका मतलब यह नहीं है कि अगर हमारे पास समान प्रकार के कल का एक और वर्ग है, तो हमें कोड बदलना होगा।इसके बजाय, इंटरफेस/अमूर्त कक्षाओं के साथ आप रनटाइम पर एक अलग कार्यान्वयन को स्वैप कर सकते हैं। – Sandbox