हम इंटरफ़ेस का उपयोग क्यों करते हैं?
क्या यह केवल मानकीकरण के लिए है?
हम इंटरफ़ेस का उपयोग क्यों करते हैं?
क्या यह केवल मानकीकरण के लिए है?
जवाबों:
सादृश्य 1 : अमेरिकी अंतरिक्ष यान, रूसी सोयुज अंतरिक्ष यान और चीनी शेनझो 5 की तरह बहुत कुछ अंतर्राष्ट्रीय अंतरिक्ष स्टेशन को डॉक कर सकता है, क्योंकि वे एक ही डॉकिंग इंटरफ़ेस को लागू करते हैं। (यह सिर्फ एक उदाहरण है - मुझे नहीं पता कि यह वास्तविक जीवन में सच है लेकिन चलो एक उदाहरण के लिए हमारे अविश्वास को निलंबित कर दें)
सादृश्य 2 : जैसे आप अपने होम कंप्यूटर में विभिन्न कंप्यूटर मॉनिटर प्लग कर सकते हैं। आप इसमें एक दीवार के आकार का टीवी प्लग कर सकते हैं, एक पुराना CRT (मोटी तरह का), एक 20 "फ्लैट स्क्रीन, या एक ब्रेल मशीन जो अंधे को" टच "करके देख सकता है। इन विभिन्न / विभिन्न उपकरणों और आपके बीच संगतता है। कंप्यूटर क्योंकि वे सभी इंटरफ़ेस मानकों पर सहमत हैं।
C # इंटरफेस का विवरण - C # / OOP इंटरफेस के साथ आप एक ही तरह का काम कर रहे हैं लेकिन अनदेखी / आभासी दुनिया में।
आप के बारे में सही कर रहे हैं मानकीकरण , लेकिन यह भी लचीलापन , scalability , तानाना , रख-रखाव , पुनर्प्रयोग , testability और बिजली ।
(जितना अधिक आप सॉफ्टवेयर का उपयोग करते हैं उतना अधिक इन "बज़ शब्द" को समझा जाएगा। और हमेशा वास्तविक दुनिया में इंटरफेस पर विचार करें क्योंकि उन्होंने हमें समान रूप से अच्छा किया है।)
standardization, but also flexibility, scalability, extensibility, maintainability, reusability, testability and power.
एक इंटरफ़ेस का उपयोग यह वर्णन करने के लिए किया जाता है कि एक कार्यान्वित चीज़ क्या कर सकती है। तो आपके पास कई वस्तुओं का इलाज करने की संभावना है जो इस इंटरफ़ेस के एक प्रकार के समान इंटरफ़ेस को लागू कर रहे हैं।
उदाहरण के लिए:
public interface IMyInterface{
public void DoFirst();
public int DoSecond();
}
public class A : IMyInterface{
//class has to implement DoFirst and DoSecond
public void DoFirst(){
Console.WriteLine("Blubb1");
}
public int DoSecond(){
Console.WriteLine("Blubb2");
return 2;
}
}
public class B : IMyInterface{
//class has to implement DoFirst and DoSecond
public void DoFirst(){
Console.WriteLine("Blibb1");
}
public int DoSecond(){
Console.WriteLine("Blibb2");
return 4;
}
}
कक्षाएं इंटरफ़ेस को कई तरीकों से लागू करती हैं। लेकिन आप उन्हें IMyInterface के रूप में उपयोग कर सकते हैं। उदाहरण के लिए:
public static void DoMethodsInInterface(IMyInterface inter){
inter.DoFirst();
inter.DoSecond();
}
public static void main(){
DoMethodsInInterface(new A());
DoMethodsInInterface(new B());
//Or use it in a List
List<IMyInterface> interlist = new List<IMyInterface>();
interlist.Add(new A());
interlist.Add(new B());
foreach(IMyInterface inter in interlist){
inter.DoFirst();
}
}
मुझे उम्मीद है कि यह थोड़ा स्पष्ट है कि इंटरफेस क्यों उपयोगी हैं।
Woozle
, तो कोई भी कोड जो किसी भी वर्ग के संदर्भ को स्वीकार करना चाहता है और Woozle
उसे यह जानना होगा कि वह किस वर्ग के साथ काम कर रहा है, और केवल उन Woozle
कक्षाओं के लिए सक्षम होगा जिनके बारे में वह जानता था। इसके विपरीत, यदि दोनों वर्ग लागू होते हैं IWoozler
, तो कोड जो किसी IWoozler
को भी दिया जाता है, Woozle
वह उसके सटीक प्रकार को जाने बिना कर सकता है।
यह इंटरफेसिंग के लिए है :), ताकि आप सामान के बीच इंटरफेस कर सकें, जब आपके पास यह उपयोगी हो
यहां देखें उच्च स्तरीय दृश्य ...
सूचना छिपाने की अवधारणा में इंटरफेस एक बड़ी भूमिका निभाते हैं ।
वे मूल रूप से आपकी कक्षा के कार्यान्वयन विवरण को छिपाने में आपकी सहायता करते हैं ताकि एक कॉलिंग क्लास को उस कार्यान्वयन पर कोई निर्भरता न हो। इसलिए, इंटरफेस का उपयोग करके आप कॉलिंग क्लास को बदले बिना कार्यान्वयन को संशोधित कर सकते हैं। यह सब आपके कोड की जटिलता को सीमित करता है और लंबे समय में बनाए रखना आसान बनाता है ।
जब मैंने पहली बार इंटरफेस को समझना शुरू किया, तो उन्हें "अनुबंध के रूप में समझाया गया जो आपके वर्ग का विवरण प्रदान करता है।" यकीन नहीं है कि अगर यह आपकी मदद करेगा लेकिन अगर आप एक कार के लिए एक इंटरफ़ेस के बारे में सोचते हैं तो आप कह सकते हैं कि यह ड्राइव , ब्रेक , और मुड़ता है । इसलिए जब तक यह मुझे बिंदु A से बिंदु B तक ले जाता है, मुझे वास्तव में यह जानने की जरूरत नहीं है कि उन कार्यों को कैसे कार्यान्वित किया जाता है।
C # / Java जैसी भाषाओं में इंटरफेस का उपयोग मुख्य कारण है क्योंकि वे भाषाएँ एकाधिक (वर्ग) वंशानुक्रम का समर्थन नहीं करती हैं (देखें कि बहु विरासत के साथ सटीक समस्या क्या है? )।
लेकिन कई (इंटरफ़ेस) कार्यान्वयन को अलग-अलग तरीकों से उपयोग करने की अनुमति दी जाती है।
इंटरफेस कुछ अजीब हैं। वे विश्वास से अनुबंध द्वारा डिजाइन का समर्थन करते हैं, वही नाम और कार्यान्वित इंटरफ़ेस का अर्थ समान व्यवहार है। यह केवल एपीआई प्रलेखन के लिए काम करता है, इसे मानव-जांच करना होगा। यह इंटरफेस को बहुत कमजोर बना देता है। एक रास्ता है कि चारों ओर पाने के लिए औपचारिक चश्मा हो सकता है। दूसरी ओर, इंटरफेस बहुत मजबूत हैं, बहुत सख्त हैं। आप उन इंटरफेस को विकसित नहीं कर सकते हैं जो अक्सर पुन: उपयोग के तरीके से मिलते हैं। यह डायनेमिक भाषाओं में प्रोटोकॉल - तंत्र द्वारा हल किया जाता है, जो संदेश (कॉल विधि) भेजते हैं और जब वह संदेश रिसीवर द्वारा समर्थित नहीं होता है, तो मानक कॉलबैक कहा जाता है। बाधाओं के साथ ठोस प्रोटोकॉल होने से बेहतर होगा।
सोचो दूरस्थ बनाने ...
यहां एक क्लाइंट और एक सर्वर शामिल है। आइए कहते हैं कि वे इंटरनेट द्वारा शारीरिक रूप से अलग हो गए हैं। क्लाइंट एक ऐसी विधि कह रहा है जिसका वास्तविक निष्पादन सर्वर पर होता है। क्लाइंट के दृष्टिकोण से क्लाइंट को सर्वर में ऑब्जेक्ट के बारे में कुछ भी नहीं पता है जो निष्पादन करता है। हालांकि यह पता है कि किस विधि से कॉल करना है। क्योंकि क्लाइंट प्रोग्राम बनाते समय, हम केवल एक इंटरफ़ेस (या अनुबंध) के संपर्क में होते हैं। हम पूरी वस्तु के संपर्क में नहीं हैं जो वास्तव में सर्वर पर रह रही है। .Net रीमोटिंग में कुछ डेमो ऐप्स करने की कोशिश करें, और आप बाकी का पता लगा लेंगे। खुश प्रोग्रामिंग।
हम इंटरफेस का उपयोग क्यों करते हैं?
कुछ भाषाएं vtables का उपयोग करके पॉलीमोर्फिक विधि कॉल को लागू करती हैं और अधिकांश प्रकार की सूचनाओं को छोड़ देती हैं, जिससे यह कठिन नहीं होता है इंटरफेस को परिभाषित करना जाता है।
इसलिए कभी-कभी हम केवल इंटरफेस का उपयोग करते हैं क्योंकि भाषा के डिजाइन की आवश्यकता होती है।
इंटरफ़ेस प्रोटोटाइप मोडल प्रदान करता है जिसमें सिर्फ एक विशिष्ट व्यवहार की कार्यक्षमता की घोषणा शामिल है।
और यदि आप इस व्यवहार को कक्षा में लागू करना चाहते हैं तो यू को इस इंटरफ़ेस को कक्षा में लागू करना होगा तब कक्षा में यह व्यवहार कार्यक्षमता होती है या इसमें कई व्यवहार हो सकते हैं।
क्योंकि वर्ग कई इंटरफ़ेस को लागू कर सकता है।
अगर कोई और मेरे जैसा है और उदाहरण और समझ से सीखता है, तो केवल स्पष्टीकरण के बजाय, यहाँ कुछ कोड है ...।
मुझे C # में एक न्यूरल नेटवर्क का यह कार्यान्वयन मिला, जिसमें प्रोजेक्ट डाउनलोड भी शामिल है, जो एक सुंदर और उपयोगी तरीके से इंटरफेस का उपयोग करता है: