Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cómo hacer referencia a una clases desde otra que se encuentra dentro de la primera? (https://www.clubdelphi.com/foros/showthread.php?t=81116)

TecnoBestia 11-10-2012 23:01:15

¿Cómo hacer referencia a una clases desde otra que se encuentra dentro de la primera?
 
Hola a todos.

Tengo una duda, que posiblemente sea fácil para muchos de ustedes pero que me ha generado algunos dolores de cabeza ya que no he podido encontrar información al respecto. De hecho no sé si sea posible hacer lo que quiero.

Tengo dos clases definidas como sigue:

Código Delphi [-]

clsHormiga=class(TObject) 
  private
    function DistanciaAlCudrado(k_Individuo:Integer; k_CG:Integer):Double;
  protected
  public

    ListaDeNodosAClasificar:VectorINT;                           

    MatrizCG:MatrizIR;                                         
                                                             
    VCardinalidades:VectorINT;                             

    VClasificacion:VectorINT;                                

    ValorDeLaInerciaActual:Double;





    {Definición de procedimientos y funciones}

    procedure IniciarCG;
    procedure CamineYClasifique(NumeroNodosPorClasificar:Integer);
    procedure CalcularCG_dada_Clasificacion;
    procedure DeterminarVClasificacionYInercia;
    procedure CalcularInercia_dados_CG_y_clasificacion;
    procedure Intesificar_Rastro_Feromona;

  published
  end;

  //*******************************************************************************************
  //############################    Objeto clsColonia  ########################################
  //*******************************************************************************************
  clsColonia=class(TObject)
  private
  protected
  public
    
    Matriz_FeromonaIndi_CG:MatrizIR;        

    MejorInerciaDeLaHistoria:Double;         

    MejorHormiga:clsHormiga;                 

    VectorDeHormigas:array of clsHormiga;  // Note que en este paso, se define un vector de la otra clases.   

    Cantidad_de_Hormiga:Integer;              

    Matriz_FeromonaAux:MatrizIR;              


    constructor Create(NumHormigas:Integer);
    procedure Actualizar_el_rastro_de_la_feromona;
    procedure ContruirClasificacion();

  published
  end;

En la primera clases clsHormiga hay un procedimiento que se llama CalcularCG_dada_Clasificacion; el cual debe usar los datos y modificar la matriz Matriz_FeromonaIndi_CG
que está en la clase clsColonia. Mi pregunta es ¿Cómo se puede hacer referencia a dicha matriz desde dentro de la clases clsHormiga?

Nota:

Código Delphi [-]
type
  VectorIR=array of Double;    //Tipo de Vector de Reales
  VectorINT=array of Integer;  //Tipo Vector de Enteros
  MatrizIR=array of VectorIR;  //Tipo Matriz de reales, para la Tabla de Datos
  MatrizINT=array of VectorINT; //Tipo de matriz de enteros.

roman 11-10-2012 23:06:27

Me da la impresión de que a tu clase Hormiga le hace falta una propiedad que referencie a la colonia a la que pertenece. Entonces tus cálculos serán sobre la matriz de esa colonia.

// Saludos

TecnoBestia 13-10-2012 04:37:41

Gracias por contestar pero no me queda claro.
 
Gracias por responder, pero no me queda claro, podría hacerme el favor de indicarme como sería lo de la propiedad. No sé que debo hacer. y no sé lo que me hace falta. Gracias de nuevo.

TecnoBestia 13-10-2012 17:59:31

Como se define la propiedad para hacer referencia la matriz
 
Gracias por responder:

Cita:

Empezado por roman (Mensaje 446902)
Me da la impresión de que a tu clase Hormiga le hace falta una propiedad que referencie a la colonia a la que pertenece. Entonces tus cálculos serán sobre la matriz de esa colonia.

// Saludos

Me gustaría que me indicará como debo hacerlo, nunca he visto nada parecido y no sé como y donde definir una propiedad que me haga la referencia. Podrías por favor ser explícito, algunos somos de mente más dura.
Gracias de nuevo por responder.

TecnoBestia 13-10-2012 18:34:21

No sé como hacer lo que me dices. Gracias por responder, pero no me queda claro que es lo que debo hacer, como genero dicha propiedad. Le agradecería que me pueda ayudar con un ejemplo o una explicación de lo que debo hacer. Gracias de nuevo por responder.

Saludos...

Casimiro Notevi 13-10-2012 18:56:48

Recuerda nuestra guía de estilo, gracias por tu colaboración :)

Ten paciencia, la gente no está aquí pendiente de contestar al momento, espera que se conecte Román, que vea el mensaje y que decida contestar.

roman 14-10-2012 22:03:45

Vamos a ver. Una clase no es lo mismo que un objeto. Una clase no es sino el "molde" para hacer objetos. Entonces, un objeto de la clase Hormiga, no puede acceder, así sin más, a propiedades de la clase Colonia, pues, ¿de qué Colonia en particular se trata?

Es de suponerse que una hormiga pertenece a una colonia y puede haber muchas colonias. Entonces, cada hormiga debbe especificar a qué colonia pertenece. La manera de hacer esto es agregando a la clase Hormiga un apropiedad de tipo Colonia:

Código Delphi [-]
TColonia = class; // necesario para que el compilado sepa qué la declaración de TColonia viene después

THormiga = class
public
  Colonia: TColonia; // Colonia a la que pertenece la hormiga
  procedure CalcularCG_dada_Clasificacion;
end;

TColonia = class
public
  Matriz_FeromonaIndi_CG:MatrizIR;
end;

El método CalcularCG_dada_Clasificacion de la clase Hormiga podrá hacer referencia a la colonia a la que pertenece la hormiga:

Código Delphi [-]
procedure THormiga.CalcularCG_dada_Clasificacion;
begin
  Self.Colonia.Matriz_FeromonaIndi_CG ...
end;

Dependiendo de cómo construyas tus objetos, tendrás que asignar la colonia a cada hormiga. Si la colonia ya existe podrías hacerlo en el constructor de la clase Hormiga, pasando la colonia como parámetro:

Código Delphi [-]
constructor THormiga(AColonia: TColonia);
begin
  inherited;
  Self.Colonia := AColonia;
end;

Por último, nota que, aun cuando puedes nombrar tus clases de cualquier manera, yo he puesto el prefijo T en lugar de cls, ya que es lo que se acostumbra en delphi.

// Saludos

TecnoBestia 16-10-2012 03:39:09

Muchas gracias, me ha quedado muy claro. Le agradezco el tiempo y la paciencia.

Saludos de corazón.


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

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