Una capa de abstracción es una forma de ocultar los detalles de implementación de un conjunto particular de funciones. Se utiliza para controlar la complejidad del sistema diseñado durante la descomposición , cuando el sistema se representa como una jerarquía de niveles de abstracción.
Los ejemplos de modelos de software que usan capas de abstracción incluyen el modelo OSI de siete capas para protocolos de comunicación de redes informáticas , la biblioteca primitiva de gráficos OpenGL , el modelo de E/S de flujo de bytes de Unix utilizado en MS DOS , Linux y muchos otros sistemas operativos modernos. .
En el sistema operativo Unix, la mayoría de los tipos de operaciones de E/S se tratan como flujos de bytes leídos o escritos en un dispositivo . Este modelo de flujo de bytes se utiliza para E/S de archivo , socket y terminal de computadora para proporcionar independencia de dispositivo para E/S. Para leer y escribir en un dispositivo de nivel de aplicación, el programa llama a una función de apertura de dispositivo, que puede corresponder a un dispositivo real, como un terminal, o un dispositivo virtual , como un puerto de red o un archivo en un sistema de archivos. . Las características físicas del dispositivo se pasan al sistema operativo, que a su vez proporciona una interfaz abstracta que permite al programador leer y escribir bytes en el dispositivo. Luego, el sistema operativo realiza las acciones necesarias para trabajar con un dispositivo en particular.
La mayoría de las bibliotecas de gráficos , como OpenGL, proporcionan un modelo gráfico abstracto como interfaz. La biblioteca es responsable de traducir los comandos del programa en comandos de dispositivos especiales necesarios para dibujar objetos y elementos gráficos. Los comandos específicos del trazador son diferentes de los comandos del monitor , pero la biblioteca de gráficos oculta los detalles de implementación específicos del dispositivo al proporcionar una interfaz abstracta que contiene un conjunto de primitivas comúnmente utilizadas para dibujar objetos gráficos.
En el diseño orientado al dominio, una estructura a gran escala (área temática) puede usar el patrón de capas de responsabilidad . Por ejemplo, un modelo de dominio se puede dividir en niveles (de arriba a abajo) "Apoyo a la toma de decisiones", "Operaciones" y "Capacidades de producción", en los que las entidades de nivel superior dependen de las entidades de nivel inferior, pero el nivel inferior no. dependen del superior [1] .
Un famoso aforismo de David Wheeler dice: Todos los problemas en informática pueden resolverse en otro nivel de forma indirecta ; [2] esto a menudo se cita incorrectamente con "desvío" reemplazado por "abstracción". Una continuación de Kevlin Henney dice "... excepto por problemas con un gran nivel de direccionamiento indirecto".
A menudo, los niveles de abstracción se organizan en una jerarquía de niveles de abstracción. El modelo de red OSI contiene siete niveles de abstracción. Cada capa del modelo ISO OSI considera una parte separada de los requisitos de comunicación, lo que reduce la complejidad de las decisiones de ingeniería asociadas.
Idealmente, la abstracción protege completamente la capa superior de los detalles de implementación de la capa inferior. Sin embargo, en casos más o menos complejos, es casi imposible alcanzar el ideal, que Joel Spolsky expresó en forma de la ley de las abstracciones con fugas .[3] [4] :
Todas las abstracciones no triviales están llenas de agujeros.
En términos de arquitectura informática, un sistema suele representarse como un modelo de cinco niveles de abstracción: hardware informático (ver capa de abstracción de hardware ), firmware , lenguaje ensamblador , kernel del sistema operativo y aplicaciones . [5]