Ver Mensaje Individual
  #1  
Antiguo 24-11-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Reputación: 21
AzidRain Va camino a la fama
OOP y referencias circulares

Codificando un diagrama UML me paso algo raro con Delphi al tratar de hacer que las clases interactuen entre si ya me jaló.

La idea es para un catalogo de cuentas, la idea es la siguiente:

tengo la clase Catalogo que es diagamos el "corazon" de todo, a su vez esta clase contiene una clase TVentanaCat que es un TForm, y una clase TCuenta (TOBject). La interaccion de TCatalogo con TCuenta no tiene problema ya que TCatalogo se encarga de crear, manipular y destruir a TCuenta sin problema.

Ahora bien, TVentanaCat, es la parte "visual" de TCatalogo, o sea la forma que muestra en forma grafica las cuenta con la que esta trabajando en ese momento. El problema es que como TVentanaCat es parte de TCatalogo, para usarla debo poner un uses en TCatalogo. Por su parte TVentanaCat le tiene que pasar a TCatalogo los mensajes de lo que el usuario haya solicitado para que lo ejecute (recordemos que TVentanaCat solo es el "cascaron", no sabe como manipular una TCuenta). Ahi es donde entra el problema, para poder accesar a TCatalogo tengo que añadir un uses pero como en TCatalogo a su vez referencía TVentanaCat se crea una referencia circular que no es posible compilar.

La solución puede ser que TCatalogo y TVentanaCat sean el mismo objeto, es decir, incluir todo el código para manipular TCuenta dentro de TVentanaCat...pero no me parece muy elegante.

Otra opción es hacer a la inversa, que TVentanaCat sea la clase de más alto nivel y que contenga a TCatalogo para manipularlo...pero tampoco se me hace muy elegante.

En Java si puede hacerse como lo estoy tratando sin problemas, pero no quiero usarlo porque swing no ofrece tanta calidad como las VCL y otros componentes que ya tengo de Delphi.

Siempre he diseñado usando programación mixta: procedural y OOP, pero ya me quiero "ordenar" y usar solo OOP.


Como me recomiendan hacer el diseño?
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita