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

From Vigyanwiki
(Created page with "{{Refimprove|date=June 2013}} मार्कर इंटरफ़ेस पैटर्न कंप्यूटर विज्ञान में एक डिज़...")
 
No edit summary
Line 1: Line 1:
{{Refimprove|date=June 2013}}
{{Refimprove|date=June 2013}}
मार्कर इंटरफ़ेस पैटर्न [[कंप्यूटर विज्ञान]] में एक डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) है, जिसका उपयोग उन भाषाओं के साथ किया जाता है जो वस्तुओं के बारे में रन-टाइम प्रकार की जानकारी प्रदान करते हैं। यह मेटाडेटा को एक ऐसे वर्ग से संबद्ध करने का साधन प्रदान करता है जहां भाषा में ऐसे मेटाडेटा के लिए स्पष्ट समर्थन नहीं है।
'''मार्कर इंटरफ़ेस पैटर्न''' [[कंप्यूटर विज्ञान]] में डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) है, जिसका उपयोग उन भाषाओं के साथ किया जाता है जो वस्तुओं के बारे में रन-टाइम प्रकार की सुचना प्रदान करते हैं। यह मेटाडेटा को ऐसे श्रेणी से संबद्ध करने का साधन प्रदान करता है जहां भाषा में ऐसे मेटाडेटा के लिए स्पष्ट सहायता नहीं है।


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


== उदाहरण ==
== उदाहरण ==
[[जावा (प्रोग्रामिंग भाषा)]] से मार्कर इंटरफेस के अनुप्रयोग का एक उदाहरण है {{Javadoc:SE|java/io|Serializable}} इंटरफेस:<syntaxhighlight lang="java">
[[जावा (प्रोग्रामिंग भाषा)]] से मार्कर इंटरफेस के अनुप्रयोग का एक उदाहरण है {{Javadoc:SE|java/io|सीरियलाइजेबल }} इंटरफेस है:<syntaxhighlight lang="java">
package java.io;
package java.io;


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>को प्रदान करती हैं।


== समालोचना ==
== समालोचना ==

Revision as of 21:58, 1 June 2023

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

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

उदाहरण

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

package java.io;

public interface Serializable {
}

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

समालोचना

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

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

  • .NET फ्रेमवर्क और जावा (सॉफ्टवेयर प्लेटफॉर्म) दोनों (जावा 5 (1.5) के अनुसार) ऐसे मेटाडेटा के लिए समर्थन प्रदान करते हैं। .NET में, उन्हें कस्टम विशेषताएँ कहा जाता है, जावा में उन्हें जावा एनोटेशन कहा जाता है। अलग-अलग नामों के बावजूद, वे वैचारिक रूप से एक ही चीज़ हैं। उन्हें कक्षाओं, सदस्य चर, विधियों और विधि मापदंडों पर परिभाषित किया जा सकता है और प्रतिबिंब (कंप्यूटर विज्ञान) का उपयोग करके इसका उपयोग किया जा सकता है।
  • पायथन (प्रोग्रामिंग लैंग्वेज) में, ज़ोप और प्लोन (सॉफ्टवेयर) में मार्कर इंटरफ़ेस शब्द आम है। इंटरफेस को मेटाडेटा के रूप में घोषित किया जाता है और उपवर्ग उपयोग कर सकते हैं 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)