Capa de abstracción
# Capa de abstracción

Una capa de abstracción (o nivel de abstracción) es una forma de ocultar los detalles de implementación de ciertas funcionalidades. Puede usarse para definir sistemas asociados que implican una separación entre procesos tal como el cerebro humano y el lenguaje simbólico o cultura; el software computacional y el hardware que lo sustenta; el frenado en un auto mediado por un sistema de control antibloqueo.

Quizás los modelos de software más conocidos que utilizan capas de abstracción son el modelo OSI de 7 capas para protocolos de red, la biblioteca gráfica OpenGL y el modelo de flujo de bytes de entrada/salida creado para Unix y adoptado por MS-DOS, Linux y muchos otros sistemas operativos.

En el sistema operativo Unix, la mayoría de los tipos de operaciones de entrada y salida son considerados como flujos de bytes que deben ser leídos a o escritos en un dispositivo. Este modelo de flujo de bytes es utilizado para la E/S de ficheros, sockets y terminales para conseguir la independencia de dispositivos. Para poder leer y escribir en dispositivos a nivel de aplicación, el programa llama a una función para abrir el dispositivo que puede ser real como un terminal o virtual como un puerto de red o un fichero de un sistema de ficheros. Las características físicas del dispositivo son ocultadas por el sistema operativo, que presenta una interfaz abstracta la cual permite al programador leer y escribir bytes de o al dispositivo. Entonces el sistema operativo realiza las transformaciones necesarias para leer dicho flujo de bytes.

La mayoría de las bibliotecas gráficas tales como OpenGL proveen modelo de dispositivo gráfico abstracto como interfaz. La biblioteca es la responsable de traducir los comandos suministrados por el programador en los comandos específicos del dispositivo necesarios para dibujar elementos y objetos. Los comandos específicos de un plotter son diferentes a los de un monitor CRT, pero la biblioteca gráfica oculta la implementación y los detalles dependientes del dispositivo gracias a una interfaz abstracta que suministra un conjunto de tipos primitivos útiles para el dibujo de objetos gráficos.

En informática, un nivel de abstracción es una generalización de un modelo o algoritmo, totalmente independiente de cualquier implementación específica. Estas generalizaciones surgen de similitudes que están muy bien encapsuladas mediante modelos que expresan similitudes presentes en varias implementaciones específicas. La simplificación suministrada por una buena capa de abstracción permite una fácil reutilización.

Una buena abstracción generalizará todo aquello que puede abstraerse, mientras que permitir conceptos específicos puede hacer que falle. Una aplicación exitosa de la abstracción requiere estudiar detalladamente cada problema.

Frecuentemente las capas de abstracción pueden organizarse de manera jerárquica. El modelo de red ISO-OSI comprende siete capas de abstracción. Cada capa del modelo encapsula y direcciona una parte distinta de las necesidades de muchas de las comunicaciones digitales reduciendo la complejidad de las soluciones de ingeniería.

Un famoso aforismo informático de Butler Lampson dice: Todo problema en computación puede ser resuelto añadiendo un nivel de indirección; a veces esto es modificado a propósito cambiando "indirección" por "abstracción".

## Arquitectura de computadores

En arquitectura de computadores, un sistema suele representarse con cuatro niveles de abstracción: hardware, kernel, sistema operativo y aplicaciones

## Bibliografía

* Tanenbaum, Andrew S. (1979). Structured Computer Organization (en inglés). Englewood Cliffs, Nueva Jersey: Prentice-Hall. ISBN 0-13-148521-0.
