Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Novato, ayuda con polimorfismo por favor (https://www.clubdelphi.com/foros/showthread.php?t=19941)

davitcito 31-03-2005 18:27:32

Novato, ayuda con polimorfismo por favor
 
Hola, es mi primer mensaje en este foro, lei hace poco que habia un articulo referente al poliformismo que se llamaba "Historias Polimórficas" de JMR, pero no logro encontrarlo en la sección articulos. Si me pudieran decir donde ubicarlo se los agradecería mucho.
Por otro lado, tengo una problema acerca de este tema, es mas bien un trabajo q me han dejado pero no le encuentro la lógica. El enunciado es el siguiente:
Se desea almacenar la información de personas en tres tablas (mujeres, hombres y niños) conteniendo los nombres y edades.

Para cada par (Nombre, tipo) verificar en la tabla correspondiente si el nombre existe o no, de tal manera a recuperar su edad.

Considere que el tipo indica si es hombre, mujer o niño.

Sugerencia: use una jerarquía que agrupe las clases Hombre, Mujeres y Niños en una clase base.

Se supone que las tres tablas que haria cada una sería para hombres, mujeres y niños y a su vez cada una tendría 2 campos (nombre y edad)
Pero lo que no entiendo bien es a que se refiere cuando dice CADA PAR ? Si alguien me pudiera ayudar se lo agradecería mucho, y disculpen si es que es muy tonta la pregunta, pero en verdad la necesito. Saludos.

mamcx 31-03-2005 19:26:46

Hacer tres tablas es una perdida de esfuerzo. No hay datos diferenciadores entre Hombre, Mujer, Niño y lo unico que divide es el tipo de persona. Asi que con 1 sola tabla sale derecho pa' pintura.

La pregunta es un poco extraña... El par es el nombre y el tipo, pero entonces se asume que es posible que existan dos personas del mismo nombre pero no dos personas con el mismo nombre y tipo?... En fin...

La Jerarquia es muy simple:

TPersona
THombre
TMujer
TNiño

y TPersona.TipoPersona = Tipo junto a un (TPersona.ObtenerPersona as Tipo) haria el trabajo, junto a un CASE dentro de ObtenerPersona..

davitcito 31-03-2005 20:45:14

hey gracias por el dato mamcx. :cool:

roman 31-03-2005 21:56:16

Pero, ¿y dónde queda el polimorfismo?

La verdad es que la pregunta es ciertamente rara, vamos, como que el profesor no pensó mucho en el ejercicio.

Pero si se trata de usar polimorfismo pues el tener una propiedad TipoPersona en la clase base que es tratada mediante un case es más bien antipolimórfico (si vale el témino) y hace innecesarias las clases descendientes.

Si el objetivo es el polimorfismo creo que haría algo así:

Código Delphi [-]
TPersona = class
public
  procedure Buscar(Nombre: String); virtual; abstract;
end;

THombre = class(TPersona)
public
  procedure Buscar(Nombre: String); override;
end;

TMujer = class(TPersona)
public
  procedure Buscar(Nombre: String); override;
end;

TNiño = class(TPersona)
public
  procedure Buscar(Nombre: String); override;
end;

Cada clase descendiente implementa el método Buscar consultando la tabla apropiada.

¿En dónde entra el polimorfismo? Pues si tienes un objeto Persona, sin importar is es THombre, TMujer o TNiño, su método Buscar te dará la edad y demás datos correspondientes. Es decir, en la llamada

Persona.Buscar

el polimorfismo es el que se encarga de buscar en la tabla apropiada en lugar de una sentencia case .

// Saludos

davitcito 01-04-2005 01:32:28

pues ciertamante, la pregunta es bastante rara, como q no se entiende, oye pero gracias, he estado rompiendome la cabeza de como meterle el polimorfismo al problema, pero justo has dado en el clavo, usando la anulacion puedo usar metodo del padre para los hijos. Voy a seguir avanzando y en caso tenga dudas voy a seguir posteando, desde ya muchas gracias por vuestra colabaracion. :)


La franja horaria es GMT +2. Ahora son las 20:48:22.

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