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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-08-2008
gushynet gushynet is offline
Miembro
 
Registrado: ago 2008
Posts: 26
Poder: 0
gushynet Va por buen camino
procedimiento de asignación genérico

Hola, tengo unas dudillas a ver si alguien me puede orientar un poco.

Cuando se realiza la siguiente asignacion en delphi:

objeto1 := objeto2;

realmente no se hace la asignacion sino que objeto1 apuntara a la misma posicion de memoria que objeto2.

Estoy intentando hacer un procedimiento que realice la asignacion completa, es decir, el procedimiento debe crear una nueva instancia del objeto pasado por parametro (objeto2), que en principio no sabemos de que tipo es, y copiar el contenido de todas las propiedades del objeto2 en las propiedades del objeto1.

procedimiento TObjeto.Asignar(obj: pointer );

En este punto se me han planteado una serie de dudas sobre la solucion que se me ha ocurrido pero que no he conseguido implementar.


Primero, el tipo del parametro que le paso al metodo es de tipo pointer ya que delphi, si no me equivoco la variable objeto no tiene el objeto en si sino la direccion del mismo, por lo que si el parametro es de tipo pointer, el método aceptara cualquier tipo de objeto ya que como dije todo objeto en delphi es un puntero al objeto. No se si este razonamiento es válido y eficiente pero compilar compila.

Una vez entramos en el metodo los pasos que creo se deberia seguir para realizar la asignacion son los siguientes:

1. Averigua el tipo del objeto pasado por parametro

aqui se que puedo usar propiedades como ClassName o ClassType pero aunque he conseguido acceder a ClassName no he conseguido siquiera cambiar el valor de una propiedad del objeto pasado porque siempre se produce el mismo error en tiempo de ejecucion, error en el acceso a memoria.

2. crea una nueva instancia del objeto una vez averiguado su tipo

3. accedemos a todos los campos del objeto pasado por parametro y copiamos su contenido en las propiedades del objeto creado. Aqui se me plantea el problema de como recorrer todas las propiedades del objeto pasado por parametro.

4. Devolvemos el objeto creado.


Las dudas que tengo son muchas pero ahi van unas cuantas:

- la unica manera de averiguar el tipo del objeto que me han pasado es asignando el pointer a un objeto local de tipo TObject y accediento a la propiedad NameClasses o haciendo una conversion directa:

NombreClase := PTObject(Objeto)^.ClassName;

PTObject es un puntero a TObject.

- ¿como creo una nueva instancia? lo he conseguido hacer si dentro del metodo realizo una conversion (al parametro)al tipo que sé que le estoy pasando al metodo pero la gracia esta en que ese metodo lo pueda usar cualquier independientemente del objeto para el que vaya a realizar la conversion.
- Sabeis de documentacion(en español mejor) sobre la Programacion orientada a objetos en object pascal sin ser el manual de delphi y que tenga ejemplos mas elaborados sobre las referencias de clase ya que no tengo ni idea de en que contexto se usan o para que sirven, aunque sospecho que alguna relacion con el problema que he planteado seguro que tienen.


Gracias de antemano por la ayuda.
Un saludo.

PD:disculpas por lo extendido que me ha quedado el mensaje.
Responder Con Cita
 



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
Apuntar a un tipo genérico Guillermo80 Varios 4 09-03-2008 11:48:22
Reutilizar código "generico" adlfv OOP 13 06-09-2005 02:01:04
Ayuda, como llamar a un procedimiento desde otro procedimiento? Ariatna Varios 1 01-02-2005 04:05:35
reporte generico piyugo Impresión 8 07-05-2004 18:20:03
Configuar Generico/solo texto en Win 2000 sperezp Impresión 0 13-01-2004 15:13:43


La franja horaria es GMT +2. Ahora son las 20:20:12.


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