Articulo de referencia

dependencia circular

En ingeniería de software , una dependencia circular (o cíclica ) es una relación entre dos o más módulos que dependen directa o indirectamente unos de otros para funcionar corr...

En ingeniería de software , una dependencia circular (o cíclica ) es una relación entre dos o más módulos que dependen directa o indirectamente unos de otros para funcionar correctamente. Estos 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 encontrado 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.

Problemas

Las dependencias circulares pueden causar muchos efectos indeseados en los programas informáticos. Desde el punto de vista del diseño de software, el problema más grave reside en el acoplamiento estrecho de los módulos interdependientes, lo que reduce o imposibilita la reutilización independiente de un mismo 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 consecuencias globales no deseadas (errores de programación, 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 provocar fugas de memoria al impedir que ciertos recolectores de basura automáticos (aquellos que utilizan el conteo de referencias ) liberen los 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 ]

Al implementar la funcionalidad de devolución de llamada , pueden surgir dependencias circulares . Esto se puede evitar aplicando patrones de diseño como el patrón observador .

Véase también

Referencias

  1. 1 2 Lakos, John (1996-07-20). Diseño de software a gran escala en C++ (1.ª  ed.). Boston: Addison-Wesley. ISBN 9780201633627.
  2. Melton, Hayden; Tempero, Ewan (2007-01-12). "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