अब्स्ट्रक्शन इनवर्शन

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

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

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


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

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


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

यह भी देखें

 * लीकी अमूर्तता

बाहरी संबंध

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