Foros del Web » Programación para mayores de 30 ;) » C/C++ »

POO Herencias con la misma referencia padre

Estas en el tema de POO Herencias con la misma referencia padre en el foro de C/C++ en Foros del Web. Hola de nuevo! No sabia muy bien que titulo poner asi que explicare con las detalle de que se trata. Estoy haciendo un pequeño projecto, ...
  #1 (permalink)  
Antiguo 05/03/2013, 12:13
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 9 meses
Puntos: 0
POO Herencias con la misma referencia padre

Hola de nuevo!
No sabia muy bien que titulo poner asi que explicare con las detalle de que se trata.
Estoy haciendo un pequeño projecto, bueno continuando el projecto que en otros post puse dudas que me resolvistes exelentemente!

El caso esque estoy haciendo un programa que tendra una interficie grafica, el cual pues tendra de cargarse imagenes y imprimirlas por pantalla.

Mi idea era saber si se puede, que me imagino que en la programacion todo es posible y el como hacerlo.
Tengo una clase Imagen, que es el padre de TODAS las clases que tendra mi programa, ya que es la encarga de almacenar la imagen del objeto en cuestion.
El caso esque habra muchos objetos en el programa que utilizaran la misma imagen y aqui la question:
Tenia pensado hacer una clase por encima de IMAGEN que el contenido de esta fuera accesible desde todas las clases que se crearan ya que si cargo 1 imagen para un objeto, si luego otro objeto tambien usa la misma imagen pues que no cargue otra imagen en memoria sino que utilize la ruta de la 1r imagen cargada.

Nose si se entiende.
El caso esque lo quiero hacer para ahorrar, que no alla mil imagenes repetidas sino 1 cargada de ese tipo y que todo se imprime desde esa imagen ya en memoria...
Como lo veis? me imagino que es lo normal no?
Mi ejemplo seria

Clase ContenedorImagen --->Imagen----->resto de objetos
Al crear 1 objeto por ejemplo

objeto a;
a.cargarimagen("/pato");
que cargar imagen mire si esa imagen esta cargada y guardada en contendorImagen, si lo esta pues que el OBJETO A, guarde la posicion en memoria para poder usarla sino cargue la imagen y guarde su posicion.

EL TEMA es si luego hago
objeto b;
b.imprimir("pato");
que acceda al pato guardado en contenedorImagen previamente cargado por objeto a

Nose si es muy liado la explicacion, espero que se entienda
No tengo ni idea de como hacer esto que quiero

Muchisimas gracias!
  #2 (permalink)  
Antiguo 05/03/2013, 18:41
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 13 años
Puntos: 25
Respuesta: POO Herencias con la misma referencia padre

que te parece hacer una clase aparte?. Tene en cuenta que esta idea que te doy la hago en cuanto a mi ignorancia con respecto a herencia de clases. Por ejemplo:

Código C++:
Ver original
  1. class DirMemoriaImagenes{
  2.  
  3. private:
  4.  
  5.     vector<ClaseImagen*> __Direcciones;
  6.     vector<string> __Identificador;
  7.  
  8.    ClaseImagen* CargarImagen(string Imagen);
  9. public:
  10.  
  11.    ClaseImagen* CargarImagen(const char* PathArchivo);
  12.  
  13.    ClaseImagen* ObtenerImagen(string Imagen);
  14.  
  15.    DirMemoriaImagenes();
  16.    ~DirMemoriaImagenes();
  17. }

la idea de la clase es la siguiente:

- se carga una vez la imagen en memoria y se guarda en el vector __Direcciones

- Se puede obtener la direccion de memoria de la imagen (previamente cargada en memoria) mediante el metodo ObtenerImagen. De esta manera, se carga la imagen solamente 1 vez y el objeto que necesite dibujarla solamente necesitara la direccion de memoria de la misma.

- El vector __Identificador guarda los nombres con los que se cargaron las imagenes, para buscarlas mas rapido. EJ: Cuando se ejecute el metodo CargarImagen(string Imagen), se guarda en el vector __Direcciones la direccion de la imagen cargada y en el vecor __Identificador el parametro Imagen. Luego, al llamar al metodo ObtenerImagen(string Imagen), solamente necesitas establecer la posicion del parametro Imagen en el vector __Identificador, esta posicion va a ser la misma en el vector __Direcciones de la imagen correspondiente.

-Solamente necesitarias 1 instancia de esta clase, de la cual los demas objetos pueden obtener la direccion de memoria de la imagen que necesiten.



espero que se haya entendido la idea, igualmente hay mejores y mas variadas maneras de hacerlo, este ejemplo es de como lo haria yo :)

saludos.
  #3 (permalink)  
Antiguo 06/03/2013, 09:45
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: POO Herencias con la misma referencia padre

No es bien bien lo que me estoy refiriendo....
ya que la clase Imagen no se crea como clase Imagen,
me intentare explicar mejor.

Tengo asi explicativo...
Código:
clase Imagen
{
     Guarda la ruta de la imagen, su tamaño, y medidas
}

clase Animacion::public Imagen
{
      Guarda el orden de secuencia de sprites, la posicion en pantalla
}

Clase Objetos::public Animacion
{
     Son los diferentes elementos que tendra la interficie con sus opciones                  independientes
}
Con esto que quiero decir, yo siempre creare OBJETOS y estos objetos tendran su animacion y su imagen.
El caso es que Si creo 2 objetos con la misma imagen, se guardaran 2 imagenes en memoria, que es un gasto tonto... mi duda era hacer una clase extra por encima de IMAGEN y que lo englobara todo, pero con la especificacion que esa clase padre compartiera la informacion que se va guardando...
Ejemplo:
Código:
clase Contenedor
{
    Guarda la ruta de la imagen
  metodo: int cargarimagen("/ruta")
  {
       Si la imagen no esta en contenedor, guardala y devuelve su posicion en memoria
       Sino, devuelve su posicion en memoria

   } 
}
clase Imagen::public Contenedor
{
     guarda la posicion en memoria de la imagen previamente cargada en Contenedor

}

clase Animacion::public Imagen
{
      Guarda el orden de secuencia de sprites, la posicion en pantalla
}

Clase Objetos::public Animacion
{
     Son los diferentes elementos que tendra la interficie con sus opciones                  independientes
}

main()
{
      Objetos b;
     b.cargarimagen("/pato");
   //ruta en memoria de imagen de b es: 0x82733;
    Obejtos c;
   c.cargarimagen("/pato");
   //ruta en memoria de imagen de b es: 0x82733;
osea la misma!
}
Lo he puesto como ejemplo un poco en pseudocodigo, es hacer una clase padre heredada por todos los hijos pero con la condicion que todos los hijos puedan acceder a la misma informacion

Mas o menos es eso.. o alguna idea similar?
PD: Lo que tu me propones es dejar clase Imagen independiente nO? y luego llamarlas desde las otras clases de forma referenciada me imagino, no me convence mucho
  #4 (permalink)  
Antiguo 06/03/2013, 13:16
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 13 años
Puntos: 25
Respuesta: POO Herencias con la misma referencia padre

entendi lo que quisiste decir. Pero estos son algunos problemas que pienso podrias tener:


- vas a seguir teniendo que cargar 1 imagen por objeto.

- en el caso de que el objeto b contenga la direccion de memoria de la imagen del objeto a para poder dibujarla y hacer uso de ella. En el caso de que elimines el objeto a por cualquier motivo, la direccion de memoria de la imagen va a quedar sin datos, por lo que el objeto b no tendrá ninguna imagen asociada.


El ejemplo que te di seria algo asi como una lista enlazada (ya se que no lo es ). Esta clase se encargaria de manejar las direcciones de memoria de las imagenes, cargarlas en memoria, sacarlas de memoria entre otras cosas. Tambien te devolveria la direccion de memoria de la imagen que necesites para que pueda ser usada por alguno de tus objetos.
Entonces, al eliminar un objeto que use una de estas imagenes, la imagen seguira exisitiendo para que los demas objetos puedan hacer uso de la imagen.


espero haberme explicado

Etiquetas: int, padre, poo, programa, referencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:25.