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

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

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

उदाहरण
पेशेवर प्रोग्रामिंग हलकों से कथित उदाहरणों में शामिल हैं: रेफरी>लुआ में प्रोग्रामिंग: 2.3 - नंबर 2009-10-12 तक पहुंचा। डेस्कटॉप कंप्यूटर के लिए कॉन्फ़िगर किए जाने पर, रेफरी>lua-users c2: फ़्लोटिंग पॉइंट 2009-10-12 को एक्सेस किया गया। और इसमें Lua 5.2 से पहले कोई बिटवाइज़ ऑपरेटर नहीं था। रेफरी>lua-users c2: बिटवाइज ऑपरेटर्स 15-01-2013 को एक्सेस किया गया।
 * एडीए प्रोग्रामिंग भाषा में, सिंक्रोनाइज़ेशन आदिम के रूप में रेंडीज़वस निर्माण का विकल्प अधिक जटिल आधार पर सेमाफोर (प्रोग्रामिंग) जैसे सरल निर्माणों को लागू करने के लिए प्रोग्रामर को मजबूर करता है।
 * एपलसॉफ्ट बेसिक में, पूर्णांक अंकगणित को तैरनेवाला स्थल  | फ्लोटिंग-पॉइंट अंकगणित के शीर्ष पर लागू किया गया था, और कोई बिटवाइज़ ऑपरेशन नहीं था और  रेखापुंज ग्राफिक्स  के  टिल तिल िंग के लिए कोई समर्थन नहीं था (भले ही ऐप्पल II के रास्टर हार्डवेयर पर भाषा समर्थित वेक्टर ग्राफिक्स) . इसके कारण BASIC में लिखे गए गेम और अन्य प्रोग्राम धीमे चलने लगे।
 * Applesoft BASIC की तरह, Lua (प्रोग्रामिंग लैंग्वेज) में एकमात्र संख्यात्मक प्रकार के रूप में एक फ़्लोटिंग-पॉइंट प्रकार है
 * जावा (प्रोग्रामिंग भाषा) और 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"