A számítógép-programozásban az absztrakció megfordítása egy antiminta, amit az jellemez, hogy a kliensnek szüksége lenne az objektum bizonyos függvényeire, de nem fér hozzájuk. Emiatt a kliensnek újra meg kell valósítania ezeket a függvényeket. Az antimintát azért is nevezik absztrakció megfordításának, mivel az újramegvalósított függvények magasabb függvények közé kerülnek.

Lehetséges következmények: Mivel többször kell megcsinálni ugyanazt, megnő a hiba esélye. Az újramegvalósított függvény felhasználója alulbecsülheti a futási időt. Az újabb megvalósítás elrejtése további technikai megoldásokat igényel. Megelőzése Alacsony szinten: Ha a rendszer formálisan ekvivalens funkciókat biztosít, akkor elővigyázatosan válassz közülük! Ne kényszeríts szükségtelenül gyenge szerkezeteket a felhasználókra!

Magas szinten: Legyél elővigyázatos, amikor infrastruktúrát kell választani!

Példák Táblázatkezelő függvények használatával egy adatbázis-kezelő funkcionalitásának megvalósítása Microsoft Visual Basicben változó típusú ciklusszámlálók használta, amikor egészeket is lehetne.

Professzionális környezetben: Az Adában szinkronizációs primitívként randevúkat vezetett be, így a programozók arra kényszerültek, hogy egyszerűbb primitíveket, mint például szemaforok bonyolultabb alapokon valósítsanak meg.Critique of DIN Kernel Lisp Definition Version 1.2, footnote 2 - says (without references) that the term derives from critiques of the Ada rendezvous, appears to be one of the earliest uses. Az Applesoft BASICben az integer aritmetikát a lebegőpontos aritmetika alapján valósították meg, nem voltak bitenkénti operátorok és nem volt blittelés raszteres képek számára, annak ellenére, hogy a vektorgrafikát az Apple II raszteres hardverének felhasználásával támogatta. Emiatt a BASIC programok lassabbak voltak. Az Applesoft BASIChez hasonlóan a Lua teljes aritmetikája lebegőpontos, egész típus nincs,Programming in Lua : 2.3 - Numbers Accessed 2009-10-12. ha asztali gépre van konfigurálva;lua-users c2: Floating Point Accessed 2009-10-12. a Lua 5.2 előtt nem voltak bitenkénti műveletek.lua-users c2: Bitwise Operators Accessed 2013-01-15. Objektumorientált nyelvekben, mint Java vagy C++, a Java 8 és a C++11 előtt nehézkes volt a függvények objektumként való kezelése. Ekkor két megoldás volt: egy objektum hívhatóvá tevése a () operátor túlterhelésével, vagy egy új osztály megvalósítása, például az STL funktoraival. C++11-ben a lambda függvények megkönnyítik ezt. Tom Lord szerint a Subversion verziókezelő rendszer megfizeti az absztrakció megfordításának árát, mivel írható-olvasható adatbázissal valósít meg csak írható adatbázist. Relációs adatbázisban tárolt eljárások használata adatmanipulációra anélkül, hogy garantálnák ezeknek a deployolását ahhoz vezet, hogy a lekérdezéseket adatbázison kívül valósítják meg. Például nagy adatbázisokat, akár egész táblákat kérdeznek le, majd az alkalmazói kód végzi el a szűrést. Egy másik példa, hogy ezernyi sort frissítenek egyesével, ahelyett, hogy egy kéréssel végeznék el.

Jegyzetek

További információk Abstraction Inversion at Portland Pattern Repository - extensive discussion, much of it taking "abstraction inversion" in the sense of "concealed complexity"

Kategória:Programozási antiminták