Capa de abstracción

Ajustar Compartir Imprimir Citar

En informática, una capa de abstracción, nivel de abstracción o abstraction layer es una forma de ocultar los detalles de trabajo de un subsistema. Los ejemplos de modelos de software que usan capas de abstracción incluyen el modelo OSI para protocolos de red, OpenGL y otras bibliotecas de gráficos, que permiten la separación de preocupaciones para facilitar la interoperabilidad y la independencia de la plataforma. Otro ejemplo es el Protocolo de transferencia de medios, que permite el acceso compartido y no requiere compatibilidad con un sistema de archivos común, pero restringe el control del usuario en comparación con el almacenamiento masivo con acceso a nivel de bloque.

En informática, una capa de abstracción es una generalización de un modelo conceptual o algoritmo, lejos de cualquier implementación específica. Estas generalizaciones surgen de amplias similitudes que se encapsulan mejor en modelos que expresan similitudes presentes en varias implementaciones específicas. La simplificación proporcionada por una buena capa de abstracción permite una fácil reutilización al destilar un concepto útil o patrón de diseño para que las situaciones, donde se puede aplicar con precisión, se puedan reconocer rápidamente.

Se considera que una capa está encima de otra si depende de ella. Cada capa puede existir sin las capas superiores y requiere que las capas inferiores funcionen. Con frecuencia, las capas de abstracción se pueden componer en una jerarquía de niveles de abstracción. El modelo OSI comprende siete capas de abstracción. Cada capa del modelo encapsula y aborda una parte diferente de las necesidades de las comunicaciones digitales, reduciendo así la complejidad de las soluciones de ingeniería asociadas.

Un famoso aforismo de David Wheeler es "Todos los problemas en informática pueden resolverse mediante otro nivel de indirección". Esto a menudo se cita erróneamente deliberadamente con "abstracción" sustituida por "indirección". A veces también se atribuye erróneamente a Butler Lampson. El corolario de Kevlin Henney para esto es, "... excepto por el problema de demasiadas capas de direccionamiento indirecto".

Arquitectura de Computadores

En una arquitectura de computadora, un sistema de computadora generalmente se representa como compuesto por varios niveles de abstracción, tales como:

La lógica programable a menudo se considera parte del hardware, mientras que las definiciones lógicas también se ven a veces como parte del software o firmware de un dispositivo. El firmware puede incluir solo software de bajo nivel, pero también puede incluir todo el software, incluido un sistema operativo y aplicaciones. Las capas de software se pueden dividir en capas de abstracción de hardware, controladores de dispositivos físicos y lógicos, repositorios como sistemas de archivos, kernels de sistemas operativos, middleware, aplicaciones y otros. También se puede hacer una distinción desde lenguajes de programación de bajo nivel como VHDL, lenguaje de máquina, lenguaje ensamblador hasta un lenguaje compilado, intérprete y lenguaje de script.

Entrada y salida

En el sistema operativo Unix, la mayoría de los tipos de operaciones de entrada y salida se consideran flujos de bytes leídos desde un dispositivo o escritos en un dispositivo. Este modelo de flujo de bytes se utiliza para E/S de archivos, E/S de socket y E/S de terminal para proporcionar independencia de dispositivo. Para leer y escribir en un dispositivo a nivel de aplicación, el programa llama a una función para abrir el dispositivo, que puede ser 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 están mediadas por el sistema operativo que a su vez presenta una interfaz abstracta que permite al programador leer y escribir bytes desde/hacia el dispositivo. Luego, el sistema operativo realiza la transformación real necesaria para leer y escribir el flujo de bytes en el dispositivo.

Gráficos

La mayoría de las bibliotecas de gráficos, como OpenGL, proporcionan un modelo de dispositivo gráfico abstracto como interfaz. La biblioteca es responsable de traducir los comandos proporcionados por el programador en los comandos de dispositivo específicos necesarios para dibujar los elementos y objetos gráficos. Los comandos de dispositivo específicos para un trazador son diferentes de los comandos de dispositivo para un monitor CRT, pero la biblioteca de gráficos oculta la implementación y los detalles dependientes del dispositivo al proporcionar una interfaz abstracta que proporciona un conjunto de primitivas que generalmente son útiles para dibujar objetos gráficos.