मार्कर इंटरफ़ेस पैटर्न: Difference between revisions
(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"> | ||
{{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> (जिसे '''टैगिंग इंटरफ़ेस''' भी कहा जाता है) जो रिक्त इंटरफ़ेस है,<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| | [[जावा (प्रोग्रामिंग भाषा)]] से मार्कर इंटरफेस के अनुप्रयोग का एक उदाहरण है {{Javadoc:SE|java/io|सीरियलाइजेबल }} इंटरफेस है:<syntaxhighlight lang="java"> | ||
package java.io; | package java.io; | ||
Line 24: | Line 24: | ||
} | } | ||
</syntaxhighlight>एक | </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
This article needs additional citations for verification. (June 2013) (Learn how and when to remove this template message) |
मार्कर इंटरफ़ेस पैटर्न कंप्यूटर विज्ञान में डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) है, जिसका उपयोग उन भाषाओं के साथ किया जाता है जो वस्तुओं के बारे में रन-टाइम प्रकार की सुचना प्रदान करते हैं। यह मेटाडेटा को ऐसे श्रेणी से संबद्ध करने का साधन प्रदान करता है जहां भाषा में ऐसे मेटाडेटा के लिए स्पष्ट सहायता नहीं है।
इस पद्धति का उपयोग करने के लिए, श्रेणी (कंप्यूटर विज्ञान) एक मार्कर इंटरफ़ेस प्रदान करता है[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
घोषित करने के लिए कि वे अपने सुपर क्लास से सब कुछ लागू नहीं करते हैं।
यह भी देखें
- इस पैटर्न के विस्तार के लिए डिजाइन मार्कर
संदर्भ
- ↑ 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.
- ↑ "जावा में मार्कर इंटरफ़ेस". GeeksforGeeks (in English). 2017-03-06. Retrieved 2022-05-01.
अग्रिम पठन
Effective Java[1] by Joshua Bloch.
- ↑ Bloch, Joshua (2018). Effective Java (Third ed.). Boston. ISBN 978-0-13-468599-1. OCLC 1018432176.
{{cite book}}
: CS1 maint: location missing publisher (link)