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 03-10-2008
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Lightbulb

Gracias por los comentarios amigos, quisiera aclarar unos puntos:

Cita:
además, amigo "rgstuamigo", si te empeñas en hacer una lista enlazada "a la antigua" tendrás que implementar toda su funcionalidad a mano,... ya sabes: Insertar, eliminar, ir hacia adelante, ir hacia a atras... etc, etc... ¿Por que no intentar con los objetos que te proponen? tienen muchas ventajas y muy probablemente sean menos dolores de cabeza...
No es que quiera reinventar la rueda, sino queria ver verdaderamente las potencialidades de delphi en estas areas, como les dije yo he implementado listas simples,lista doblemente enlasadas, arboles (binarios,AVL,Rojo y Negro,B,B+)en otros lenguajes de Programacion (Java concretamente a pesar que ya algunos entas implementados en el propio lenguaje)y no he tenido muchos inconvenientes(solo inconvenientes logicos), pero de lenguaje no.
Yo creo que estas estructuras de datos son parte escencial en la vida de un programador, y quien no las conosca estaria omitiendo un gran conocimiento de la Programacion.
A veces me topado con Docentes en la Universidad (U) que te piden hacer algo pero sin utilizar lo que ya esta echo.¿Entonces que te queda?
pues hacerlo y pienso que es bueno en cierta manera por que aprendes muchos a pesar de que a veces tu trabajo se vuelve tedioso.

Cita:
Quizás rgstuamigo es un estudiante y recién está viendo sobre los tipos abstractos de datos y a modo de tarea le pidieron que implementace una lista doble encadenada.
Delphius no es que no los conosca, les repito que yo ya he implentado algo parecido, lo que deseaba saber como implementarlo en Delphi ya que nunca habia implementado listas en delphi pero me reté a poder hacerlo generico para poder utilizarla en cualquier ocasion.

Cita:
Por cierto, me parece que Tiburón ya traerá los famosos templates estilo C++ ¿no? Y, de hecho, creo que FreePascal ya los tiene.
Es exactamente lo quiero que me aclaren sobre los templates en delphi y si pueden con un ejemplito; ademas la otra duda es que si ¿Delphi en pura referencia?
Lo que dices tu Roman para que hacerlo generica , pues te puedo decir si tuvieras un lista generica la podrias usar en cualquier circunstancias que la necesites y con cualquier tipo de objeto es decir Una sola implementacion y te sirve de mucho, por eso quiero saber sobre los templates en Delphi.
Buenos esas mis aclaraciones y dudas que tenia, agradesco sus opiniones queridos amigos
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #2  
Antiguo 03-10-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

A que te refieres con que Delphi es pura referencia?

Ahora, como ya te han mencionado, Delphi cuenta con algunas clases que resuelven lo que necesitas. Checa la unidad Contnrs, ahí vienen implementadas las estructuras de pilas, colas, listas ordenadas, etc...

Ya con esas clases básicas puedes heredar para hacer lo que desees...

Ahora te pongo un ejemplo de como hacer una lista con estructuras record:

Código Delphi [-]
type
  PRegistro = ^TRegistro;

  TRegistro = record
    Data: Variant;
  end;

// Ejemplo de uso con un objeto TList:
var
  RegistroList: TList;
  Registro: PRegistro;

begin
  RegistroList := TList.Create;
  New(Registro);
  Registro^.Data := 'Hola mundo';
  RegistroList.Add(Registro);
  New(Registro);
  Registro^.Data := 23;
  RegistroList.Add(Registro);
  // Vamos a recorrer la lista:
  for I := 0 to RegistroList.Count - 1 do
    ShowMessage(PRegistro(RegistroList[i])^.Data);
  // Liberamos la memoria:
  for I := 0 to RegistroList.Count - 1 do
    Dispose(PRegistro(RegistroList[i]));
  RegistroList.Clear;
  RegistroList.Free
end;

Saludos...
Responder Con Cita
  #3  
Antiguo 03-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
A que te refieres con que Delphi es pura referencia?
creo q se refiere a que la definicion de un objeto es directamente un puntero a ese objeto...
Responder Con Cita
  #4  
Antiguo 03-10-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por coso Ver Mensaje
creo q se refiere a que la definicion de un objeto es directamente un puntero a ese objeto...
La definición de un objeto en Delphi es una clase... y esta no es un puntero a un objeto...

¿O será que te entendí mal?



Saludos...
Responder Con Cita
  #5  
Antiguo 03-10-2008
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
Cita:
Empezado por maeyanes Ver Mensaje
La definición de un objeto en Delphi es una clase... y esta no es un puntero a un objeto...
Bueno, internamente, una variable objeto es un apuntador al objeto, sólo que se omite el operador ^.

// Saludos
Responder Con Cita
  #6  
Antiguo 03-10-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por roman Ver Mensaje
Bueno, internamente, una variable objeto es un apuntador al objeto, sólo que se omite el operador ^.

// Saludos
Si, eso si lo tengo presente... es por eso que pregunté si no le entendí mal...

A lo mejor coso se refería a lo que tú comentas...


Saludos...
Responder Con Cita
  #7  
Antiguo 03-10-2008
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
Cita:
Empezado por rgstuamigo Ver Mensaje
Lo que dices tu Roman para que hacerlo generica , pues te puedo decir si tuvieras un lista generica la podrias usar en cualquier circunstancias que la necesites y con cualquier tipo de objeto es decir Una sola implementacion y te sirve de mucho, por eso quiero saber sobre los templates en Delphi.
Buenos esas mis aclaraciones y dudas que tenia, agradesco sus opiniones queridos amigos
Pues precisamente, un TList o un TObjectList los tienes casi para cualquier circunstancia sin necesidad de entrar en los templates. Tú que has trabajado en Java, sabrás que ahí, quizá más que en Delphi, todo son objetos. Entonces, un TObjectList es más que suficiente. Pero como en Delphi tenemos más tipos de datos estructurados, como los records, no hay problema porque tenemos al TList, y mira que el TList te sirve igual para objetos (de hecho, le he visto pocas ventajas a un TObjectList sobre un TList).

Ahora, ¿que quieres hacer listas de datos simples como enteros, caracteres o strings (1)? Pues basta que los "envuelvas" en un registro o una clase

Código Delphi [-]
TString = class
  Valor: String;
end;

y ya puedes hacer tu lista de Strings.

// Saludos

(1) Estrictamente hablando, String no es un tipo simple, y si lo "envuelves en un record habrá que tener cuidado con la liberación de la memoria que usa.
Responder Con Cita
  #8  
Antiguo 03-10-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por roman Ver Mensaje
...y mira que el TList te sirve igual para objetos (de hecho, le he visto pocas ventajas a un TObjectList sobre un TList).
De hecho, creo que la única ventaja que tiene TObjectList sobre TList, es que la primera puede ser la dueña de los objetos y liberarlos automáticamente, sin tener que hacerlo "a mano" (propiedad OwnsObjects)


Saludos...
Responder Con Cita
  #9  
Antiguo 03-10-2008
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Lightbulb

Cita:
A que te refieres con que Delphi es pura referencia?
Bueno lei por ahi eso y queria que me lo aclararan.
En cuanto a ti Roman esta bueno lo dices lo voy a probar, gracias por tu sugerencias aunque quisiera implementarlo personalmente pero aun me queda una duda ¿Existen templates en delphi si o no?
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #10  
Antiguo 03-10-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Cita:
Empezado por rgstuamigo Ver Mensaje
Bueno lei por ahi eso y queria que me lo aclararan.
En cuanto a ti Roman esta bueno lo dices lo voy a probar, gracias por tu sugerencias aunque quisiera implementarlo personalmente pero aun me queda una duda ¿Existen templates en delphi si o no?
Pues hasta Delphi 2007, no...


Saludos...
Responder Con Cita
  #11  
Antiguo 03-10-2008
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
uhhhhh Bueno los que hemos trabajado en java o en algun otro lenguaje que los tenga ;un template=plantilla que ayuda a trabajar sobre todo para evitar los casting a cada rato, por decir en el ejemplo de Lepe tiene que hacer una especie de casting para acceder al objeto TImage y al objeto TPanel,y cada vez tendria que hacer lo mismo si quieres acceder a dichos objetos, en cambio con template(Al menos en java)tu creas la lista y le dices por medio de plantillas "Voy a tener una lista digamos de TPanel" (al momento de crearla)entonces la lista esperará solo objetos TPanel y nada mas,y cuando saque de lista me devolvera objetos TPanel,sin necesidad de hacer casting a cada rato; no se si me explico, bueno al menos esto es posible en Java por eso preguntaba si exite en Delphi.
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #12  
Antiguo 03-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Efectivamente no lo hay, pero siempre puedes heredar de TObjectList y sobreescribir las funciones principales para que solo permitan el Tipo que quieras (tardarás 1 minuto cuando sepas hacerlo).

Mediante Gexperts o CnPacks, podrías guardar ese código "maestro" y cuando deseas utilizarlo sólo has de pegarlo y usar "Buscar y reemplazar" Tpanel por TImage. Listo ahora tu lista en lugar de aceptar TPanel, ahora acepta TImage.

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 03-10-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por rgstuamigo Ver Mensaje
uhhhhh Bueno los que hemos trabajado en java o en algun otro lenguaje que los tenga ;un template=plantilla que ayuda a trabajar sobre todo para evitar los casting a cada rato, por decir en el ejemplo de Lepe tiene que hacer una especie de casting para acceder al objeto TImage y al objeto TPanel,y cada vez tendria que hacer lo mismo si quieres acceder a dichos objetos, en cambio con template(Al menos en java)tu creas la lista y le dices por medio de plantillas "Voy a tener una lista digamos de TPanel" (al momento de crearla)entonces la lista esperará solo objetos TPanel y nada mas,y cuando saque de lista me devolvera objetos TPanel,sin necesidad de hacer casting a cada rato; no se si me explico, bueno al menos esto es posible en Java por eso preguntaba si exite en Delphi.
Esto lo puedes lograr en Delphi heredando desde TObjectList o desde TList:

Código Delphi [-]
type
  TPanelList = class(TObjectList)
  private
    function GetPanels(Index: Integer): TPanel;
    procedure SetPanels(Value: TPanel; Index: Integer);
  public
    function Add(APanel: TPanel): Integer;
    procedure Delete(APanel: TPanel);
    property Panels[Index: Integer]: TPanel read GetPanels write SetPanels;
  end;

implementation

function TPanelList.GetPanels(Index: Integer): TPanel;
begin
  Result := Items[Index] as TPanel
end;

procedure TPanelList.SetPanels(Value: TPanel; Index: Integer);
begin
  Items[Index] := Value
end;

function TPanelList.Add(APanel: TPanel): Integer;
begin
  Result := inherited Add(APanel)
end;

procedure TPanelList.Delete(APanel: TPanel);
begin
  inherited Delete(APanel)
end;

Con esto puedes tener una lista de TPanel sin hacer casting a cada rato...


Saludos...
Responder Con Cita
  #14  
Antiguo 03-10-2008
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Talking

Esta muy bueno tu codigo Maeyanes gracias por compartir tus conocimientos.
Saco mis conclusiones haciendo una comparacion entre Delphi y Java:
En Delphi para poder hacerlo tengo que crearme una nueva clase heredada de TObjectList y volver a escribir los metodos;
*Significa que cada vez que quiero que mi lista de objeto(TObjectList)
sea de algun tipo, necesariamente (para evitar los casting)debo crearme
una nueva clase heredada de TObjectList, digamos que si quiero una lista
de numeros tengo que hacerme una nueva clase de numero,si quiero de TButton
me hago de una nueva clase, y asi sucesivamente.Esto como he dicho solo para
evitar hacer casting a cada rato.
*En java solo pongo en plantilla el tipo de dato que va ser y listo,
no nesito estar creandome nuevas clases y reescribiendo metodos.
ES EXATAMENTE lo que hemos estado hablando durante todo el hilo.
Seria bueno que Delphi en las proximas versiones tuviera los famosos TEMPLATE
Seria de mucha ayuda para los programadores que nos gusta este IDE's.
MUCHISIMAS GRACIAS AMIGOS por compartir sus experiencias y sugerencias.
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #15  
Antiguo 03-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
La definición de un objeto en Delphi es una clase... y esta no es un puntero a un objeto
no, me equivoque Una instancia de una clase es un puntero (en delphi)

Última edición por coso fecha: 03-10-2008 a las 21:45:43.
Responder Con Cita
  #16  
Antiguo 03-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
Si, eso si lo tengo presente... es por eso que pregunté si no le entendí mal...

A lo mejor coso se refería a lo que tú comentas...

Exactamente! me llegan los mensajes a destiempo
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
Lista Dinamica en Java Alejo JAVA 1 17-01-2005 12:48:41
Como hacer una lista de temas.... Delphius Varios 16 16-11-2004 20:37:56
lista dinamica Telemaco PHP 6 19-08-2004 23:20: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


La franja horaria es GMT +2. Ahora son las 11:58:06.


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