Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 02-11-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.437
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por DANY
...La idea es aprovechar al maximo el polimorfismo de las clases en la herencia visual, para ello hago lo siguiente...
Me da la impresión de que el polimorfismo es otra cosa, pero bueno, creo que te he entendido.

Cita:
Empezado por DANY
... Hasta ahi todo magnifico, pero que hago cuando por ej tengo que recorrer una grilla e ir insertando registros...

Código Delphi [-]
      THijo (Registro).GetDatos (...)
     //este es el problema como hago referencia a la clase hija correcta?
   ...

El problema es que recien hay es donde se los valores que le tengo que pasar a la funcion GetDatos dado que depende de lo cargado por el usuario en la grilla. Como solucion estoy desaprovechando la potencia del polimorfismo y estoy replicado codigo cada vez que me encuentro con una grilla.
Yo lo resuelvo utilizando un apuntador a la clase y métodos de clase; Ese apuntador debes pasarlo al formulario de Grid genérico, de esa forma puedes acceder al método de cada clase sin definirla en ese punto. Creo que mejor con un ejemplo:

Código Delphi [-]
   
   TBase = class(TObject)
     public
       class function GetDatos():String; virtual; abstract;
     end;
   
     THijo1 = class(TBase)
     public
       class function GetDatos():String; override;
     end;
   
     THijo2 = class(TBase)
     public
       class function GetDatos():String; override;
     end;
   
     TBaseClass = class of TBase;
   
   ... (implementación)
   
   { THijo1 }
   Class function THijo1.GetDatos: String;
   begin
     (NOTA1)
     Result := 'Hijo1';  // tu función GetDatos
   end;
   
   { THijo2 }
   Class function THijo2.GetDatos: String;
   begin
     (NOTA2)
     Result := 'Hijo2';
   end;

Cuando llames al formulario de Grid, como tú bien dices no puedes hacer referencia a las clases THijo1, THijo2,...
Lo que debes hacer es pasar la referencia a la Clase:

Código Delphi [-]
     // (LLAMADA1)
     Form2.AClass := THijo1;
     Form2.Show;
   ...
     // (LLAMADA2)
     Form2.AClass := THijo2;
     Form2.Show;
   
   y el el formulario habrás definido la propiedad como:
   
     public
       property AClass:TBaseClass read FAClass write FAClass;

De ésta forma en ese formulario puedes ejecutar la siguiente línea:

Código Delphi [-]
  
  El equivalente a la línea
  //      THijo (Registro).GetDatos (...)
  será ésta:
      Str := AClass.GetDatos;
   
     // en el caso de la LLAMADA1 obtendrás el string: Hijo1  por (NOTA1)
     // en el caso de la LLAMADA2 obtendrás el string: Hijo2  por (NOTA2)
   

Espero haberme explicado bien.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 30-05-2007 a las 14:17:44.
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 06:20:24.


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