dependencia circular


En ingeniería de software , una dependencia circular es una relación entre dos o más módulos que, directa o indirectamente, dependen entre sí para funcionar correctamente. Estos módulos también se conocen como mutuamente recursivos .

Las dependencias circulares son naturales en muchos modelos de dominio donde ciertos objetos del mismo dominio dependen unos de otros. [1] Sin embargo, en el diseño de software , las dependencias circulares entre módulos de software más grandes se consideran un antipatrón debido a sus efectos negativos. [1] A pesar de esto, se ha descubierto que tales dependencias circulares (o cíclicas) están muy extendidas entre los archivos fuente del software del mundo real. [2] Los módulos mutuamente recursivos son, sin embargo, algo comunes en la programación funcional , donde a menudo se fomentan las definiciones inductivas y recursivas.

Las dependencias circulares pueden causar muchos efectos no deseados en los programas de software. Lo más problemático desde el punto de vista del diseño de software es el estrecho acoplamiento de los módulos mutuamente dependientes que reduce o hace imposible la reutilización por separado de un solo módulo.

Las dependencias circulares pueden provocar un efecto dominó cuando un pequeño cambio local en un módulo se propaga a otros módulos y tiene efectos globales no deseados (errores de programa, errores de compilación). Las dependencias circulares también pueden generar recurrencias infinitas u otros errores inesperados.

Las dependencias circulares también pueden causar fugas de memoria al evitar que ciertos recolectores de basura automáticos muy primitivos (aquellos que usan el conteo de referencias ) desasignen objetos no utilizados.

En diseños de software muy grandes, los ingenieros de software pueden perder el contexto e introducir dependencias circulares sin darse cuenta. Existen herramientas para analizar software y encontrar dependencias circulares no deseadas. [3]