डबल-चांस फ़ंक्शन: Difference between revisions

From Vigyanwiki
(Created page with "सॉफ्टवेयर इंजीनियरिंग में, डबल-चांस फ़ंक्शन एक सॉफ़्टवेयर सॉफ्...")
 
m (Abhishekkshukla moved page डबल-मौका फ़ंक्शन to डबल-चांस फ़ंक्शन without leaving a redirect)
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[सॉफ्टवेयर इंजीनियरिंग]] में, डबल-चांस फ़ंक्शन एक सॉफ़्टवेयर [[सॉफ्टवेयर पैटर्न]] है जिसमें [[क्रॉस-प्लेटफॉर्म]] और स्केलेबल विकास में एक मजबूत अनुप्रयोग होता है।
[[सॉफ्टवेयर इंजीनियरिंग]] में, '''डबल-चांस फ़ंक्शन''' एक सॉफ़्टवेयर [[सॉफ्टवेयर पैटर्न]] है जिसमें [[क्रॉस-प्लेटफॉर्म]] और स्केलेबल विकास में एक प्रबल अनुप्रयोग होता है।


==उदाहरण==
==उदाहरण==
Line 5: Line 5:
===कंप्यूटर ग्राफ़िक्स===
===कंप्यूटर ग्राफ़िक्स===


फ़ंक्शंस के साथ एक ग्राफ़िक्स [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] पर विचार करें <code>DrawPoint</code>, <code>DrawLine</code>, और <code>DrawSquare</code>. यह देखना आसान है <code>DrawLine</code> के संदर्भ में ही लागू किया जा सकता है <code>DrawPoint</code>, और <code>DrawSquare</code> बदले में चार कॉलों के माध्यम से कार्यान्वित किया जा सकता है <code>DrawLine</code>. यदि आप इस एपीआई को एक नए आर्किटेक्चर में पोर्ट कर रहे थे तो आपके पास एक विकल्प होगा: तीन अलग-अलग कार्यों को मूल रूप से लागू करें (कार्यान्वयन में अधिक समय लगेगा, लेकिन संभवतः तेज़ कोड के परिणामस्वरूप), या लिखें <code>DrawPoint</code> मूल रूप से, और सामान्य, क्रॉस-प्लेटफ़ॉर्म, कोड का उपयोग करके ऊपर वर्णित अनुसार दूसरों को लागू करें। इस दृष्टिकोण का एक महत्वपूर्ण उदाहरण [[X11]] ग्राफिक्स सिस्टम है, जिसे बहुत कम संख्या में डिवाइस-निर्भर प्राइमेटिव प्रदान करके नए ग्राफिक्स हार्डवेयर में पोर्ट किया जा सकता है, जिससे उच्च स्तर के कार्यों को हार्डवेयर-स्वतंत्र परत पर छोड़ दिया जा सकता है।<ref>Susan Angebranndt, Raymond Drewry, Philip Karlton, Todd Newman, "Definition of the Porting Layer for the X v11 Sample Server", MIT, 1988.</ref><ref>Susan Angebranndt, Raymond Drewry, Philip Karlton, Todd Newman, "Strategies for Porting the X v11 Sample Server", Mit 1988.</ref>
<code>DrawPoint</code>, <code>DrawLine</code>और <code>DrawSquare</code>के कार्यों के साथ एक ग्राफिक्स एपीआई पर विचार करें। यह देखना आसान है कि <code>DrawLine</code> को केवल <code>DrawPoint</code>के संदर्भ में प्रयुक्त किया जा सकता है, और <code>DrawSquare</code> को बदले में <code>DrawSquare</code> पर चार कॉल के माध्यम से प्रयुक्त किया जा सकता है। यदि आप इस एपीआई को एक नए आर्किटेक्चर में पोर्ट कर रहे थे तो आपके पास एक विकल्प होगा: तीन अलग-अलग कार्यों को मूल रूप से प्रयुक्त करें (कार्यान्वयन में अधिक समय लगता है, किन्तु संभवतः तेज़ कोड के परिणामस्वरूप), या <code>DrawPoint</code> को मूल रूप से लिखें, और सामान्य का उपयोग करके ऊपर वर्णित अन्य को प्रयुक्त करें , क्रॉस-प्लेटफ़ॉर्म, कोड। इस दृष्टिकोण का एक महत्वपूर्ण उदाहरण [[X11]] ग्राफिक्स सिस्टम है, जिसे बहुत कम संख्या में डिवाइस-निर्भर प्राइमेटिव प्रदान करके नए ग्राफिक्स हार्डवेयर में पोर्ट किया जा सकता है, जिससे उच्च स्तर के कार्यों को हार्डवेयर-स्वतंत्र परत पर छोड़ दिया जा सकता है। <ref>Susan Angebranndt, Raymond Drewry, Philip Karlton, Todd Newman, "Definition of the Porting Layer for the X v11 Sample Server", MIT, 1988.</ref><ref>Susan Angebranndt, Raymond Drewry, Philip Karlton, Todd Newman, "Strategies for Porting the X v11 Sample Server", Mit 1988.</ref>
डबल-मौका फ़ंक्शन इस तरह के कार्यान्वयन को बनाने का एक इष्टतम तरीका है, जिससे पोर्ट का पहला ड्राफ्ट बाजार में तेजी से चलने वाले संस्करण का उपयोग कर सकता है, एक सामान्य संस्करण के साथ चलने में धीमा हो सकता है। <code>DrawPoint</code> फ़ंक्शन, जबकि बाद के संस्करणों को बाज़ार में धीमे, चलने में तेज़ के रूप में संशोधित किया जा सकता है। जहां डबल-चांस पैटर्न स्कोर उच्च है, वह यह है कि बेस एपीआई में नल ड्राइवर के हिस्से के रूप में यहां दिया गया स्व-सहायक कार्यान्वयन शामिल है, और अन्य सभी कार्यान्वयन इसके विस्तार हैं। नतीजतन, पहला पोर्ट, वास्तव में, पहला प्रयोग करने योग्य कार्यान्वयन है।
 
डबल-चांस फ़ंक्शन इस तरह के कार्यान्वयन को बनाने का एक इष्टतम विधि है, जिससे पोर्ट का पहला ड्राफ्ट एक सामान्य <code>DrawPoint</code> फ़ंक्शन के साथ "बाजार में तेज़, चलने में धीमा" संस्करण का उपयोग कर सकता है, जबकि बाद के संस्करणों को "धीमे" के रूप में संशोधित किया जा सकता है बाजार के लिए, तेजी से दौड़ने के लिए" जहां डबल-चांस पैटर्न स्कोर उच्च है, वह यह है कि बेस एपीआई में नल ड्राइवर के भाग के रूप में यहां दिया गया स्व-सहायक कार्यान्वयन सम्मिलित है, और अन्य सभी कार्यान्वयन इसके विस्तार हैं। परिणाम स्वरुप पहला पोर्ट, वास्तव में, पहला प्रयोग करने योग्य कार्यान्वयन है।


[[C++]] में एक विशिष्ट कार्यान्वयन हो सकता है:
[[C++]] में एक विशिष्ट कार्यान्वयन हो सकता है:
Line 27: Line 28:
  };
  };
</syntaxhighlight>
</syntaxhighlight>
ध्यान दें कि <code>CBaseGfxAPI::DrawPoint</code> फ़ंक्शन का कभी भी उपयोग नहीं किया जाता है, क्योंकि कोई भी ग्राफ़िक्स कॉल उसके व्युत्पन्न वर्गों में से एक से होकर गुजरता है। तो एक कॉल <code>CNewGfxAPI::DrawSquare</code> द्वारा एक वर्ग प्रस्तुत करने का यह पहला मौका होगा <code>CNewGfxAPI</code> कक्षा। यदि कोई मूल कार्यान्वयन मौजूद नहीं है, तो बेस क्लास को कॉल किया जाता है, जिस बिंदु पर [[आभासी कार्य]] कार्यभार संभालता है और इसका मतलब है <code>CNewGfxAPI::DrawLine</code> कहा जाता है। यह देता है <code>CNewGfxAPI</code> यदि कोई उपलब्ध हो तो मूल कोड का उपयोग करने के लिए "दूसरा मौका" दें।


इस पद्धति के साथ, सैद्धांतिक रूप से, ड्रॉप्वाइंट के रूप में केवल एक मूल फ़ंक्शन का उपयोग करके एक संपूर्ण 3 डी इंजन ([[सॉफ़्टवेयर]] रैस्टराइज़िंग लागू करना) बनाना संभव है, अन्य कार्यों को समय मिलने पर लागू किया जाता है। व्यवहार में यह निराशाजनक रूप से धीमा होगा, लेकिन यह दोहरे-मौका कार्यों की संभावनाओं को प्रदर्शित करता है।


== संदर्भ ==
ध्यान दें कि <code>CBaseGfxAPI::DrawPoint</code> फ़ंक्शन का उपयोग कभी नहीं किया जाता है, क्योंकि कोई भी ग्राफ़िक्स कॉल इसके व्युत्पन्न वर्गों में से एक के माध्यम से जाता है। तो <code>CNewGfxAPI::DrawSquare</code>पर कॉल करने पर <code>CNewGfxAPI</code> वर्ग द्वारा एक वर्ग प्रस्तुत करने का पहला चांस होगा। यदि कोई मूल कार्यान्वयन उपस्थित नहीं है, तो बेस क्लास को कॉल किया जाता है, जिस बिंदु पर वर्चुअलाइजेशन होता है और इसका अर्थ है कि <code>CNewGfxAPI::DrawLine</code> को कॉल किया जाता है। यह <code>CNewGfxAPI</code> क्लास को मूल कोड, यदि कोई उपलब्ध हो, का उपयोग करने का "दूसरा चांस" देता है।
 
इस पद्धति के साथ, सैद्धांतिक रूप से, ड्रॉप्वाइंट के रूप में केवल एक मूल फ़ंक्शन का उपयोग करके एक संपूर्ण 3 डी इंजन ([[सॉफ़्टवेयर]] रैस्टराइज़िंग प्रयुक्त करना) बनाना संभव है, अन्य कार्यों को समय मिलने पर प्रयुक्त किया जाता है। व्यवहार में यह निराशाजनक रूप से धीमा हो जायगा, किन्तु यह दोहरे-चांस कार्यों की संभावनाओं को प्रदर्शित करता है।
== संदर्भ                                                                                                                                                 ==
{{reflist}}
{{reflist}}
* {{cite book | author=Goodwin, Steven | title=Cross-Platform Game Programming | publisher=Charles River Media| year=2005 | isbn=1-58450-379-3}}
* {{cite book | author=Goodwin, Steven | title=Cross-Platform Game Programming | publisher=Charles River Media| year=2005 | isbn=1-58450-379-3}}
[[Category: सॉफ़्टवेयर डिज़ाइन पैटर्न]] [[Category: उदाहरण C++ कोड वाले लेख]]


[[Category: Machine Translated Page]]
[[Category:Created On 26/06/2023]]
[[Category:Created On 26/06/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:उदाहरण C++ कोड वाले लेख]]
[[Category:सॉफ़्टवेयर डिज़ाइन पैटर्न]]

Latest revision as of 16:46, 18 September 2023

सॉफ्टवेयर इंजीनियरिंग में, डबल-चांस फ़ंक्शन एक सॉफ़्टवेयर सॉफ्टवेयर पैटर्न है जिसमें क्रॉस-प्लेटफॉर्म और स्केलेबल विकास में एक प्रबल अनुप्रयोग होता है।

उदाहरण

कंप्यूटर ग्राफ़िक्स

DrawPoint, DrawLineऔर DrawSquareके कार्यों के साथ एक ग्राफिक्स एपीआई पर विचार करें। यह देखना आसान है कि DrawLine को केवल DrawPointके संदर्भ में प्रयुक्त किया जा सकता है, और DrawSquare को बदले में DrawSquare पर चार कॉल के माध्यम से प्रयुक्त किया जा सकता है। यदि आप इस एपीआई को एक नए आर्किटेक्चर में पोर्ट कर रहे थे तो आपके पास एक विकल्प होगा: तीन अलग-अलग कार्यों को मूल रूप से प्रयुक्त करें (कार्यान्वयन में अधिक समय लगता है, किन्तु संभवतः तेज़ कोड के परिणामस्वरूप), या DrawPoint को मूल रूप से लिखें, और सामान्य का उपयोग करके ऊपर वर्णित अन्य को प्रयुक्त करें , क्रॉस-प्लेटफ़ॉर्म, कोड। इस दृष्टिकोण का एक महत्वपूर्ण उदाहरण X11 ग्राफिक्स सिस्टम है, जिसे बहुत कम संख्या में डिवाइस-निर्भर प्राइमेटिव प्रदान करके नए ग्राफिक्स हार्डवेयर में पोर्ट किया जा सकता है, जिससे उच्च स्तर के कार्यों को हार्डवेयर-स्वतंत्र परत पर छोड़ दिया जा सकता है। [1][2]

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

C++ में एक विशिष्ट कार्यान्वयन हो सकता है:

 class CBaseGfxAPI {
     virtual void DrawPoint(int x, int y) = 0; /* Abstract concept for the null driver */
     virtual void DrawLine(int x1, int y1, int x2, int y2) { /* DrawPoint() repeated */}
     virtual void DrawSquare(int x1, int y1, int x2, int y2) { /* DrawLine() repeated */}
 };

 class COriginalGfxAPI : public CBaseGfxAPI {
     virtual void DrawPoint(int x, int y) { /* The only necessary native calls */ }
     virtual void DrawLine(int x1, int y1, int x2, int y2) { /* If this function exists a native DrawLine
                                                                routine will be used. Otherwise the base
                                                                implementation is run. */}
 };

 class CNewGfxAPI : public CBaseGfxAPI {
     virtual void DrawPoint(int x, int y) { /* The only necessary for native calls */ }
 };


ध्यान दें कि CBaseGfxAPI::DrawPoint फ़ंक्शन का उपयोग कभी नहीं किया जाता है, क्योंकि कोई भी ग्राफ़िक्स कॉल इसके व्युत्पन्न वर्गों में से एक के माध्यम से जाता है। तो CNewGfxAPI::DrawSquareपर कॉल करने पर CNewGfxAPI वर्ग द्वारा एक वर्ग प्रस्तुत करने का पहला चांस होगा। यदि कोई मूल कार्यान्वयन उपस्थित नहीं है, तो बेस क्लास को कॉल किया जाता है, जिस बिंदु पर वर्चुअलाइजेशन होता है और इसका अर्थ है कि CNewGfxAPI::DrawLine को कॉल किया जाता है। यह CNewGfxAPI क्लास को मूल कोड, यदि कोई उपलब्ध हो, का उपयोग करने का "दूसरा चांस" देता है।

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

संदर्भ

  1. Susan Angebranndt, Raymond Drewry, Philip Karlton, Todd Newman, "Definition of the Porting Layer for the X v11 Sample Server", MIT, 1988.
  2. Susan Angebranndt, Raymond Drewry, Philip Karlton, Todd Newman, "Strategies for Porting the X v11 Sample Server", Mit 1988.
  • Goodwin, Steven (2005). Cross-Platform Game Programming. Charles River Media. ISBN 1-58450-379-3.