मार्कर इंटरफ़ेस पैटर्न: Difference between revisions

From Vigyanwiki
No edit summary
Line 2: Line 2:
'''मार्कर इंटरफ़ेस पैटर्न''' [[कंप्यूटर विज्ञान]] में डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) है, जिसका उपयोग उन भाषाओं के साथ किया जाता है जो वस्तुओं के बारे में रन-टाइम प्रकार की सुचना प्रदान करते हैं। यह मेटाडेटा को ऐसे श्रेणी से संबद्ध करने का साधन प्रदान करता है जहां भाषा में ऐसे मेटाडेटा के लिए स्पष्ट सहायता नहीं है।
'''मार्कर इंटरफ़ेस पैटर्न''' [[कंप्यूटर विज्ञान]] में डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) है, जिसका उपयोग उन भाषाओं के साथ किया जाता है जो वस्तुओं के बारे में रन-टाइम प्रकार की सुचना प्रदान करते हैं। यह मेटाडेटा को ऐसे श्रेणी से संबद्ध करने का साधन प्रदान करता है जहां भाषा में ऐसे मेटाडेटा के लिए स्पष्ट सहायता नहीं है।


इस पद्धति का उपयोग करने के लिए, श्रेणी (कंप्यूटर विज्ञान) एक मार्कर इंटरफ़ेस प्रदान करता है<ref name="EffectiveJava">
इस पद्धति का उपयोग करने के लिए, श्रेणी (कंप्यूटर विज्ञान) एक '''मार्कर इंटरफ़ेस''' प्रदान करता है<ref name="EffectiveJava">
{{cite book
{{cite book
  | last = Bloch
  | last = Bloch
Line 15: Line 15:
  | chapter-url = https://archive.org/details/effectivejava00bloc_0/page/179
  | chapter-url = https://archive.org/details/effectivejava00bloc_0/page/179
  | edition = Second
  | edition = Second
  }}</ref> (जिसे '''टैगिंग इंटरफ़ेस''' भी कहा जाता है) जो रिक्त इंटरफ़ेस है,<ref>{{Cite web |date=2017-03-06 |title=जावा में मार्कर इंटरफ़ेस|url=https://www.geeksforgeeks.org/marker-interface-java/ |access-date=2022-05-01 |website=GeeksforGeeks |language=en-us}}</ref> और वे विधिया जो इंटरफ़ेस के अस्तित्व के लिए उस श्रेणी परीक्षण के उदाहरणों के साथ सहभागिता करते हैं। जबकि विशिष्ट [[इंटरफ़ेस (कंप्यूटर विज्ञान)]] कार्यक्षमता निर्दिष्ट करता है (विधि घोषणाओं के रूप में) जिसे कार्यान्वयन श्रेणी को सहायता प्रदान करना होता हैं, मार्कर इंटरफ़ेस को ऐसा करने की आवश्यकता नहीं होती है। इस प्रकार के इंटरफ़ेस की मात्र उपस्थिति कार्यान्वयन श्रेणी के विशिष्ट आचरण को इंगित करती है। हाइब्रिड इंटरफेस, जो दोनों मार्कर के रूप में कार्य करते हैं और आवश्यक विधियों को निर्दिष्ट करते हैं, संभव हैं लेकिन अनुचित प्रकार से उपयोग किए जाने पर भ्रामक सिद्ध हो सकते हैं।
  }}</ref> (जिसे '''टैगिंग इंटरफ़ेस''' भी कहा जाता है) जो रिक्त इंटरफ़ेस है,<ref>{{Cite web |date=2017-03-06 |title=जावा में मार्कर इंटरफ़ेस|url=https://www.geeksforgeeks.org/marker-interface-java/ |access-date=2022-05-01 |website=GeeksforGeeks |language=en-us}}</ref> और वे विधिया जो इंटरफ़ेस के अस्तित्व के लिए उस श्रेणी परीक्षण के उदाहरणों के साथ सहभागिता करते हैं। जबकि विशिष्ट [[इंटरफ़ेस (कंप्यूटर विज्ञान)]] कार्यक्षमता निर्दिष्ट करता है (विधि घोषणाओं के रूप में) जिसे कार्यान्वयन श्रेणी को सहायता प्रदान करना होता हैं, मार्कर इंटरफ़ेस को ऐसा करने की आवश्यकता नहीं होती है। इस प्रकार के इंटरफ़ेस की मात्र उपस्थिति कार्यान्वयन श्रेणी के विशिष्ट आचरण को इंगित करती है। हाइब्रिड इंटरफेस, जो दोनों मार्कर के रूप में कार्य करते हैं और आवश्यक विधियों को निर्दिष्ट करते हैं, संभव हैं परन्तु अनुचित प्रकार से उपयोग किए जाने पर भ्रामक सिद्ध हो सकते हैं।


== उदाहरण ==
== उदाहरण ==
Line 24: Line 24:
}
}


</syntaxhighlight>एक श्रेणी इस इंटरफ़ेस को यह इंगित करने के लिए प्रदान करता है कि इसके गैर-[[क्षणिक (कंप्यूटर प्रोग्रामिंग)]] डेटा सदस्यों {{Javadoc:SE|java/io|ObjectOutputStream}} को लिखा जा सकता है। <code>ObjectOutputStream</code> निजी विधि <code>writeObject0(Object,boolean)</code> की श्रृंखला <code>instanceof</code> लेखन योग्यता निर्धारित करने के लिए परीक्षण सम्मलित है, जिनमें से एक के लिए <code>Serializable</code> इंटरफेस पर ध्यान दिया जाता हैं। यदि इनमें से कोई भी परीक्षण विफल हो जाता है, तो विधि <code>NotSerializableException</code>को प्रदान करती हैं।  
</syntaxhighlight>एक श्रेणी इस इंटरफ़ेस को यह इंगित करने के लिए प्रदान करता है कि इसके गैर-[[क्षणिक (कंप्यूटर प्रोग्रामिंग)]] डेटा सदस्यों {{Javadoc:SE|java/io|ObjectOutputStream}} को लिखा जा सकता है। <code>'''ObjectOutputStream'''</code> निजी विधि <code>'''writeObject0(Object,boolean''')</code> की श्रृंखला <code>'''instanceof'''</code> लेखन योग्यता निर्धारित करने के लिए परीक्षण सम्मलित है, जिनमें से एक के लिए <code>'''Serializable'''</code> इंटरफेस पर ध्यान दिया जाता हैं। यदि इनमें से कोई भी परीक्षण विफल हो जाता है, तो विधि <code>'''NotSerializableException'''</code>को प्रदान करती हैं।  


== समालोचना ==
== समालोचना ==
मार्कर इंटरफेस के साथ एक बड़ी समस्या यह है कि एक इंटरफ़ेस कक्षाओं को लागू करने के लिए एक अनुबंध को परिभाषित करता है, और यह अनुबंध सभी उपवर्गों द्वारा विरासत में मिला है। इसका मतलब है कि आप मार्कर को लागू नहीं कर सकते हैं। दिए गए उदाहरण में, यदि आप एक उपवर्ग बनाते हैं जिसे आप क्रमबद्ध नहीं करना चाहते हैं (शायद इसलिए कि यह क्षणिक स्थिति पर निर्भर करता है), तो आपको स्पष्ट रूप से फेंकने का सहारा लेना चाहिए <code>NotSerializableException</code> (प्रति <code>ObjectOutputStream</code> डॉक्स)
मार्कर इंटरफेस के साथ वृहद् समस्या यह है कि इंटरफ़ेस कक्षाओं को क्रियान्वित करने के लिए अनुबंध को परिभाषित करता है, और यह अनुबंध सभी उपश्रेणियों द्वारा निहित होता हैं। इसका अर्थ है कि आप मार्कर को क्रियान्वित नहीं कर सकते हैं। दिए गए उदाहरण में, यदि आप उपश्रेणी निर्मित करते हैं जिसे आप क्रमबद्ध नहीं करना चाहते हैं (संभवतः इसलिए कि यह क्षणिक स्थिति पर निर्भर करता है), तो आपको स्पष्ट रूप से <code>'''NotSerializableException'''</code> (प्रति <code>'''ObjectOutputStream'''</code> डॉक्स) को समाप्त करने की सहायता लेनी होती हैं।


[[ मेटा डेटा ]] को सीधे समर्थन देने के लिए भाषा के लिए एक और समाधान है:
[[ मेटा डेटा | मेटा डेटा]] को सीधे सहायता देने के लिए भाषा के लिए कई और समाधान है:
* .NET फ्रेमवर्क और [[जावा (सॉफ्टवेयर प्लेटफॉर्म)]] दोनों (जावा 5 (1.5) के अनुसार) ऐसे मेटाडेटा के लिए समर्थन प्रदान करते हैं। .NET में, उन्हें कस्टम विशेषताएँ कहा जाता है, जावा में उन्हें [[जावा एनोटेशन]] कहा जाता है। अलग-अलग नामों के बावजूद, वे वैचारिक रूप से एक ही चीज़ हैं। उन्हें कक्षाओं, सदस्य चर, विधियों और विधि मापदंडों पर परिभाषित किया जा सकता है और [[प्रतिबिंब (कंप्यूटर विज्ञान)]] का उपयोग करके इसका उपयोग किया जा सकता है।
* एनइटी फ्रेमवर्क और [[जावा (सॉफ्टवेयर प्लेटफॉर्म)]] दोनों (जावा 5 (1.5) के अनुसार) ऐसे मेटाडेटा के लिए सहायता प्रदान करते हैं। एनइटी में, उन्हें कस्टम विशेषताएँ कहा जाता है, जावा में उन्हें [[जावा एनोटेशन]] कहा जाता है। अलग-अलग नामों के तथापि, वे वैचारिक रूप से समान चीज़ हैं। उन्हें श्रेणियों, सदस्य चर, विधियों और विधि मापदंडों पर परिभाषित किया जा सकता है और [[प्रतिबिंब (कंप्यूटर विज्ञान)|परावर्तन (कंप्यूटर विज्ञान)]] का उपयोग करके इसका उपयोग किया जा सकता है।
* पायथन (प्रोग्रामिंग लैंग्वेज) में, [[ज़ोप]] और [[प्लोन (सॉफ्टवेयर)]] में मार्कर इंटरफ़ेस शब्द आम है। इंटरफेस को मेटाडेटा के रूप में घोषित किया जाता है और उपवर्ग उपयोग कर सकते हैं <code>implementsOnly</code> घोषित करने के लिए कि वे अपने सुपर क्लास से सब कुछ लागू नहीं करते हैं।
* पायथन (प्रोग्रामिंग भाषा) में, [[ज़ोप]] और [[प्लोन (सॉफ्टवेयर)]] में मार्कर इंटरफ़ेस शब्द साधारण है। इंटरफेस को मेटाडेटा के रूप में वर्णित किया जाता है और उपश्रेणी <code>'''implementsOnly'''</code> वर्णित करने के लिए उपयोग कर सकते हैं क्योंकि वे अपने विशेष श्रेणी से सब कुछ प्रदान नहीं करते हैं।


== यह भी देखें ==
== यह भी देखें ==

Revision as of 22:16, 1 June 2023

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

इस पद्धति का उपयोग करने के लिए, श्रेणी (कंप्यूटर विज्ञान) एक मार्कर इंटरफ़ेस प्रदान करता है[1] (जिसे टैगिंग इंटरफ़ेस भी कहा जाता है) जो रिक्त इंटरफ़ेस है,[2] और वे विधिया जो इंटरफ़ेस के अस्तित्व के लिए उस श्रेणी परीक्षण के उदाहरणों के साथ सहभागिता करते हैं। जबकि विशिष्ट इंटरफ़ेस (कंप्यूटर विज्ञान) कार्यक्षमता निर्दिष्ट करता है (विधि घोषणाओं के रूप में) जिसे कार्यान्वयन श्रेणी को सहायता प्रदान करना होता हैं, मार्कर इंटरफ़ेस को ऐसा करने की आवश्यकता नहीं होती है। इस प्रकार के इंटरफ़ेस की मात्र उपस्थिति कार्यान्वयन श्रेणी के विशिष्ट आचरण को इंगित करती है। हाइब्रिड इंटरफेस, जो दोनों मार्कर के रूप में कार्य करते हैं और आवश्यक विधियों को निर्दिष्ट करते हैं, संभव हैं परन्तु अनुचित प्रकार से उपयोग किए जाने पर भ्रामक सिद्ध हो सकते हैं।

उदाहरण

जावा (प्रोग्रामिंग भाषा) से मार्कर इंटरफेस के अनुप्रयोग का एक उदाहरण है .html सीरियलाइजेबल इंटरफेस है:

package java.io;

public interface Serializable {
}

एक श्रेणी इस इंटरफ़ेस को यह इंगित करने के लिए प्रदान करता है कि इसके गैर-क्षणिक (कंप्यूटर प्रोग्रामिंग) डेटा सदस्यों ObjectOutputStream को लिखा जा सकता है। ObjectOutputStream निजी विधि writeObject0(Object,boolean) की श्रृंखला instanceof लेखन योग्यता निर्धारित करने के लिए परीक्षण सम्मलित है, जिनमें से एक के लिए Serializable इंटरफेस पर ध्यान दिया जाता हैं। यदि इनमें से कोई भी परीक्षण विफल हो जाता है, तो विधि NotSerializableExceptionको प्रदान करती हैं।

समालोचना

मार्कर इंटरफेस के साथ वृहद् समस्या यह है कि इंटरफ़ेस कक्षाओं को क्रियान्वित करने के लिए अनुबंध को परिभाषित करता है, और यह अनुबंध सभी उपश्रेणियों द्वारा निहित होता हैं। इसका अर्थ है कि आप मार्कर को क्रियान्वित नहीं कर सकते हैं। दिए गए उदाहरण में, यदि आप उपश्रेणी निर्मित करते हैं जिसे आप क्रमबद्ध नहीं करना चाहते हैं (संभवतः इसलिए कि यह क्षणिक स्थिति पर निर्भर करता है), तो आपको स्पष्ट रूप से NotSerializableException (प्रति ObjectOutputStream डॉक्स) को समाप्त करने की सहायता लेनी होती हैं।

मेटा डेटा को सीधे सहायता देने के लिए भाषा के लिए कई और समाधान है:

  • एनइटी फ्रेमवर्क और जावा (सॉफ्टवेयर प्लेटफॉर्म) दोनों (जावा 5 (1.5) के अनुसार) ऐसे मेटाडेटा के लिए सहायता प्रदान करते हैं। एनइटी में, उन्हें कस्टम विशेषताएँ कहा जाता है, जावा में उन्हें जावा एनोटेशन कहा जाता है। अलग-अलग नामों के तथापि, वे वैचारिक रूप से समान चीज़ हैं। उन्हें श्रेणियों, सदस्य चर, विधियों और विधि मापदंडों पर परिभाषित किया जा सकता है और परावर्तन (कंप्यूटर विज्ञान) का उपयोग करके इसका उपयोग किया जा सकता है।
  • पायथन (प्रोग्रामिंग भाषा) में, ज़ोप और प्लोन (सॉफ्टवेयर) में मार्कर इंटरफ़ेस शब्द साधारण है। इंटरफेस को मेटाडेटा के रूप में वर्णित किया जाता है और उपश्रेणी implementsOnly वर्णित करने के लिए उपयोग कर सकते हैं क्योंकि वे अपने विशेष श्रेणी से सब कुछ प्रदान नहीं करते हैं।

यह भी देखें

संदर्भ

  1. Bloch, Joshua (2008). "Item 37: Use marker interfaces to define types". Effective Java (Second ed.). Addison-Wesley. p. 179. ISBN 978-0-321-35668-0.
  2. "जावा में मार्कर इंटरफ़ेस". GeeksforGeeks (in English). 2017-03-06. Retrieved 2022-05-01.


अग्रिम पठन

Effective Java[1] by Joshua Bloch.

  1. Bloch, Joshua (2018). Effective Java (Third ed.). Boston. ISBN 978-0-13-468599-1. OCLC 1018432176.{{cite book}}: CS1 maint: location missing publisher (link)