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

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

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

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


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

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


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

यह भी देखें

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

बाहरी संबंध

 * Abstraction Inversion at Portland Pattern Repository - extensive discussion, much of it taking "abstraction inversion" in the sense of "concealed complexity"