Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-01-2009
mscblazer mscblazer is offline
Registrado
 
Registrado: ene 2009
Posts: 3
Poder: 0
mscblazer Va por buen camino
Dudas con patrón visitante

Cuando programo usando el patrón visitante la aplicación me genera un error de referencia cíclica, puesto que tengo 2 units cuyas clases se referencian mutuamente.

¿Cómo puedo corregir este problema en Delphi?

Gracias adelantadas.
Responder Con Cita
  #2  
Antiguo 09-01-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En Delphi dos unidades no pueden referenciarse mutuamente desde su sección interface, pero sí desde su sección implementation.

// Saludos
Responder Con Cita
  #3  
Antiguo 09-01-2009
mscblazer mscblazer is offline
Registrado
 
Registrado: ene 2009
Posts: 3
Poder: 0
mscblazer Va por buen camino
Ante todo gracias por tu rápida respuesta, pero cuando programas usando el patrón visita necesitas incluir las units en la interfaz.

Por ejemplo en C++ tampoco puedes hacerlo porque se crearía una refrencia cíclica también, pero existe un recurso.

Un fichero tu lo incluyes así.
#include "NombreFichero"
Pero para evitar la referencia cíclica usarías

class NombreFichero
Esto es como si hicieras un forward con las clases.

Supongo que en Delphi debe haber un recurso parecido para lograrlo.

Gracias.
Responder Con Cita
  #4  
Antiguo 09-01-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En Delphi, como dices, hay un recurso similar usando la directiva {$I archivo.inc}, pero, realmente no tendrás dos unidades distintas, simplemente estás incluyendo un archivo en otro, de forma que es como si el contenido del archivo externo lo hubieras escrito en el punto donde está la directiva.

Por otro lado, este problema puede resolverse definiendo clases abstractas en una unidad:

Código Delphi [-]
// patronvisitante.pas

type
  TVisitante = class;

  TElemento = class
    procedure Aceptar(Visitante: TVisitante); virtual; abstract;
  end;

  TVisitante = class
    procedure Visitar(Elemento: TElemento); virtual; abstract;
  end;

En esta unidad no implementas nada, pero ya puedes incluirla en las unidades de las clases descendientes:

Código Delphi [-]
unit UnElemento;

interface

uses patronvisitante;

type
  TUnElemento = class(TElemento)
    procedure Aceptar(Visitante: TVisitante); override;
  end;

implementation

procedure TUnVisitante.Aceptar(Visitante: TVisitante);
begin
  ...
end;

end.

Código Delphi [-]
unit UnVisitante;

interface

uses patronvisitante;

type
  TUnVisitante = class(TVisitante)
    procedure Visitar(Elemento: TElemento); override;
  end;

implementation

procedure Visitar(Elemento: TElemento);
begin
  ...
end;

end.

// Saludos
Responder Con Cita
  #5  
Antiguo 09-01-2009
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Puedes implementar el Visitor Pattern en una misma unidad sin usar una clase en cada "libreria", ahora no es lo mismo un "uses" de Delphi a un "include" de C; que a proposito en Delphi seria algo como {$i archivo.ext}.
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #6  
Antiguo 09-01-2009
mscblazer mscblazer is offline
Registrado
 
Registrado: ene 2009
Posts: 3
Poder: 0
mscblazer Va por buen camino
Muchas gracias a todos por la valiosa ayuda. particularmente a Roman
Pude resolver sin problemas

Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Un patrón de diseño heteredoxo puede sarlvarte el pellejo. AzidRain La Taberna 0 25-05-2008 02:35:36
Patrón harpo OOP 1 16-03-2008 23:51:49
Patron GoF: Factoría ¿Como y cuando se usa? Delphius OOP 2 26-12-2007 06:37:32
Patrón observador, attach, notify,update ... adpa OOP 5 22-01-2006 01:07:40
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54


La franja horaria es GMT +2. Ahora son las 20:43:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi