Me encontré con esto un par de veces, y me pregunté cuál es la manera OO de resolver referencias circulares. Con eso quiero decir que la clase A tiene la clase B como miembro, y B a su vez tiene la clase A como miembro.¿Cómo resolver los cruces de referencia en OOP?
Un ejemplo de esto sería la clase Persona que tiene cónyuge Persona como miembro.
Person jack = new Person("Jack");
Person jill = new Person("Jill");
jack.setSpouse(jill);
jill.setSpouse(jack);
Otro ejemplo serían las clases de productos que tienen alguna colección de otros productos como miembro. Esa colección podría ser, por ejemplo, productos en los que las personas interesadas en este producto también podrían estar interesadas, y queremos mantener esa lista por base de producto, no en los mismos atributos compartidos (por ejemplo, no queremos simplemente mostrar todos los demás productos en la misma categoría).
Product pc = new Product("pc");
Product monitor = new Product("monitor");
Product tv = new Product("tv");
pc.setSeeAlso({monitor, tv});
monitor.setSeeAlso({pc});
tv.setSeeAlso(null);
(estos productos son sólo para hacer un punto, el asunto no se trata de tiempo o no ciertos productos podría relacionarse entre sí)
¿Sería esto un mal diseño de programación orientada a objetos en general? ¿Deberían/deberían todos los lenguajes OOP permitir esto, o es solo una mala práctica? Si es una mala práctica, ¿cuál sería la mejor manera de resolver esto?
@Jon Limjap: Gracias por corregir el error tipográfico. – tehvan