Programando Con Lázarus - Listas Genéricas.
Programando Con Lázarus - Listas Genéricas.
ProgramandoconLzarusListasgenricas..|BlogdeTitoHinostroza
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.
http://blog.pucp.edu.pe/blog/tito/2013/04/16/programandoconlzaruslistasgenricas/
3/3