Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2006
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 19
elcigarra Va por buen camino
TSTringList en un Array of record ??????

Si tienen tiempo, tengo una consulta sobre la estrategia de un programa y no sobre dudas concretas sobre componentes o funciones delphi. Me resulta un poco complejo de explicarlo con el caso específico (más o menos sería calcular la probabilidad que el resultado de un ensayo genérico (físico o químico) sea correcto).

El asunto técnico es medio complejo así que voy a tratar de utilizar un simil más entendible, con la esperanza de que les de más ganas de hincarle el diente a este asunto

a) Imaginen que tengo un tipo record con un monton de datos de diferentes tipos a su vez. xej: "engranajes", que van a tener diferentes atributos: Nombre, medida, altura de dientes, separacion, espesor, etc.

b) Luego tengo una variable (array dinámico) que contiene un set de elementos del tipo record que mencioné antes. Esto sería el array "máquina" ya que por cada máquina habría varios engranajes diferentes en características y en cantidad

De esta forma, teniendo una máquina, agrego los datos de todos (y cada uno de) los "engranajes" en el array. Esto permite realizar una función adicional en la aplicación, de forma que recibiendo como parámetro de entrada este array como una caja negra y haciendo muchas cuentas, arroje un resultado... p.ej...... el precio de la máquina.

Si todavía no se durmieron, acá viene lo complejo.
Imaginen que uno de los parámetros del tipo record del inicio es "oxidación de dientes" para lo cual tendría que poner los numeros de cada diente y después hacer un promedio. Si todos los engranajes tuvieran la misma cantidad de dientes podría poner un parámetro de tipo array con la cantidad de dientes, pero como todos los engranajes tienen distinta cantidad de dientes no se si se pueden usar arrays dinámicos en un Record (en realidad no estoy seguro tampoco que se puedan utilizar tipo array estáticos )

La otra idea que tuve fue ponerle unTStringList y tomar los valores como strings (despues me ocupo de convertir los numeros y hacer los cálculos) En este caso la duda son dos:
*) Se puede poner un TStringList dentro de un Record?
**) SI se puede, debo crear uno con TStringList.create cada vez que agrego un elemento en el array?

Se escuchan ideas aunque realmente no tengo muchas esperanzas de haberme explicado lo suficientemente bien para saber qué cuernos estoy hablando. Gracias
Responder Con Cita
  #2  
Antiguo 13-09-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Inicio por comentar que me parece curioso que hayas puesto el tema en el foro de OOP, cuando no estas dando una solución orientada a objetos al asunto.

En objetos, podrías tener un tipo TEngranaje, que a su vez tuviera una colección (TCollection) de TDientes. ¿para eso son las colecciones no?

Sobre el tema que tratas, te aclaro que que dentro de un registro, se puede poner tanto un TStringList como un arreglo dinámico. En ambos casos, lo que realmente residirá en el registro es un puntero a la dirección de memoria donde estará realmente los datos (4 bytes), por lo que las reglas de los registros siguen siendo válidas. Te comento que esto mismo ocurre cuando incluis un string dentro del registro (a menos que sea un string del estilo pascal y no uno de los "nuevos" de delphi 3 o superior).

Entendiendo este punto, verás que si usas un TStringList (o cualquier campo de un registro que sea un objeto) cada vez que creas un nuevo registro, será tu responsabilidad manejar este puntero. Es decir, al crear el registro, podes hacer que apunte a nil, o crear una nueva instancia de la clase correspondiente y almacenarla allí.

Esto compila perfectamente en delphi 7:

Código Delphi [-]
type
  TRegistro = record
    nombre: string;
    arreglo : array of Integer;
    Lista: TStringList
  end;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 13-09-2006
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
Cita:
Empezado por jachguate
En objetos, podrías tener un tipo TEngranaje, que a su vez tuviera una colección (TCollection) de TDientes. ¿para eso son las colecciones no?
No sé, ¿son para eso? En primera instancia yo usaría un TList o un TObjectList. TCollection me parece que se aplica más a objetos que usarán el andamiaje de la VCL para persistir sus propiedades; cosas como los paneles de un StatusBar, las columnas de un TListView, los índices o campos de un DataSet, etc., cosas todas ellas que se han de guardar en el dfm.

// Saludos
Responder Con Cita
  #4  
Antiguo 13-09-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Así es... en mi caso, cuando los datos son meramente dinámicos, uso un TList o lo que aplique, si los datos son parte de un componente y necesito persistencia, entonces si uso TCollection...


Saludos...
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
tstringlist y nulos edgusano Varios 4 17-11-2005 22:06:54
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo morfeo21 Varios 5 17-08-2004 17:39:51
TObjectList y TStringList esquerda21 Varios 6 21-01-2004 15:16:58
TStringList en TObjectList esquerda21 Varios 1 20-01-2004 09:38:41
TStringList esquerda21 Varios 10 19-01-2004 11:15:21


La franja horaria es GMT +2. Ahora son las 01:51:08.


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