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 16-04-2006
melon melon is offline
Miembro
 
Registrado: ene 2005
Posts: 13
Poder: 0
melon Va por buen camino
referencia circular

Saludos, a ver, antes de nada decir que soy un poco novato en la POO.
Bueno, tengo dos clases, cada una definida en una unidad distinta. El caso es que cada una de ellas debería contener una referencia a la otra en la declaración, por lo que tengo que poner en uses la unidad correspondiente, y me dice que que hay referencia circular entre ambas unidades. Hasta ahora para evitar esto lo que había venido haciendo era usar el uses de implementation, así se evitaba lo de la referencia circular, pero ahora no puede ser.
Por ejemplo, para que quede más claro:
En la primera unidad:
Código Delphi [-]
unit Unidad1
interface
uses unidad2
type
TClase1 =Class
     variable:TClase2
 end;
Y en la segunda unidad
Código Delphi [-]
unit Unidad2
interface
uses unidad1
type
TClase2 =Class
     variable:TClase1
 end;
Bueno, muchas gracias por adelantado, a ver si me pueden ayudar que es bastante urgente.

Última edición por melon fecha: 16-04-2006 a las 01:35:14.
Responder Con Cita
  #2  
Antiguo 16-04-2006
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
Pues no, en Delphi no se puede hacer esto. Una forma de darle la vuelta al problema podría ser insertar clases abstractas en una unidad común:

Código Delphi [-]
unit Comun;

interface

type
  // referencia adelantada
  TClaseAbstracta2 = class;

  TClaseAbstracta1 = class
     variable: TClaseAbstracta2;
  end;

  TClaseAbstracta2 = class
     variable: TClaseAbstracta1;
  end;

Entonces las clases TClase1 y TClase2 las derivas de éstas, cada una ya en su propia unidad:

Código Delphi [-]
unit Unit1;

interface

uses Comun;

type
  TClase1 = class(TClaseAbstracta1)
  end;

Código Delphi [-]
unit Unit2;

interface

uses Comun;

type
  TClase2 = class(TClaseAbstracta2)
  end;

Las clases abstractas en la unidad común simplemente declaran los métodos a usar con las directivas virtual y abstract de manera que no requieres poner nada en la sección implementation y entonces te queda una unidad bastante pequeña. La implementación real se hace en unidades separadas manteniendo, hasta cierto punto, la separación de clases que originalmente se quería.


Cita:
Empezado por melon
a ver si me pueden ayudar que es bastante urgente
Trata por favor de evitar este tipo de requerimientos. Aunque es entendible la urgencia que a veces tenemos, toma en cuenta que aquí cada cual ayuda en su tiempo disponible y sin ninguna obligación.

// Saludos
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
Como puedo librarme de la referencia circular? Lionheart OOP 2 13-12-2005 13:58:33
lo que necesito es ayuda en el TDA de una lista doblemente enlazada circular program_tda Varios 12 17-02-2004 08:45:35
variables por referencia shaktale Varios 2 11-06-2003 12:24:59
Problema con referencia foranea ! erickperez6 Firebird e Interbase 10 12-05-2003 17:52:21


La franja horaria es GMT +2. Ahora son las 09:27:59.


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