Capa de abstracción (programación)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 26 de febrero de 2020; las comprobaciones requieren 3 ediciones .

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.

Ejemplos

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".

Jerarquía de niveles

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.

Abstracciones con fugas

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.

Arquitectura informática

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]

Notas

  1. Evans E. Capas de responsabilidad // Diseño basado en dominios: abordar la complejidad en el corazón del software. - Addison-Wesley, 2003. - ISBN 978-0-321-12521-7 .
  2. Diomidis Spinellis. Otro nivel de indirección Archivado el 26 de octubre de 2011 en Wayback Machine . En Andy Oram y Greg Wilson, editores, Beautiful Code: Los principales programadores explican cómo piensan , capítulo 17, páginas 279-291. O'Reilly and Associates, Sebastopol, CA, 2007.
  3. Spolsky, Joel La ley de las abstracciones con fugas (2002). Fecha de acceso: 22 de septiembre de 2010. Archivado desde el original el 20 de noviembre de 2016.
  4. Spolsky, Joel La ley de las abstracciones con fugas (enlace inaccesible) . Consultado el 15 de septiembre de 2014. Archivado desde el original el 28 de septiembre de 2014. 
  5. Andrew S. Tanenbaum . Organización informática estructurada  (neopr.) . — Acantilados de Englewood, Nueva Jersey: Prentice-Hall , 1979. - ISBN 0-13-148521-0 .

Enlaces