stringtranslate.com

Dependencia circular

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

Descripción general

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] Sin embargo, los módulos mutuamente recursivos son algo comunes en la programación funcional , donde a menudo se fomentan las definiciones inductivas y recursivas.

Problemas

Las dependencias circulares pueden causar muchos efectos no deseados en los programas de software. El problema más grave desde el punto de vista del diseño de software es el estrecho acoplamiento de los módulos mutuamente dependientes, que reduce o imposibilita la reutilización por separado de un único módulo.

Las dependencias circulares pueden causar 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 dar lugar a recursiones infinitas u otros fallos inesperados.

Las dependencias circulares también pueden causar pérdidas de memoria al impedir que ciertos recolectores de basura automáticos (aquellos que utilizan el conteo de referencias ) desasignen objetos no utilizados.

Causas y soluciones

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

Se pueden introducir dependencias circulares al implementar la funcionalidad de devolución de llamadas . Esto se puede evitar aplicando patrones de diseño como el patrón de observador .

Véase también

Referencias

  1. ^ ab Lakos, John (20 de julio de 1996). Diseño de software en C++ a gran escala (1.ª ed.). Boston: Addison-Wesley. ISBN 9780201633627.
  2. ^ Melton, Hayden; Tempero, Ewan (12 de enero de 2007). "Un estudio empírico de ciclos entre clases en Java". Ingeniería de software empírica . 12 (4): 389–415. CiteSeerX 10.1.1.141.5362 . doi :10.1007/s10664-006-9033-1. ISSN  1382-3256. S2CID  11134940. 
  3. ^ JDepend para Java