Inversión de abstracción

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

En programación informática, la inversión de abstracción es un antipatrón que surge cuando los usuarios de una construcción necesitan funciones implementadas dentro de ella pero no expuestas por su interfaz. El resultado es que los usuarios vuelven a implementar las funciones requeridas en términos de la interfaz, que a su vez utiliza la implementación interna de las mismas funciones. Esto puede dar lugar a la implementación de funciones de nivel inferior en términos de funciones de nivel superior, de ahí el término "inversión de abstracción".

Los posibles efectos nocivos son:

  • El usuario de tal función reemplementada puede subestimar seriamente sus costos de funcionamiento.
  • El usuario del constructo se ve obligado a ocultar su implementación con detalles mecánicos complejos.
  • Muchos usuarios intentan resolver el mismo problema, aumentando el riesgo de error.

Ejemplos

Los supuestos ejemplos de círculos de programación profesionales incluyen:

  • En Ada, elección de la Rendezvous construir como una sincronización primitiva programadores forzados para implementar construcciones más simples como semaphores sobre la base más compleja.
  • En Applesoft BASIC, la aritmética de entero se implementó en la parte superior de la aritmética de punto flotante, y no hubo operadores de bitwise y ningún soporte para la blitting de gráficos de raster (aunque el lenguaje soportaba gráficos vectoriales en el hardware de Raster de Apple II). Esto causó juegos y otros programas escritos en BASIC para correr más lento.
  • Al igual que Applesoft BASIC, Lua tiene un tipo de punto flotante como su único tipo numérico cuando se configura para computadoras de escritorio, y no tenía operadores bitwise antes de Lua 5.2.
  • Crear un objeto para representar una función es engorroso en lenguajes orientados a objetos como Java y C++ (especialmente antes de C+11 y Java 8), en los que las funciones no son objetos de primera clase. En C++ es posible hacer un objeto 'callable' sobrecargando el () operador, pero es todavía a menudo necesario implementar una nueva clase, como el Functores en el STL. (C++11's lambda function makes it much easier to create an object representing a function.)
  • Tom Lord ha sugerido que el sistema de control de la versión de Subversion paga la inversión de abstracción de implementar una base de datos de escritura única en una base de datos de lectura/escritura con mal desempeño.
  • El uso de procedimientos almacenados para manipular los datos en una base de datos relacional, sin conceder a los programadores el derecho a implementar tales procedimientos, conduce a la reaplicación de las consultas fuera de la base de datos. Por ejemplo, grandes conjuntos de datos (en casos extremos - tablas enteras) se recogen y el filtrado real tiene lugar en el código de aplicación. Alternativamente, se actualizan miles de filas (insertadas o incluso traídas) una por una en lugar de ejecutar una consulta de fila múltiple.
  • WinUI 3 de Microsoft reemplaza sistemáticamente la barra de título de las ventanas que crea con una costumbre que ignora la configuración de color de usuario final, siempre aparece gris en su lugar. Aplicar el color elegido del usuario final a la barra de título requiere usar más código de personalización en Windows 11, y reemplazar completamente la barra de título personalizado con otra personalizada en Windows 10.

Los ejemplos que son comunes fuera de los círculos de programación profesional incluyen:

  • Utilizando funciones de búsqueda de hojas de cálculo para replicar la funcionalidad de una base de datos
  • Utilizando tipos de datos variantes como contadores de bucle en Microsoft Visual Basic donde también está disponible un tipo entero.
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save