0% encontró este documento útil (0 votos)
101 vistas3 páginas

Programando Con Lázarus - Listas Genéricas.

El documento explica las listas genéricas en Lázarus y Free Pascal. Estas listas permiten crear listas de objetos de una clase específica sin necesidad de conversiones de tipos. Se compara con otras opciones como listas TList y TObjectList, y se explica cómo declarar e implementar listas genéricas mediante el uso de TFPGObjectList.

Cargado por

Eduardo S. Piña
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
101 vistas3 páginas

Programando Con Lázarus - Listas Genéricas.

El documento explica las listas genéricas en Lázarus y Free Pascal. Estas listas permiten crear listas de objetos de una clase específica sin necesidad de conversiones de tipos. Se compara con otras opciones como listas TList y TObjectList, y se explica cómo declarar e implementar listas genéricas mediante el uso de TFPGObjectList.

Cargado por

Eduardo S. Piña
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 3

15/10/2015

ProgramandoconLzarusListasgenricas..|BlogdeTitoHinostroza

Blog de Tito Hinostroza


Ciencia, Tecnologa, Filosofa y ms.

Programando con Lzarus Listas genricas..


En mis exploraciones con Lzarus y Free Pascal he encontrado unas estructuras interesantes de las que
poco se habla y que, sin embargo, son unas herramientas potentes en la programacin de estructuras
dinmicas de objetos, nmeros o cadenas.
Estoy hablando de las listas genricas. Las de la clase TFPGObjectList. En vista de que veo muy poca
informacin en espaol, aqu va mi aporte.
Es cierto que en Free Pascal existen las listas de tipo TFPObjectList, que tambin manejan objetos, pero
las listas genricas dan un paso adelante al poder manejar listas de objetos de una clase especca.
Antes que nada, un pequeo resumen, que de paso me sirve a mi tambin:
Para manejar listas de objetos dinmicos en Object Pascal, tenemos dos opciones:
* Manejar directamente arreglos (o matrices) dinmicos.
* Manejar estructuras de listas ya creadas en las libreras.
1. MANEJAR DIRECTAMENTE ARREGLOS DINMICOS
Este sera el mtodo clsico, el que yo usara si no tuviera otras opciones. El procedimiento es clsico:
Declarar la matriz: Matriz: ARRAY OF Integer;
Dimensionar la matriz: SetLength(Matriz, 5);
Y nalmente hay que limpiar la matriz. Si manejamos datos como nmeros y cadenas,basta con un:
SetLength(Matriz,0).
Pero si manejamos matrices de objetos hay que liberar la memoria que ocupaban los objetos. Limpiar
solamente la matriz no limpia el espacio de los objetos. El cdigo sera algo como esto:
for objeto in Matriz do objeto.Free;
SetLength(Matriz, 0);
La desventaja de este mtodo sera que nosotros mismos tendramos que implementar a mano, los
procedimeintos de insercin, eliminacin, ordenamiento, etc.
Sin querer entra en detalle, porque el tema es extenso, vamos al otro mtodo.
2. MANEJAR ESTRUCTURAS DE LISTAS YA CREADAS EN LAS LIBRERAS

http://blog.pucp.edu.pe/blog/tito/2013/04/16/programandoconlzaruslistasgenricas/

1/3

15/10/2015

ProgramandoconLzarusListasgenricas..|BlogdeTitoHinostroza

Esta solucin consiste en usar las clases de objetos ya creados que nos liberan del trabajo de tener que
implementar la insercin, borrado, ordenamiento, y otras tareas tpicas de las listas dinmicas.
Aqu existen diversas opciones, resumir las que he revisado, aunque sea someramente:
Objetos Tlist: Son las listas ms simples, por as decirlo. Almacenan punteros a prcticamente
cualquier cosa. Son listas de uso general. En Free Pascal existe una versin llamada TFPList, que
bsicamente es la misma lista pero no incluye mecanismos para manejar eventos, lo que debiera
hacerlas ms rpidas. Si usamos esta lista con objetos hay que tener cuidado de ir liberando los objetos
que quitemos de un Tlist, porque debemos liberar su memoria manualmente (objeto.Free).
Objetos TObjectList: Seran una versin ms especializada de los TList. Estas listas, que tienen todos
los mtodos de un TList (son sus descendientes), almacenan punteros a TObject, lo que signica que
estn destinadas a manejar objetos y no simples nmero o cadenas. La ventaja que nos dan, es que
nos pueden ahorrar el trabajo de tener que liberar la memoria del objeto cuando eliminemos su
referencia de la lista.Y digo nos pueden, porque esta opcin de recojo de basura, se puede activar o
desactivar a voluntad el momento de la creacin de la lista. Nuevamente aqu tenemos que Free Pascal
incluye una versin ligera que es la TFPObjectList que nuevamente no maneja eventos a cambio de
velocidad.
No quiero explayarme ms porque quiero llegar al punto, y por otro lado no he experimentado lo
suciente con estas estructuras.
LISTAS GENRICAS
A lo que quera llegar es que, las listas TObjectList manejan bien los objetos pero siempre almacenarn
referencias a TOBject. Cuando las usemos, no va a ser para almacenar TObjects, sino alguna clase ms
especca. As que tendremos que hacer conversiones frecuentes de tipo, si es que las usamos, con una
posible prdida de velocidad.
Aqu es donde las listas TFPGObjectList salen al encuentro. Este tipo de listas son las llamadas
estructuras de tipo genricas. Un concepto que tambin se ve en .NET.
A grandes rasgos, son clases que no estn denidas completamente hasta que se vayan a usar. De
forma que nos permite denirlas para un tipo especial de objetos cuando las vamos a usar. As nos
permiten crear listas de objetos especcos.
Veamos un ejemplo. Para crear una lista genrica de tipo Tpersona, declarara un tipo y una variable
as:
TYPE
TListaPersonas = specialize TFPGObjectList<Tpersona>;
VAR
ListaPersonas: TListaPersonas;
Y luego ya tengo una lista que solo acepta Tpersona, pudiendo acceder directamente a sus campos as:
ListaPersonas[1].nombre
ListaPersonas[1].edad

http://blog.pucp.edu.pe/blog/tito/2013/04/16/programandoconlzaruslistasgenricas/

2/3

15/10/2015

ProgramandoconLzarusListasgenricas..|BlogdeTitoHinostroza

Sin prdida de velocidad por ligadura tarda y sin necesidad de hacer TypeCast.
La asignacin y borrado de tems, se hace de la misma forma que en una lista TObjectList, y con las
mismas consideraciones.
Estas estructuras caen en la categora de los llamados contenedores parametrizables y son
herramientas poderosas de Object Pascal en programacin.
Recordar que el primer elemento de la lista es el 0 y no el 1. Adems para usar estas listas se debe
incluir la unidad Fgl.

Puntuacin: 4.00 / Votos: 2


Esta entrada se public en Programacin y est etiquetada con Lazarus, Listas, pascal, programacin en
16 abril, 2013 [http://blog.pucp.edu.pe/blog/tito/2013/04/16/programando-con-l-zarus-listas-gen-ricas/]
.Visto: 880 veces

http://blog.pucp.edu.pe/blog/tito/2013/04/16/programandoconlzaruslistasgenricas/

3/3

También podría gustarte