Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Manual de TObjectList (https://www.clubdelphi.com/foros/showthread.php?t=79359)

santiago14 27-06-2012 23:57:45

Manual de TObjectList
 
Buenas, estoy tratando de manejar unos punteros (listas que le dicen), veo que lo mas adecuado es TObjectList pero no encuentro algún buen manual para ayudarme. He buscado en la ayuda de Delphi y se entiende pero no hay demasiados ejemplos y cosas así.
¿Alguien conoce un manual por ahí?

Gracias, Saludos.

Santiago.

Casimiro Notevi 28-06-2012 00:02:20

Hola, exactamente ¿qué buscas?, punteros y listas son cosas distintas (me ha salido con rima :))

ecfisa 28-06-2012 00:10:11

Hola Santiago.

Te pongo unos enlaces que creo te van a servir:
Saludos.

roman 28-06-2012 00:49:28

Cita:

Empezado por santiago14 (Mensaje 436197)
Buenas, estoy tratando de manejar unos punteros (listas que le dicen), veo que lo mas adecuado es TObjectList pero no encuentro algún buen manual para ayudarme. He buscado en la ayuda de Delphi y se entiende pero no hay demasiados ejemplos y cosas así.

Tampoco es que haya mucha ciencia (*) en usar un TObjectList, de manera que, como apunta Casimiro, sería mejor que relataras qué necesidad específica quieres.

------

(*) Digo esto porque las listas en delphi son bastante fáciles de usar con métodos para insertar, borrar, buscar, etc. No como las listas enlazadas en que te debes preocupar por cómo asignar los apuntadores para las operaciones básicas.

// Saludos

santiago14 28-06-2012 00:52:46

Cita:

Empezado por Casimiro Notevi (Mensaje 436200)
Hola, exactamente ¿qué buscas?, punteros y listas son cosas distintas (me ha salido con rima :))

Tengo que hacer un módulo de logística, es decir, en la Administración se matan vendiendo todo lo que tienen (y lo que no tienen), esas "ventas" luego se deben mandar a un remito para que se suban a un camión y la mercadería llegue a destino.
En esto de la generación de los remitos tenemos:
1) Varios remitos, uno por cliente al que se le vendió algo,
2) Un remito general, con los acumulados de los remitos particulares; esto es importante a la hora de llenar el camión y para control.
3) La "hoja de ruta" del camión, una serie de datos para saber que camión va, con que choferes, destino, fecha de salida, de llegada, etc.

Bien, esta funcionalidad es algo así como un formulario donde aparecen las ventas que ya se hicieron y el encargado del depósito "arma" la hoja de ruta con todos los remitos que considere pertinentes.
Como los remitos pueden ser parciales de las ventas (se vendieron 1000 kg. de papas, pero en este envío te llevamos solamente 250 kg) es que los detalles de los remitos son modificables antes de la generación, allí aparece el asunto del TObjectList.
Esta gente debe poder jugar con los remitos/ventas, sacarlos, ponerlos, modificarlos (mas renglones, menos renglones, en fin...) y la manera mas sencilla que imaginé es la de tener unos "punteros", "listas" o algo similar para hacer todas estas tareas y otras que no mencioné.
TObjectList tiene una buena tanda de métodos y propiedades que me servirían de mucho para armar unas clases que ya tengo en mente que relacione a esos objetos con las grillas y las impresiones que tengo que hacer.
Bueno, se que no he sido claro, pero la cosa es medio complicada.

Gracias por los aportes, voy a revisar los enlaces que me mandaron a como van.

Saludos, Santiago.

santiago14 28-06-2012 01:40:50

Bueno, una de las cosas que me causaba malestar era que, tenía dos TStringList, y necesitaba que se copiaran (tener dos iguales) y, por alguna razón la cosa no salía bien. Hacía:
Código Delphi [-]
 stringList1:=stringList2;
Luego quería modificar mis cosas en stringList1 y resulta que aparecían cosas de stringList2, bueno esto es lógico, estamos hablando de referencias de memoria (1° año de universidad, hace tanto ya...) Bien, leyendo esos apuntes que me recomendó ecfisa encontré el método "Assign", que parece que resuelve la cosa de mejor manera.
Bien, ya es tarde en la Argentina y estuve peleando toda la tarde con el asunto, así que me voy a la camita, a disfrutar de la primera final de la Libertadores (¡¡vamos Boquita!!) y mañana me pongo en campaña a modificar los métodos de mi clase a ver que onda. Les comento, y si resulta bien, publico aquí la pequeña clase que hice.

Saludos, Santiago.

Casimiro Notevi 28-06-2012 09:21:02

Yo lo haría directamente en la base de datos, un "remito" será algo así como un "albarán de entrega", sólo has de añadir un campo más: "entregado".
Si tienes el campo "Cantidad", sólo has de poner en "entregado" lo que se le envía al cliente. Cuando "Cantidad" y "Entregado" son iguales entonces se pone el campo "Estado" a Finalizado, por ejemplo.
El "Estado" es un campo que puede ser
1.Por confirmar
2.Confirmado
3.Entregado parcial
4.Entregado total

Es sólo un ejemplo, depende de lo que necesites.

Pero todo ese proceso lo haría en la base de datos, ¿qué haces con esas listas?, si luego tienes que guardarlas en la BD, pues lo haces directamente.

Delphius 28-06-2012 20:08:19

Cita:

Empezado por Casimiro Notevi (Mensaje 436219)
Yo lo haría directamente en la base de datos, un "remito" será algo así como un "albarán de entrega", sólo has de añadir un campo más: "entregado".
Si tienes el campo "Cantidad", sólo has de poner en "entregado" lo que se le envía al cliente. Cuando "Cantidad" y "Entregado" son iguales entonces se pone el campo "Estado" a Finalizado, por ejemplo.
El "Estado" es un campo que puede ser
1.Por confirmar
2.Confirmado
3.Entregado parcial
4.Entregado total

Es sólo un ejemplo, depende de lo que necesites.

Pero todo ese proceso lo haría en la base de datos, ¿qué haces con esas listas?, si luego tienes que guardarlas en la BD, pues lo haces directamente.

Creo y me parece Casimiro que a lo que apunta santiago14, es que cuenta con su propio juego de clases y necesita que una (al menos) de ellas tenga o mantenga referencias a una lista, grupo, o colección de otras clases (mejor dicho, instancias de una o más clases).
Para ello no hay demasiadas opciones, y todas se resumen a que la clase en cuestión disponga de un atributo que le permita llevar listas... puede utilizarse TObjectList, TList o cualquier otro tipo de xList; cada uno tiene sus utilidades y facilidades.

Código Delphi [-]
TMiClase = class
  private
    FListaClases2: TObjectList;
  public
     procedure Agregar(Clase2: TMiClase2);
     ....
end;

La otra posibilidad, si se puede y/o considera oportuna, es heredar de alguna de las XList y disponer en éstas de los métodos de interés.

Luego, estas clases se harán persistentes (al menos las que se necesiten o consideren) en la base de datos. Es muy útil tener este grado de abstracción hacia el pensamiento OO y no quedarse en el enfoque RAD y sobre todo si se emplea mucho el data-ware sin mediar algún control de por medio; ya que con esto se está implementando una buena biblioteca de dominio que luego puede ser volcada sin demasiado trabajo en otros casos en que requiera del mismo o similar contexto.
Al diseñar la clases se está llevando consigo la combinación procesos y datos.
Para este enfoque es muy útil recurrir a un framework de persistencia, salvo que el diseño sea tan simple y que permita hacer un mapping O-R de forma relativamente sencilla y no tan aparatosa.

Yo trabajo con ese enfoque: clases dominios, que luego van a un mini framework de persistencia que se encarga de guardar, actualizar, o recuperar hacia/desde la base de datos. NO uso data-ware, o de alguna forma directa hacia la DB. Me parece más "limpio" y seguro.

Saludos,


La franja horaria es GMT +2. Ahora son las 15:19:16.

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