FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Listas de objetos: ¿Herencia o Encapsulación?
Hola.
Antes que nada quiero saludar a todos puesto que es mi primer post, así como agradecer de antemano vuestra ayuda. Vamos al asunto. Se trata de una simple clase que va a contener una lista de objetos. Para ello me voy a apoyar en la clase TStringList (va a poseer Valores y Objetos asociados). ¿Qué creéis que es más correcto (o elegante)?
Hay que tener en cuenta que, si posible, no quiero dar acceso a la propiedad Objects, es decir, no dar acceso a los objetos de la lista directamente, sino hacerlo sólo a través de los métodos (establecer como una "caja negra"). Por ello, mi preferencia es la primera clase, pero si me decís que no es elegante, o no se suele hacer, pues utilizaré la segunda clase. Muchas gracias. Un saludo. EDITO para modificar modificar y aclarar un poco el título. Última edición por Jome fecha: 24-11-2005 a las 13:03:44. |
#2
|
||||
|
||||
Cita:
Si quieres utilizar las ventajas del polimorfismo, y quieres que tu clase pueda ser utilizada por ejemplo por los controles de la VCL, la segunda opción es la apropiada. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
Cita:
¡Muchas gracias! |
#4
|
||||
|
||||
¿No te sería más comodo derivar de TObjectList?, que maneja una lista de objetos por sí mismo.
El string lo meterías dentro del objeto, y listo. Solo tendrías que hacer un par de forzados de tipos para tener una lista de objetos que te devuelvan el TMiObjeto en lugar del típico TObject. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
|||
|
|||
Cita:
Es cierto que con un TStringList desperdicio algo de memoria,ya que el campo Abbrev lo contiene por duplicado: una vez como Value y otra dentro del propio MiObjeto. La clase TObjectList también posee el método IndexOf pero, salvo que me corrijáis, creo que no lo puedo aprovechar para buscar entre los objetos según un determinado campo (corregidme si me equivoco porque de esto no estoy seguro). Es cierto que mediante la clase TObjectList me puedo evitar tener que destruir cada uno de los objetos, pero dentro del uso que le voy a dar a esta lista no se encuentra el de poder borrar algún objeto, simplemente va a ser una lista fija que contendrá objetos provenientes de un archivo XML, y a la que accederé de vez en cuando (se puede decir que una vez cargada, será de sólo lectura). Precisamente por ser de sólo lectura, en lugar de heredar de TStringList había pensado en encapsular el TStringList, y publicar (wrappear -ó como se diga- ) sólo el método Find (ó IndexOf) ya que es el único que voy a emplear. Pero bueno, el usuario delphi.com.ar me ha dado a entender que heredar me aportaría más flexibilidad (y quizás más adelante me dé cuenta de que la necesito) y me ha convencido. |
#6
|
||||
|
||||
Cita:
Implementarlo es bastante fácil, es un simple bucle por los objetos y comparar con la propiedad TMiObjeto.Abrev. Además puedes implementar la opción CaseSensitive, o pasarlo como parámetro a tu rutina: IndexOfAbrev saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#7
|
|||
|
|||
Cita:
|
#8
|
||||
|
||||
Cita:
// Saludos |
#9
|
||||
|
||||
Cita:
saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
|