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.
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.