In computing , an abstraction layer or abstraction level is a way of hiding the implementation of a particular set of functionality, allowing the separation of concerns to facilitate interoperability and platform independence . Software models that use layers of the OSI model for network protocols , OpenGL and other graphics libraries .
In computer science , an abstraction layer is a generalization of a conceptual model or algorithm , away from any specific implementation. These generalizations arise from broad similarities that are best encapsulated by models that express similarities present in various specific implementations. The simplification provided by a good abstraction layer allows for a better understanding of the concept of a design concept that can be quickly recognized.
A good abstraction will be generalized that, while allowing specificity where the abstraction breaks down and its successful application requires customization to each unique requirement or problem. A layer is on top of another, because it depends on it. Every layer can exist without the layers above it, and requires the layers below it to function. Frequently abstraction layers can be composed of a hierarchy of abstraction levels. The OSI model included seven abstraction layers. Each layer of the model encapsulates and addresses a different part of the needs of digital communications, thus reducing the complexity of the associated engineering solutions.
A famous aphorism of David Wheeler is “All problems in computer science can be solved by another level of indirection”.  This is often deliberately misquoted with “abstraction” substituted for “indirection”. 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.” 
In a computer architecture , a computer system is usually represented as one of several abstraction levels such as:
- programmable logic
Programmable logic is often considered part of the hardware, while the logical definitions are also seen as part of a device’s software or firmware. Firmware may include only low-level software, but may also include software, including an operating system and applications. The software layers can be further broken down into layers of hardware, hardware and logical device drivers, repositories such as filesystems, kernel operating systems, middleware, applications, and others. A distinction can also be made from low-level programming languages like VHDL , machine language , assembly language to a compiled language , interpreter , and script language . 
Input / output
In the Unix operating system, most types of input and output operations are considered by a device or device. This stream of bytes is used for I / O, socket I / O, and terminal I / O in order to provide device independence. The application of a device to the application of a device, the program calls a device to a device or to a device . 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.
OpenGL provide an abstract graphical device as an interface. The library is responsible for translating the commands provided by the program. The device specific commands for a plotter are different from the device commands for a CRT monitor , the purpose graphics library hides the implementation and device dependent details by providing good an abstract interface qui Provides a set of primitive That are Generally Useful for drawing graphical objects.
- Hardware abstraction
- Application programming interface (API)
- Binary interface application (ABI)
- Hiding information
- Layer – in object-oriented design
- Ring protection
- Software engineering
- Jump up^ Spinellis, Diomidis (2007). Beautiful Code: Leading Explain Programmers How They Think . Sebastopol, CA: O’Reilly and Associates. pp. 279-291.
- Jump up^ @kevlinhenney (September 3, 2012). “Yes, that’s my corollary” (Tweet) – via Twitter .
- Jump up^ Tanenbaum, Andrew S. (1979). Structured Computer Organization . Englewood Cliffs, NJ : Prentice-Hall. ISBN 0-13-148521-0 .