Inversión de abstracción
La inversión de abstracción es un error de diseño del módulo de software cuando algunas funciones simples pero necesarias están cerradas para el usuario en un módulo complejo. Como resultado, el usuario del módulo se ve obligado a implementar una funcionalidad simple basada en la interfaz del módulo, a veces utilizando funciones y efectos secundarios no documentados, mientras que ya está implementado dentro del módulo. Es decir, implementar funciones de bajo nivel a partir de las de alto nivel, que es de donde proviene el término "inversión de abstracción".
Consecuencias
- Una función implementada con inversión de abstracción puede tener requisitos de memoria y tiempo de cálculo inesperadamente altos.
- Los usuarios tienen que escribir lo que ya está escrito, aumentando el riesgo de errores.
Cómo omitir
Desarrolladores de módulos:
- Si el módulo tiene funciones similares (como una sección crítica y un mutex ), averigüe cuidadosamente qué escribir desde cero y qué hacer como " envoltorio ".
- No obligues a los usuarios a escribir lo que has escrito.
Usuarios del módulo:
- Seleccione la versión del módulo. A veces, el problema solo está presente en una versión más nueva.
Mal uso del término
- Esta palabra se refiere incorrectamente a un módulo complejo con una interfaz simple (lo que suele ser deseable).
- A veces se cuelga como una "etiqueta" en la arquitectura que no le gusta.
Ejemplos
- En los lenguajes de programación orientados a objetos, las construcciones simples deben implementarse de manera compleja. Por ejemplo, para crear un hilo en Java , debe incluir una interfaz Runnabley anular el run(). A veces esto sirve como la única explicación para la clase.
- En muchas bibliotecas de gráficos de Windows , la paleta se implementa a través de WinAPI (incluso si no se usa la biblioteca WinAPI). En este caso, puede haber problemas al crear imágenes con paletas con cerca de 256 colores (porque Windows reserva algunos colores en la paleta para su propio uso).
Notas
Literatura
- Alan Burns, Andy Wellings. Programación Concurrente y en Tiempo Real en Ada. - Cambridge University Press, 2007. - Pág. 253.
Enlaces