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 08-12-2005
liriko liriko is offline
Miembro
 
Registrado: nov 2005
Posts: 27
Poder: 0
liriko Va por buen camino
polimorfismo

Siento mi ignorancia,pero no e entendido bien eso.

De lo que se trata el problema que tengo que hacer es que yo almaceno los objetos en un Array polimorfico, luego tengo que mostrar esos datos. Lo de los parametros "entendibles", a que te refieres?
Responder Con Cita
  #2  
Antiguo 08-12-2005
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
Así es. Suponte que tienes un arreglo:

Código Delphi [-]
Objetos: array[1..N] of TObjetoPadre;

Si TObjetoPadre tiene un método virtual Mostrar(...), puedes recorrer polimórficamente el arreglo:

Código Delphi [-]
for I := 1 to N do
  Objetos[i].Mostrar(???);

sin importar si algunos de los objetos son de clases descendientes de TObjetoPadre. El polimorfismo consiste en que se escoge el método adecuado dependiendo de la clase real del objeto.

Pero Mostrar no puede cambiar de parámetros en los descendientes porque entonces, ¿cuáles de ellos especificarías en el código de arriba?

Pero los parámetros de un método (como de cualquier procedimiento) sirven para pasar información.

Suponte que originalmente querías algo como:

Código Delphi [-]
procedure TObjetoPadre.Mostrar(P1, P2);
procedure TObjetoHijo.Mostrar(P1, P2, H1);
procedure TObjetoNieto.Mostrar(P1, P2, H1, N1, N2, N3);

Es decir, los parámetros P son válidos para TObjetoPadre y todos sus descendientes, los parámetros H son válidos para TObjetoHijo y todos sus descendiente y los parámetros N son válidos para TObjetoNieto y todos sus descendientes.

Entonces convierte esos parámetros en propiedades de tus objetos y no pongas parámetros en Mostrar o sólo los de la clase raíz:

Código Delphi [-]
TObjetoPadre = class
  property P1;
  property P2;

  procedure Mostrar; virtual;
end;

TObjetoHijo = class(TObjetoPadre)
  property H1;

  procedure Mostrar; override;
end;

TObjetoNieto = class(TObjetoHijo)
  property N1;
  property N2;
  property N3;

  procedure Mostrar; override;
end;

Habría que ver cómo llenas el arreglo pero en algún momento tienes que construir los objetos que le pones. Apenas los construyas, les asignas valores a sus propiedades específicas según la clase que se use:

Código Delphi [-]
var
  H: TObjetoHijo;

begin
  H := TObjetoHijo.Create;

  H.P1 := ValorDeP1;
  H.P2 := ValorDeP2;
  H.H1 := ValorDeH1;

  Objetos[i] := H;
end;

Entonces, el método Mostrar específico de cada clase usara las propiedades como antes usaba los parámetros. Pero ahora Mostar ya no tiene parámetros, es homogéneo para toda la jerarquía de clases y puedes llamarlo polimórficamente sin problemas:

Código Delphi [-]
for I := 1 to N do
  Objetos[i].Mostrar;

// Saludos

Última edición por roman fecha: 08-12-2005 a las 17:49:14.
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


La franja horaria es GMT +2. Ahora son las 03:13:04.


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