Abstraction

#

From its root, "abstraction" means something that is "drawn away".

#

The most common definition of abstraction in software engineering is that of "black-box abstraction". This definition comes from other engineering disciplines and mathematics. A software modules hides its implementation details and present a simpler interface to its clients.

#

However, contrary to mathematics, software abstractions have to run on physical computers. The performance of the implementation might degrade in some cases and break the abstraction. This is why people say that all software abstractions are leaky.

#

In Towards a New Model of Abstraction in the Engineering of Software Gregor Kiczales illustrates some problems with this concept of black-box abstraction and proposes a new way to think about abstraction in software engineering.

◆◆◆