2013-06-03 13 views
21

समानताएं & गुण, मिश्रण और इंटरफेस के बीच अंतर क्या हैं। मैं इन अवधारणाओं की गहरी समझ प्राप्त करने की कोशिश कर रहा हूं लेकिन मुझे पर्याप्त प्रोग्रामिंग भाषाएं नहीं हैं जो इन विशेषताओं को समानता और मतभेदों को वास्तव में समझने के लिए लागू करती हैं।लक्षण बनाम इंटरफेस बनाम Mixins?

लक्षण, mixins और इंटरफेस

  • से प्रत्येक के लिए समस्या क्या हल किया जा रहा है?
  • क्या प्रोग्रामिंग भाषाओं में अवधारणा की परिभाषा है?
  • इसके और अन्य के बीच समानताएं क्या हैं?
  • इसके और दूसरों के बीच क्या अंतर है?
+1

स्कैला के पास केवल गुण हैं (मिश्रण और इंटरफेस लक्षणों से घिरे होंगे)।आपकी प्रोफ़ाइल को देखते हुए ऐसा लगता है कि आपके पास जावा पृष्ठभूमि है। आपको स्कैला का प्रयास करना चाहिए, आपको पता चलेगा कि जब आप मिश्रण करना चाहते हैं तो कुछ लक्षण बहुत सुविधाजनक हैं जो आपके वर्तमान वर्ग में ऑर्थोगोनल हैं। जब आप लक्षणों को ढेर करना चाहते हैं तो सही करना मुश्किल है। अधिक जानकारी के लिए http://www.artima.com/pins1ed/traits.html देखें। – huynhjl

+0

@ams: इस पर एक नज़र डालें [उत्तर] (http://stackoverflow.com/a/23124968/33311)। यह उपयोगी हो सकता है भले ही इसे "groovy" टैग किया गया हो। – Lernkurve

उत्तर

10

reference type जावा में, Object को छोड़कर, एक एकल सुपरक्लास से निकला है।

वैसे, जावा कक्षा शून्य या अधिक इंटरफेस लागू कर सकती है।

आम तौर पर, एक इंटरफेस एक अनुबंध है जो कार्यान्वयन वर्ग को लागू करने के तरीकों का वर्णन करता है, हालांकि सीधे कार्यान्वयन प्रदान किए बिना।

दूसरे शब्दों में, जावा क्लास को इसके अनुबंध का पालन करने के लिए बाध्य किया जाता है और इस प्रकार इंटरफेस द्वारा प्रदान किए गए विधि हस्ताक्षरों को कार्यान्वित करने के लिए बाध्य किया जाता है।

एक इंटरफ़ेस एक प्रकार का गठन करता है। तो आप पैरामीटर पास कर सकते हैं और इंटरफ़ेस प्रकारों के रूप में घोषित विधियों से मूल्यों को वापस कर सकते हैं, इस तरह की आवश्यकता होती है कि पैरामीटर और रिटर्न प्रकार आवश्यक तरीकों को लागू किए बिना उनके लिए ठोस कार्यान्वयन प्रदान किए बिना आवश्यक तरीके से लागू करें।

यह कई अमूर्त पैटर्न के लिए आधार सेट करता है, उदाहरण के लिए, dependency injection

स्कैला, अपने आप में, लक्षण हैं। लक्षण आपको जावा इंटरफेस की सभी सुविधाएं देते हैं, जिसमें महत्वपूर्ण अंतर होता है जिसमें वे विधि कार्यान्वयन और चर शामिल हो सकते हैं। लक्षण एक बार लागू करने के तरीकों को लागू करने का एक स्मार्ट तरीका है - और इसके माध्यम से - उन तरीकों को उन सभी वर्गों में वितरित करें जो विशेषता का विस्तार करते हैं। जावा कक्षाओं के लिए इंटरफेस की तरह, आप एक से अधिक विशेषता को स्कैला वर्ग में मिला सकते हैं।

जब से मैं कोई रूबी पृष्ठभूमि है, हालांकि, मैं तुम्हें डेविड पोलाक की 'शुरुआत स्काला "(amazon link) से एक अंश को इंगित करेंगे:

रूबी mixins, जो तरीकों कि हो सकता है के संग्रह हैं किसी भी वर्ग में मिश्रित। चूंकि रूबी में स्थिर टाइपिंग नहीं है और विधि पैरामीटर के प्रकारों को घोषित करने का कोई तरीका नहीं है, इसलिए इंटरफेस जैसे अनुबंध को परिभाषित करने के लिए मिश्रणों का उपयोग करने का कोई उचित तरीका नहीं है। रूबी मिश्रक कक्षाओं में कोड लिखने के लिए एक तंत्र प्रदान करते हैं लेकिन पैरामीटर प्रकारों को परिभाषित करने या लागू करने के लिए एक तंत्र नहीं है।

इंटरफेस इस पोस्ट में वर्णित से भी अधिक कर सकते हैं; चूंकि विषय विशाल हो सकता है, मैं आपको तीन दिशाओं में से प्रत्येक में अधिक जांच करने का सुझाव देता हूं, जबकि यदि आपके पास जावा पृष्ठभूमि भी है, तो स्कैला और इसलिए लक्षण सीखने के लिए सस्ती हैं।

+0

आपको यह स्पष्ट करना चाहिए कि ऑब्जेक्ट से प्रत्येक * रेफरेंस * प्रकार प्राप्त होता है। प्राइमेटिव नहीं करते हैं। मैं वाक्य को हटा दूंगा "जैसा कि यह इंटरनेट के आसपास व्यापक रूप से कहा जाता है ..." या प्रसिद्ध लेखों के कुछ लिंक प्रदान करते हैं। – coltfred

+1

@coltfred: संपादित करें। –

+0

मैं पोलक से असहमत हूं, सबसे पहले "इंटरफेस जैसे अनुबंध को परिभाषित करने के लिए मिक्स्स का उपयोग करने का कोई उचित तरीका नहीं है" - [अनुबंध * मुख्य रूप से * लगभग * विधियों *] (https://www.eiffel.com/values/design -ब-अनुबंध/परिचय /), तो यह करता है। दूसरा "पैरामीटर प्रकारों को परिभाषित करने या लागू करने के लिए एक तंत्र नहीं" - रूबी इसके लिए बतख टाइपिंग और विधि नामकरण का उपयोग करता है। [अधिक के लिए यह उत्तर] देखें (http://stackoverflow.com/a/177127/335847) – iain

संबंधित मुद्दे