 in computer programming, abstraction inversion is an anti-pattern arising when users of a construct need functions implemented within it but not exposed by its interface. the result is that the users re-implement the required functions in terms of the interface, which in its turn uses the internal implementation of the same functions. possible ill-effects are: * the user of such a re-implemented function may seriously underestimate its running-costs. * the user of the construct is forced to obscure his implementation with complex mechanical details. * many users attempt to solve the same problem, increasing the risk of error. == abstraction inversion in practice ==  ways to avoid this anti-pattern include: : for designers of lower-level software: :* if your system offers formally equivalent functions, choose carefully which to implement in terms of the other. :* do not force unnecessarily weak constructs on your users. : for implementers of higher-level software: :* choose your infrastructure carefully. == examples == alleged examples from professional programming circles include: * in ada, choice of the rendezvous construct as a synchronisation primitive forced programmers to implement simpler constructs such as semaphores on the more complex basis.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. * in applesoft basic, integer arithmetic was implemented on top of floating-point arithmetic, and there were no bitwise operators and no support for blitting of raster graphics (even though the language supported vector graphics on the apple ii's raster hardware). this caused games and other programs written in basic to run slower. * like applesoft basic, lua has a floating-point type as its sole numeric typeprogramming in lua : 2.3 - numbers accessed 2009-10-12. when configured for desktop computers,lua-users c2: floating point accessed 2009-10-12. and it had no bitwise operators prior to lua 5.2.lua-users c2: bitwise operators accessed 2013-01-15. * some people hold the opinion that microkernel design is an abstraction inversion (see the links). it is interesting that microkernels are also alleged to commit the design error of oversimplifying the components so as to overcomplicate their relationships.distribute those centralized microkernels 
Anti-patterns