HOME

TheInfoList



OR:

In
computer programming Computer programming or coding is the composition of sequences of instructions, called computer program, programs, that computers can follow to perform tasks. It involves designing and implementing algorithms, step-by-step specifications of proc ...
, abstraction inversion is an
anti-pattern An anti-pattern in software engineering, project management, and business processes is a common response to a recurring problem that is usually ineffective and risks being highly counterproductive. The term, coined in 1995 by computer programmer An ...
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. This may result in implementing lower-level features in terms of higher-level ones, thus the term 'abstraction inversion'. 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 their implementation with complex mechanical details. * Many users attempt to solve the same problem, increasing the risk of error.


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.
*
Applesoft BASIC Applesoft BASIC is a dialect of Microsoft BASIC, developed by Marc McDonald and Ric Weiland, supplied with Apple II computers. It supersedes Integer BASIC and is the BASIC in Read-only memory, ROM in all Apple II series computers after the ori ...
and Lua (when configured for desktop computers) have a floating-point as the base numeric type. While Applesoft did implement
integer An integer is the number zero (0), a positive natural number (1, 2, 3, ...), or the negation of a positive natural number (−1, −2, −3, ...). The negations or additive inverses of the positive natural numbers are referred to as negative in ...
arithmetic, it was implemented on top of
floating-point arithmetic In computing, floating-point arithmetic (FP) is arithmetic on subsets of real numbers formed by a ''significand'' (a Sign (mathematics), signed sequence of a fixed number of digits in some Radix, base) multiplied by an integer power of that ba ...
, and neither had any
bitwise operators In computer programming, a bitwise operation operates on a bit string, a bit array or a binary numeral (considered as a bit string) at the level of its individual bits. It is a fast and simple action, basic to the higher-level arithmetic opera ...
(Lua added support in Lua 5.2) Applesoft also had no support for blitting of
raster graphics upright=1, The Smiley, smiley face in the top left corner is a raster image. When enlarged, individual pixels appear as squares. Enlarging further, each pixel can be analyzed, with their colors constructed through combination of the values for ...
(even though the language supported vector graphics on the Apple II's raster hardware). This caused games and other programs written in Applesoft to run slower. * Creating an object to represent a function is cumbersome in
object-oriented Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and impleme ...
languages such as
Java Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
and C++ (especially prior to C++11 and Java 8), in which functions are not
first-class object In a given programming language design, a first-class citizen is an entity which supports all the operations generally available to other entities. These operations typically include being passed as an argument, returned from a function, and ass ...
s. In C++ it is possible to make an object 'callable' by overloading the () operator, but it is still often necessary to implement a new class, such as the
Functors in the STL
'. (
C++11 C++11 is a version of a joint technical standard, ISO/IEC 14882, by the International Organization for Standardization (ISO) and International Electrotechnical Commission (IEC), for the C++ programming language. C++11 replaced the prior vers ...
's lambda function makes it much easier to create an object representing a function.) * Tom Lord has suggested that
Subversion Subversion () refers to a process by which the values and principles of a system in place are contradicted or reversed in an attempt to sabotage the established social order and its structures of Power (philosophy), power, authority, tradition, h ...
version control system pays for the abstraction inversion of implementing a write-only database on a read/write database with poor performance.sourcefrog : Tom Lord on Subversion
/ref> * Using
stored procedure A stored procedure (also termed prc, proc, storp, sproc, StoPro, StoredProc, StoreProc, sp, or SP) is a subroutine available to applications that access a relational database management system (RDBMS). Such procedures are stored in the database d ...
s to manipulate data in a relational database, without granting programmers right to deploy such procedures, leads to reimplementing queries outside the database. For example, large datasets (in extreme cases - whole tables) are fetched and actual filtering takes place in application code. Alternatively, thousands of rows are updated (inserted or even fetched) one by one instead of running a multiple row query. * Microsoft's WinUI 3 systematically replaces the title bar of the windows it creates with a custom one that ignores the end-user's color settings, always appearing gray instead. Applying the end-user's chosen color to the title bar requires using further customization code on Windows 11, and completely replacing the custom title bar with another custom one on Windows 10.Title bar customization - Windows apps , Microsoft Learn
/ref> Examples that are common outside professional programming circles include: * Using spreadsheet 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.


See also

* Leaky abstraction


References

{{reflist


External links

* Abstraction Inversion at Portland Pattern Repository - extensive discussion, much of it taking "abstraction inversion" in the sense of "concealed complexity" Anti-patterns