Abstraction layer
In
In
A layer is considered to be on top of another if it
A famous aphorism of David Wheeler is, "All problems in computer science can be solved by another level of indirection."[1] This is often deliberately misquoted with "abstraction" substituted for "indirection."[citation needed] It is also sometimes misattributed to Butler Lampson. Kevlin Henney's corollary to this is, "...except for the problem of too many layers of indirection."[2]
Computer architecture
In a computer architecture, a computer system is usually represented as consisting of several abstraction levels such as:
Programmable logic is often considered part of the hardware, while the logical definitions are also sometimes seen as part of a device's software or firmware. Firmware may include only low-level software, but can also include all software, including an operating system and applications. The software layers can be further divided into hardware abstraction layers, physical and logical device drivers, repositories such as filesystems, operating system kernels, middleware, applications, and others. A distinction can also be made from low-level programming languages like
Input and output
In the Unix operating system, most types of input and output operations are considered to be streams of bytes read from a device or written to a device. This stream of bytes model is used for file I/O, socket I/O, and terminal I/O in order to provide device independence. In order to read and write to a device at the application level, the program calls a function to open the device, which may be a real device such as a terminal or a virtual device such as a network port or a file in a file system. The device's physical characteristics are mediated by the operating system which in turn presents an abstract interface that allows the programmer to read and write bytes from/to the device. The operating system then performs the actual transformation needed to read and write the stream of bytes to the device.
Graphics
Most graphics libraries such as OpenGL provide an abstract graphical device model as an interface. The library is responsible for translating the commands provided by the programmer into the specific device commands needed to draw the graphical elements and objects. The specific device commands for a
See also
- Application programming interface(API)
- Application binary interface (ABI)
- Compiler, a tool for abstraction between source code and machine code
- Hardware abstraction
- Information hiding
- Layer (object-oriented design)
- Namespace violation
- Protection ring
- Operating system, an abstraction layer between a program and computer hardware
- Software engineering
References
- ^ Spinellis, Diomidis (2007). "Chapter 17. Another Level of Indirection". Beautiful Code: Leading Programmers Explain How They Think. Sebastopol, CA: O'Reilly and Associates. pp. 279–291. Archived from the original on Mar 6, 2024.
- ^ Henney, Kevlin [@kevlinhenney] (September 3, 2012). "@drunkcod Yes, that's my corollary :^)" (Tweet). Archived from the original on Mar 29, 2022 – via Twitter.
- ISBN 0-13-148521-0.