Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-09-2005
adlfv adlfv is offline
Miembro
 
Registrado: may 2005
Posts: 39
Poder: 0
adlfv Va por buen camino
Unhappy Descendiente de TCollectionItem de solo lectura

Hola a todos.

Tuve una duda el otro día, sobre Free y Destroy y en el post salió el tema de las colecciones. Estoy haciendo una clase TTipoHabitacion que hereda de TCollectionItem, y después quiero hacer una clase TTiposHabitaciones que herede de TCollection.

La verdad no había hecho antes clases de este tipo, sino más sencillas. Quiero incluir cierta información en la clase TTipoHabitacion como por ejemplo, una nota (TStrings) un prefijo (String) y no sé si alguna cosa más. La clase TTiposHabitaciones que es el contenedor de TTipoHabitacion lee de la base de datos los tipos de habitaciones y crea los items correspondientes. La duda es que dichos items deben ser de sólo lectura para la aplicación, al igual que la clase TTiposHabitacion, pues para la escritura a la base de datos empleo un formulario de mantenimiento que utiliza DBAware. Estoy haciendo un hibrido clases-DBAware.

Alguien me puede orientar un poco con esto de TCollection y TCollectionItem.

Muchas gracias de antemano.

PD: Había pensado más o menos lo mismo para las habitaciones, THabitacion desciende de TCollectionItem, y THabitaciones desciende de TCollection. Así mismo los estados concretos de las habitaciones (por ejemplo: mantenimiento, limpieza...) los hago descender de THabitacion. No estoy seguro si así se emplean las colecciones o no... Hasta ahora lo había hecho más o menos así, pero todo descendía de TObject... Esto es incorrecto? Por qué?
Responder Con Cita
  #2  
Antiguo 15-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
No se si te estoy entendiendo bien pero no existe el concepto de un objeto de sólo lectura, lo que sí puedes hacer es que algunas propiedades de un objeto sean sólo de lectura (con lo que conseguirías, mas o menos, un objeto no modificable, al menos en sus propiedades). Para ello, has de especificar sólo la parte "read" en la declaración de la propiedad, aunque ten encuenta que las propiedades de tipo objeto siempre se podrán modificar (por eso es mejor, siempre que sea posible, no usar propiedades de tipo objeto si queremos que sean de sólo lectura).

Por ejemplo, si quieres que los campos "Nota" y "Prefijo" de la clase TTipoHabitacion sean sólo de lectura haríamos lo siguiente:

Código Delphi [-]
type
  TTipoHabitacion = class(TCollectionItem)
  private
    FNota: string;
    FPrefijo: string;
  public
    property Nota: string read FNota; // Sólo especificamos la parte "read"
    property Prefijo: string read FPrefijo;
  end;

Fíjate que si el atributo "Nota" fuera de tipo TStrings, entonces, el usuario si que podría modificar dicho atributo al tratarse de un objeto (es por eso que te comenté antes que no existen los objetos de sólo lectura), pero al ser string el valor no podrá modificarse.

Según veo estás tratando de hacer un framework de persistencia de objetos (lo que no es algo relativamente fácil) así que te aconsejaría buscar por el foro donde encontraras hilos interesantes sobre el tema.

Saludos!
Responder Con Cita
  #3  
Antiguo 15-09-2005
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
Yo he usado las colecciones muy poco así que posiblemente lo que diga no sea totalmente adecuado. Pero para lo que quieres hacer yo me quedaría con lo que estabas haciendo originalmente (que por cierto no respondiste ). Las colecciones están más pensadas para mostrar listas de objetos en el inspector de objetos, es decir, para tiempo de diseño. Pero según lo que describes- leer datos de la base de datos -realmente no necesitas ver esto durante el diseño y para mi gusto te convendría más usar otro tipo de listas, TStrings, TObjectList, etc. que no lidian con toda la parafernalia necesaria para el IDE.

// Saludos
Responder Con Cita
  #4  
Antiguo 15-09-2005
adlfv adlfv is offline
Miembro
 
Registrado: may 2005
Posts: 39
Poder: 0
adlfv Va por buen camino
Gracias a ambos por contestar.

Lo que me refería era a eso precisamente, a propiedades de sólo lectura, pero es cierto que al ser objetos, se pasan sólo las referencias y sí se pueden modificar... se me había pasado ese detallito por alto .

Disculpa Roman, sí se me pasó contestarte... ups . La verdad es que copié el código que me diste, pero aún no lo he probado porque estoy PELEANDO con ModelMaker y con las clases, y todo eso... Cuesta mucho hacer un software bien planteado!! y más si es un programa grande...

Un cordial saludo a todos, y gracias de nuevo

Edito: Se me olvidaba lo del marco de persistencia de objetos que contesta jmariano... No estoy haciendo exactamente eso, es decir, sí quiero hacer algo así, pero sólo para algunas cosas (las más usadas) no para todo. Nunca he trabajado con ese tipo de tecnología, aunque me llama la atención, lo que no sé es si sea estable o no, y si haya que usarla al completo o no, es decir, si una vez que comienzo con eso debo emplearla para todo y se extienda a empleados, reservas y todo ese tipo de cosas (que no es la idea porque se extendería muuuucho el proyecto) o si puedo usarlo sólo en habitaciones y poco más... El programa está tan raro ya, que creo que no tiene una "forma de trabajo" clara ... Toy vuelto un 8!

He leido sobre tiOPF, InstantObjects y me parecen muy interesantes, pero no sé... siempre me quedan mis dudas si después podré hacer consultas normales, y trabajar con DBAware de forma normal... porque no me interesa perder eso, sino que ambas cosas se complementen...

Última edición por adlfv fecha: 15-09-2005 a las 17:07:57.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 14:26:30.


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