अब्स्ट्रक्शन इनवर्शन: Difference between revisions

From Vigyanwiki
No edit summary
 
(15 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{multiple issues|
[[कंप्यूटर प्रोग्रामिंग]] में, अब्स्ट्रक्शन इनवर्शन एक विरोधी पैटर्न उत्पन्न होता है, जब किसी निर्माण में उपयोगकर्ताओं को इसके भीतर लागू किए गए फ़ंक्शन की आवश्यकता होती है, लेकिन इसके [[इंटरफ़ेस (कंप्यूटिंग)]] द्वारा प्रस्फुटित नहीं किया जाता है। परिणाम यह है कि उपयोगकर्ता इंटरफ़ेस के संदर्भ में आवश्यक फ़ंक्शन को फिर से लागू करते हैं, जो बदले में समान फ़ंक्शन के आंतरिक कार्यान्वयन का उपयोग करता है। इसका परिणाम निम्न-स्तर की सुविधाओं को उच्च-स्तर के संदर्भ में प्रयुक्त करने में हो सकता है।
{{example farm|date=October 2013}}
{{Original research|date=May 2009}}
}}
 
[[कंप्यूटर प्रोग्रामिंग]] में, अमूर्त उलटा एक विरोधी पैटर्न उत्पन्न होता है, जब किसी निर्माण के उपयोगकर्ताओं को इसके भीतर लागू किए गए फ़ंक्शन की आवश्यकता होती है, लेकिन इसके [[इंटरफ़ेस (कंप्यूटिंग)]] द्वारा उजागर नहीं किया जाता है। परिणाम यह है कि उपयोगकर्ता इंटरफ़ेस के संदर्भ में आवश्यक फ़ंक्शन को फिर से लागू करते हैं, जो बदले में समान फ़ंक्शन के आंतरिक कार्यान्वयन का उपयोग करता है। इसका परिणाम निम्न-स्तर की सुविधाओं को उच्च-स्तर के संदर्भ में प्रयुक्त करने में हो सकता है, इस प्रकार 'अमूर्त उलटा' शब्द।


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


== उदाहरण ==
== उदाहरण ==
अनुभवी प्रोग्रामिंग मंडलियां के कथित उदाहरणों में शामिल हैं:
अनुभवी प्रोग्रामिंग मंडलियां के कथित उदाहरणों में सम्मलित हैं:
* [[एडीए प्रोग्रामिंग भाषा]] में, एक तुल्यकालन प्रिमिटिव के रूप में मिलन स्थल निर्माण का विकल्प अधिक जटिल आधार पर [[सेमाफोर (प्रोग्रामिंग)]] जैसे सरल निर्माणों को लागू करने के लिए प्रोग्रामर को वाध्य करता है।<ref name="pipeline_on_ada">[http://www.pipeline.com/~hbaker1/CritLisp.html#fn2 DIN कर्नेल लिस्प परिभाषा संस्करण 1.2 की आलोचना, फुटनोट 2] {{Webarchive|url=https://web.archive.org/web/20180506220654/http://www.pipeline.com/~hbaker1/CritLisp.html#fn2 |date=2018-05-06 }} - कहते हैं (संदर्भ के बिना) कि यह शब्द एडा रेंडीज़वस की आलोचनाओं से निकला है, यह सबसे शुरुआती उपयोगों में से एक प्रतीत होता है।</ref>
* [[एडीए प्रोग्रामिंग भाषा]] में, एक समकालीन प्रिमिटिव के रूप में मिलन स्थल निर्माण का विकल्प अधिक जटिल आधार पर [[सेमाफोर (प्रोग्रामिंग)]] जैसे सरल निर्माणों को लागू करने के लिए प्रोग्रामर को वाध्य करता है।<ref name="pipeline_on_ada">[http://www.pipeline.com/~hbaker1/CritLisp.html#fn2 DIN कर्नेल लिस्प परिभाषा संस्करण 1.2 की आलोचना, फुटनोट 2] {{Webarchive|url=https://web.archive.org/web/20180506220654/http://www.pipeline.com/~hbaker1/CritLisp.html#fn2 |date=2018-05-06 }} - कहते हैं (संदर्भ के बिना) कि यह शब्द एडा रेंडीज़वस की आलोचनाओं से निकला है, यह सबसे शुरुआती उपयोगों में से एक प्रतीत होता है।</ref>
* [[एपलसॉफ्ट बेसिक]] में, [[ तैरनेवाला स्थल |तैरनेवाला स्थल]] अंकगणित के शीर्ष पर [[पूर्णांक]] अंकगणित लागू किया गया था, और कोई [[बिटवाइज़ ऑपरेशन|बिटवाइज़ ऑपरेटर]] नहीं थे और [[ रेखापुंज ग्राफिक्स |रेखापुंज ग्राफिक्स]] के [[ टिल तिल |ब्लिटिंग]] के लिए कोई समर्थन नहीं था (भले ही एप्पल द्वितीय के रेखापुंज हार्डवेयर पर भाषा समर्थित वेक्टर ग्राफिक्स)। इसके कारण आधारभूत में लिखे गए गेम और अन्य प्रोग्राम धीमे चलने लगे।
* [[एपलसॉफ्ट बेसिक|एपलसॉफ्ट आधारभूत]] में, [[ तैरनेवाला स्थल |तैरनेवाला स्थल]] अंकगणित के शीर्ष पर [[पूर्णांक]] अंकगणित क्रियान्वित किया गया था, और कोई [[बिटवाइज़ ऑपरेशन|बिटवाइज़ ऑपरेटर]] नहीं थे और [[ रेखापुंज ग्राफिक्स |रेखापुंज ग्राफिक्स]] के [[ टिल तिल |ब्लिटिंग]] के लिए कोई समर्थन नहीं था (भले ही भाषा ने एप्पल द्वितीय के रेखापुंज हार्डवेयर पर वेक्टर ग्राफिक्स का समर्थन किया)। इसके कारण आधारभूत में लिखे गए गेम और अन्य प्रोग्राम धीमे चलने लगे।
* Applesoft BASIC की तरह, Lua (प्रोग्रामिंग लैंग्वेज) में एकमात्र संख्यात्मक प्रकार के रूप में एक फ़्लोटिंग-पॉइंट प्रकार है
* एपलसॉफ्ट आधारभूत की तरह, लुआ (प्रोग्रामिंग भाषा) में एकमात्र संख्यात्मक प्रकार के रूप में एक तैरनेवाला स्थल प्रकार है, जब डेस्कटॉप कंप्यूटर के लिए विन्यस्त किया गया था, तब इसमें लुआ 5.2 से पहले कोई बिटवाइज़ ऑपरेटर नहीं था।
रेफरी>[http://www.lua.org/pil/2.3.html लुआ में प्रोग्रामिंग: 2.3 - नंबर] 2009-10-12 तक पहुंचा।</ref> डेस्कटॉप कंप्यूटर के लिए कॉन्फ़िगर किए जाने पर, रेफरी>[http://lua-users.org/wiki/FloatingPoint lua-users c2: फ़्लोटिंग पॉइंट] 2009-10-12 को एक्सेस किया गया।</ref> और इसमें Lua 5.2 से पहले कोई बिटवाइज़ ऑपरेटर नहीं था। रेफरी>[http://lua-users.org/wiki/BitwiseOperators lua-users c2: बिटवाइज ऑपरेटर्स] 15-01-2013 को एक्सेस किया गया।</ref>
 
* [[ जावा (प्रोग्रामिंग भाषा) ]] और [[C++]] (विशेष रूप से C++11 और Java 8 से पहले) जैसी [[ वस्तु के उन्मुख ]] भाषाओं में फ़ंक्शन का प्रतिनिधित्व करने के लिए ऑब्जेक्ट बनाना बोझिल है, जिसमें फ़ंक्शंस प्रथम श्रेणी के ऑब्जेक्ट नहीं होते हैं। C++ में किसी वस्तु को ओवरलोड करके 'कॉल करने योग्य' बनाना संभव है <code>()</code> ऑपरेटर, लेकिन यह अभी भी एक नई कक्षा को लागू करने के लिए आवश्यक है, जैसे कि [http://www.sgi.com/tech/stl/functors.html एसटीएल में फंक्टर]। ([[सी ++ 11]] का लैम्ब्डा फ़ंक्शन फ़ंक्शन का प्रतिनिधित्व करने वाली वस्तु बनाना बहुत आसान बनाता है।)
* किसी फ़ंक्शन का प्रतिनिधित्व करने के लिए वस्तु बनाना [[ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग]] भाषाओं जैसे [[जावा (प्रोग्रामिंग भाषा)]] और [[C++]] (विशेष रूप से सी ++ 11 और जावा 8 से पहले) में दुष्कर है, जिसमें फ़ंक्शन प्रथम श्रेणी की वस्तु नहीं हैं। सी ++ में <code>()</code> ऑपरेटर को ओवरलोड करके वस्तु को 'कॉल करने योग्य' बनाना संभव है, लेकिन एसटीएल में फंक्टर जैसे नए वर्ग को क्रियान्वित करना अभी भी आवश्यक है। ([[सी ++ 11]] का लैम्ब्डा फ़ंक्शन, फ़ंक्शन का प्रतिनिधित्व करने वाली वस्तु बनाना बहुत आसान बनाता है।)
* टॉम लॉर्ड ने सुझाव दिया है कि सबवर्सन (सॉफ्टवेयर) वर्जन कंट्रोल सिस्टम खराब प्रदर्शन वाले रीड/राइट डेटाबेस पर राइट-ओनली डेटाबेस को लागू करने के अमूर्त व्युत्क्रम के लिए भुगतान करता है।<ref name="lord_on_svn">[https://archive.today/20130222124420/http://sourcefrog.net/weblog/software/vc/subversion/lord-on-svn.html स्रोतफ्रॉग: तोड़फोड़ पर टॉम लॉर्ड<!-- Bot generated title -->]</रेफरी>
* टॉम लॉर्ड ने सुझाव दिया है कि अपाचे सबवर्जन (सॉफ्टवेयर) संस्करण नियंत्रण प्रणाली खराब प्रदर्शन वाले पढ़ने/लिखने वाले डेटाबेस पर केवल-लिखने वाले डेटाबेस को क्रियान्वित करने के अब्स्ट्रक्शन इनवर्शनव के लिए भुगतान करती है।<ref name="lord_on_svn">[https://archive.today/20130222124420/http://sourcefrog.net/weblog/software/vc/subversion/lord-on-svn.html स्रोतफ्रॉग: तोड़फोड़ पर टॉम लॉर्ड<!-- Bot generated title -->]</रेफरी>
* किसी रिलेशनल डेटाबेस में डेटा में हेरफेर करने के लिए संग्रहीत कार्यविधियों का उपयोग करना, प्रोग्रामर्स को ऐसी प्रक्रियाओं को तैनात करने का अधिकार दिए बिना, डेटाबेस के बाहर प्रश्नों को फिर से लागू करने की ओर ले जाता है। उदाहरण के लिए, बड़े डेटासेट (अत्यधिक मामलों में - संपूर्ण तालिकाएँ) प्राप्त किए जाते हैं और वास्तविक फ़िल्टरिंग एप्लिकेशन कोड में होती है। वैकल्पिक रूप से, एक से अधिक पंक्ति क्वेरी चलाने के बजाय हजारों पंक्तियों को एक-एक करके अपडेट (सम्मिलित या प्राप्त किया गया) किया जाता है।
* किसी रिलेशनल डेटाबेस में डेटा में हेरफेर करने के लिए संग्रहीत कार्यविधियों का उपयोग करना, प्रोग्रामर्स को ऐसी प्रक्रियाओं को तैनात करने का अधिकार दिए बिना, डेटाबेस के बाहर प्रश्नों को फिर से लागू करने की ओर ले जाता है। उदाहरण के लिए, बड़े डेटासेट (अत्यधिक मामलों में - संपूर्ण तालिकाएँ) प्राप्त किए जाते हैं और वास्तविक फ़िल्टरिंग एप्लिकेशन कोड में होती है। वैकल्पिक रूप से, एक से अधिक पंक्ति क्वेरी चलाने के बजाय हजारों पंक्तियों को एक-एक करके अपडेट (सम्मिलित या प्राप्त किया गया) किया जाता है।
* Microsoft का [[WinUI 3]] व्यवस्थित रूप से विंडोज़ के टाइटल बार को एक कस्टम के साथ बनाता है जो एंड-यूज़र की रंग सेटिंग्स को अनदेखा करता है, इसके बजाय हमेशा ग्रे दिखाई देता है। अंतिम-उपयोगकर्ता के चुने हुए रंग को टाइटल बार पर लागू करने के लिए विंडोज 11 पर और अनुकूलन कोड का उपयोग करने की आवश्यकता होती है, और कस्टम टाइटल बार को पूरी तरह से विंडोज 10 पर किसी अन्य कस्टम के साथ बदलने की आवश्यकता होती है।
* Microsoft का [[WinUI 3]] व्यवस्थित रूप से विंडोज़ के टाइटल बार को एक कस्टम के साथ बनाता है जो एंड-यूज़र की रंग सेटिंग्स को अनदेखा करता है, इसके बजाय हमेशा ग्रे दिखाई देता है। अंतिम-उपयोगकर्ता के चुने हुए रंग को टाइटल बार पर लागू करने के लिए विंडोज 11 पर और अनुकूलन कोड का उपयोग करने की आवश्यकता होती है, और कस्टम टाइटल बार को पूरी तरह से विंडोज 10 पर किसी अन्य कस्टम के साथ बदलने की आवश्यकता होती है।
रेफरी>[https://learn.microsoft.com/en-us/windows/apps/develop/title-bar टाइटल बार कस्टमाइजेशन - विंडोज़ ऐप्स | माइक्रोसॉफ्ट लर्न]</ref>
रेफरी>[https://learn.microsoft.com/en-us/windows/apps/develop/title-bar टाइटल बार कस्टमाइजेशन - विंडोज़ ऐप्स | माइक्रोसॉफ्ट लर्न]</ref>


पेशेवर प्रोग्रामिंग मंडलियों के बाहर सामान्य उदाहरणों में शामिल हैं:
अनुभवी प्रोग्रामिंग मंडलियों के बाहर सामान्य उदाहरणों में सम्मलित हैं:


* डेटाबेस की कार्यक्षमता को दोहराने के लिए स्प्रेडशीट लुकअप फ़ंक्शंस का उपयोग करना
* डेटाबेस की कार्यक्षमता को दोहराने के लिए स्प्रेडशीट लुकअप फ़ंक्शंस का उपयोग करना।
* Microsoft Visual Basic में भिन्न प्रकार के डेटा प्रकारों को लूप काउंटर के रूप में उपयोग करना जहाँ एक पूर्णांक प्रकार भी उपलब्ध है।
* माइक्रोसॉफ्ट विजुअल आधारभूत में भिन्न डेटा प्रकारों का लूप काउंटर के रूप में उपयोग करना जहाँ एक पूर्णांक प्रकार भी उपलब्ध है।


== यह भी देखें ==
== यह भी देखें ==
Line 33: Line 28:
== संदर्भ ==
== संदर्भ ==
{{reflist}}
{{reflist}}


==बाहरी संबंध==
==बाहरी संबंध==
* [[c2:AbstractionInversion|Abstraction Inversion]] at Portland Pattern Repository - extensive discussion, much of it taking "abstraction inversion" in the sense of "concealed complexity"
* [[c2:AbstractionInversion|अब्स्ट्रक्शन इनवर्शन]] पोर्टलैंड प्रारूप ज्ञान-कोष में - व्यापक चर्चा, इसमें से अधिकांश "छिपी हुई जटिलता" के अर्थ में "अब्स्ट्रक्शन इनवर्शन" ले रहा है
[[Category: विरोधी पैटर्न]]
 
 


[[Category: Machine Translated Page]]
[[Category:Created On 26/05/2023]]
[[Category:Created On 26/05/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Webarchive template wayback links]]
[[Category:विरोधी पैटर्न]]

Latest revision as of 16:57, 12 June 2023

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

संभावित दुष्प्रभाव हैं:

  • इस तरह के एक पुन: क्रियान्वित किए गए फ़ंक्शन से उपयोगकर्ता इसकी चल-लागत को गंभीरता से कम कर सकते हैं।
  • निर्माण में उपयोगकर्ता जटिल यांत्रिक विवरण के साथ उनके कार्यान्वयन को अस्पष्ट करने के लिए वाध्य हैं।
  • कई उपयोगकर्ता त्रुटि के संकट को बढ़ाते हुए एक ही समस्या को हल करने का प्रयास करते हैं।

उदाहरण

अनुभवी प्रोग्रामिंग मंडलियां के कथित उदाहरणों में सम्मलित हैं:

  • एडीए प्रोग्रामिंग भाषा में, एक समकालीन प्रिमिटिव के रूप में मिलन स्थल निर्माण का विकल्प अधिक जटिल आधार पर सेमाफोर (प्रोग्रामिंग) जैसे सरल निर्माणों को लागू करने के लिए प्रोग्रामर को वाध्य करता है।[1]
  • एपलसॉफ्ट आधारभूत में, तैरनेवाला स्थल अंकगणित के शीर्ष पर पूर्णांक अंकगणित क्रियान्वित किया गया था, और कोई बिटवाइज़ ऑपरेटर नहीं थे और रेखापुंज ग्राफिक्स के ब्लिटिंग के लिए कोई समर्थन नहीं था (भले ही भाषा ने एप्पल द्वितीय के रेखापुंज हार्डवेयर पर वेक्टर ग्राफिक्स का समर्थन किया)। इसके कारण आधारभूत में लिखे गए गेम और अन्य प्रोग्राम धीमे चलने लगे।
  • एपलसॉफ्ट आधारभूत की तरह, लुआ (प्रोग्रामिंग भाषा) में एकमात्र संख्यात्मक प्रकार के रूप में एक तैरनेवाला स्थल प्रकार है, जब डेस्कटॉप कंप्यूटर के लिए विन्यस्त किया गया था, तब इसमें लुआ 5.2 से पहले कोई बिटवाइज़ ऑपरेटर नहीं था।
  • किसी फ़ंक्शन का प्रतिनिधित्व करने के लिए वस्तु बनाना ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाओं जैसे जावा (प्रोग्रामिंग भाषा) और C++ (विशेष रूप से सी ++ 11 और जावा 8 से पहले) में दुष्कर है, जिसमें फ़ंक्शन प्रथम श्रेणी की वस्तु नहीं हैं। सी ++ में () ऑपरेटर को ओवरलोड करके वस्तु को 'कॉल करने योग्य' बनाना संभव है, लेकिन एसटीएल में फंक्टर जैसे नए वर्ग को क्रियान्वित करना अभी भी आवश्यक है। (सी ++ 11 का लैम्ब्डा फ़ंक्शन, फ़ंक्शन का प्रतिनिधित्व करने वाली वस्तु बनाना बहुत आसान बनाता है।)
  • टॉम लॉर्ड ने सुझाव दिया है कि अपाचे सबवर्जन (सॉफ्टवेयर) संस्करण नियंत्रण प्रणाली खराब प्रदर्शन वाले पढ़ने/लिखने वाले डेटाबेस पर केवल-लिखने वाले डेटाबेस को क्रियान्वित करने के अब्स्ट्रक्शन इनवर्शनव के लिए भुगतान करती है।[2]

अनुभवी प्रोग्रामिंग मंडलियों के बाहर सामान्य उदाहरणों में सम्मलित हैं:

  • डेटाबेस की कार्यक्षमता को दोहराने के लिए स्प्रेडशीट लुकअप फ़ंक्शंस का उपयोग करना।
  • माइक्रोसॉफ्ट विजुअल आधारभूत में भिन्न डेटा प्रकारों का लूप काउंटर के रूप में उपयोग करना जहाँ एक पूर्णांक प्रकार भी उपलब्ध है।

यह भी देखें

संदर्भ

  1. DIN कर्नेल लिस्प परिभाषा संस्करण 1.2 की आलोचना, फुटनोट 2 Archived 2018-05-06 at the Wayback Machine - कहते हैं (संदर्भ के बिना) कि यह शब्द एडा रेंडीज़वस की आलोचनाओं से निकला है, यह सबसे शुरुआती उपयोगों में से एक प्रतीत होता है।
  2. स्रोतफ्रॉग: तोड़फोड़ पर टॉम लॉर्ड</रेफरी>
    • किसी रिलेशनल डेटाबेस में डेटा में हेरफेर करने के लिए संग्रहीत कार्यविधियों का उपयोग करना, प्रोग्रामर्स को ऐसी प्रक्रियाओं को तैनात करने का अधिकार दिए बिना, डेटाबेस के बाहर प्रश्नों को फिर से लागू करने की ओर ले जाता है। उदाहरण के लिए, बड़े डेटासेट (अत्यधिक मामलों में - संपूर्ण तालिकाएँ) प्राप्त किए जाते हैं और वास्तविक फ़िल्टरिंग एप्लिकेशन कोड में होती है। वैकल्पिक रूप से, एक से अधिक पंक्ति क्वेरी चलाने के बजाय हजारों पंक्तियों को एक-एक करके अपडेट (सम्मिलित या प्राप्त किया गया) किया जाता है।
    • Microsoft का WinUI 3 व्यवस्थित रूप से विंडोज़ के टाइटल बार को एक कस्टम के साथ बनाता है जो एंड-यूज़र की रंग सेटिंग्स को अनदेखा करता है, इसके बजाय हमेशा ग्रे दिखाई देता है। अंतिम-उपयोगकर्ता के चुने हुए रंग को टाइटल बार पर लागू करने के लिए विंडोज 11 पर और अनुकूलन कोड का उपयोग करने की आवश्यकता होती है, और कस्टम टाइटल बार को पूरी तरह से विंडोज 10 पर किसी अन्य कस्टम के साथ बदलने की आवश्यकता होती है।
    रेफरी>टाइटल बार कस्टमाइजेशन - विंडोज़ ऐप्स | माइक्रोसॉफ्ट लर्न

बाहरी संबंध

  • अब्स्ट्रक्शन इनवर्शन पोर्टलैंड प्रारूप ज्ञान-कोष में - व्यापक चर्चा, इसमें से अधिकांश "छिपी हुई जटिलता" के अर्थ में "अब्स्ट्रक्शन इनवर्शन" ले रहा है