In computer programming, abstraction inversion occurs when a programmer creates abstract (or simple) constructs on top of concrete (or complex) constructs. The correct way is considered to be the other way round — to create complex constructs on top of more basic constructs. Abstraction inversion is an example of an anti-pattern. Computer code (HTML with JavaScript) in a tool that uses colors to help the developer see the function of each piece of code. ... In computer science, abstraction is a mechanism and practice to reduce and factor out details so that one can focus on few concepts at a time. ... Anti-patterns, also referred to as pitfalls, are classes of commonly-reinvented bad solutions to problems. ...
The term "abstraction inversion" is also sometimes misused as an insult against a certain architecture or design.
This is a somewhat difficult anti-pattern to recognise, as:
it can be unclear what is more abstract or concrete, or more simple or complex,
a simple interface, though useful, may require a complex implementation,
a development environment may require one to express abstract concepts in specific ways,
it can be unclear where the irreducible complexity of a system should be located.
Examples that are common outside professional programming circles include:
Using Excel lookup functions to replicate the functionality of a database
Using variant data types as loop counters in Microsoft Visual Basic where an integer type is also available.
External links
Article in Ward's Wiki- (includes a lot of discussion)
An example of this abstraction process is the generational development of programming languages from the machine language to the assembly language and the high-level language.
Data abstraction is the enforcement of a clear separation between the abstract properties of a data type and the concrete details of its implementation.
Object-oriented languages are commonly claimed to offer data abstraction; however, their inheritance concept tends to put information in the interface that more properly belongs in the implementation; thus, changes to such information ends up impacting client code, leading directly to the fragile base class problem.