Metodología de objetos

21/11/2004 - 02:06 por José Manuel Nieto | Informe spam
Hola! Soy nuevo en el grupo.

Me gustaría saber cuál sería la manera metodológicamente correcta de
encargar a una clase la creación objetos de otra clase.

Por ejemplo, imaginad una clase Dibujo y otra clase LectorDeDibujos.

La clase LectorDeDibujos tiene como misión crear Dibujos a partir de
ficheros de disco, por ejemplo.

Resulta que el creador de dibujos debe acceder al núcleo de la clase
Dibujo para otorgar todas sus características. Por tanto, requiero un
mecanismo que, respetando la encapsulación, sea correcto para que una
clase MODELE a otra.

Muchas gracias de antemano.

Simplemente JMN

Preguntas similare

Leer las respuestas

#1 Diego Jancic
21/11/2004 - 05:51 | Informe spam
Creo que deberias, en el caso que diste vos, crear un objeto aparte llamado
Dibujo o Imagen, el cual se lo podrias pasar en el contructor o mediante un
metodo, por ejemplo, llamado CrearDibujo(Dibujo miDibujo)
Respuesta Responder a este mensaje
#2 José Manuel Nieto
21/11/2004 - 12:37 | Informe spam
Diego Jancic wrote:
Creo que deberias, en el caso que diste vos, crear un objeto aparte llamado
Dibujo o Imagen, el cual se lo podrias pasar en el contructor o mediante un
metodo, por ejemplo, llamado CrearDibujo(Dibujo miDibujo)



Sí, es así como pensaba hacerlo. Pero se me presenta el siguiente problema.

He puesto a mi clase de nombre "Dibujo" para que entendiérais el
ejemplo. Ya que lo he puesto, seguiré con ese nombre:

Dibujo tiene una serie de variables privadas que lo caracterizan. Si
una clase es quien se encarga de crear los Dibujos mediante un método
CrearDibujo, esta clase creadora debe poder acceder a todos esos datos
internos del Dibujo. Pero según la metodología, un objeto no debe
ofrecer acceso a sus datos internos, sino que todos deben usar su
interfaz pública.

¿Cómo podría hacerlo? Sabiendo que para la creación de un Dibujo se
necesitan como datos imprescidibles:

ArrayList
int[ , ] (matriz bidimensional de enteros)
Size (ancho y alto)


Mi duda entonces es:
Si un objeto A necesita ser guardado al disco, y un objeto B se encarga
de realizar esa tarea... ¿qué de mecanismo debería usar B para acceder a
las variables internas de A?
Respuesta Responder a este mensaje
#3 Fernando Marin
21/11/2004 - 14:00 | Informe spam
No puedes acceder directamente a los datos, pero si que puedes acceder
mediante metodos a las variables.

El lector de dibujos puede ser una clase que heredar de dibujo, ser un
metodo de dibujo o tener una variable interna que fuera un dibujo, tambien
puedes hacer que dibujo herede de una clase que tenga funciones de
serialización.

Bueno para no liarte mas, lo principal es que aunque no debes acceder
directamente a una variable si puedes acceder a ella mediante metodos o
funciones ejemplo.

Dibujo tiene entre otras dos carácteristicas:
int iAlto;
int iAncho;

No puedes acceder directamente a ellas, pero si mediante metodos como:
GetAlto()
SetAlto()

Luego si quieres ver el alto de un objeto dibujo..

CDibujo dijujo;

x=dibujo.GetAlto(); BIEN
dibujo.SetAlto(200); BIEN

en cambio no podrias acceder directamente

x=dibujo.iAlto; MAL
dibujo.iAlto 0; MAL


Fernando Marin

http:\\www.arrendamientos.biz


"José Manuel Nieto" escribió en el mensaje
news:
Diego Jancic wrote:
Creo que deberias, en el caso que diste vos, crear un objeto aparte
llamado Dibujo o Imagen, el cual se lo podrias pasar en el contructor o
mediante un metodo, por ejemplo, llamado CrearDibujo(Dibujo miDibujo)



Sí, es así como pensaba hacerlo. Pero se me presenta el siguiente
problema.

He puesto a mi clase de nombre "Dibujo" para que entendiérais el ejemplo.
Ya que lo he puesto, seguiré con ese nombre:

Dibujo tiene una serie de variables privadas que lo caracterizan. Si una
clase es quien se encarga de crear los Dibujos mediante un método
CrearDibujo, esta clase creadora debe poder acceder a todos esos datos
internos del Dibujo. Pero según la metodología, un objeto no debe ofrecer
acceso a sus datos internos, sino que todos deben usar su interfaz
pública.

¿Cómo podría hacerlo? Sabiendo que para la creación de un Dibujo se
necesitan como datos imprescidibles:

ArrayList
int[ , ] (matriz bidimensional de enteros)
Size (ancho y alto)


Mi duda entonces es:
Si un objeto A necesita ser guardado al disco, y un objeto B se encarga de
realizar esa tarea... ¿qué de mecanismo debería usar B para acceder a las
variables internas de A?

Respuesta Responder a este mensaje
#4 José Manuel Nieto
21/11/2004 - 16:51 | Informe spam
Fernando, muchas gracias por tu ayuda. Pero mi requisito es mucho más
exigente.

Es buena solución de lo que me hablas, el problema surge de que quiero
crear un sistema de guardado muy flexible y que al guardar el Dibujo
haya una clase a modo de ENCODER, es decir una clase que se encargue de
tomar los datos del dibujo y escribirlos en un formato determinado.

Lo mismo sería para extraer los datos de un formato determinado. Habría
una clase Decoder, que se encargaría de leer de un stream y formar un
Dibujo basándose en los datos leídos.

Me gustaría que la manera de guardar el Dibujo pudiese ser algo parecido a:

- Dibujo.Save(Stream stream, IDidujoEncoder encoder)

o bien:

- AlmacenajeDibujos.Save(Dibujo dibujo, IEncoderDibujo, Stream stream);



¿De qué manera podría lograrlo haciéndolo de acuerdo a un buen diseño?
Sobre todo hay que tener en cuenta que el IEncodeDibujo deberá COGER
datos internos del dibujo, imaginemos, sus píxeles y su profundidad de
color.

Si alguien me puede ayudar, le estaré muy agradecido.



Fernando Marin wrote:
No puedes acceder directamente a los datos, pero si que puedes acceder
mediante metodos a las variables.

El lector de dibujos puede ser una clase que heredar de dibujo, ser un
metodo de dibujo o tener una variable interna que fuera un dibujo, tambien
puedes hacer que dibujo herede de una clase que tenga funciones de
serialización.

Bueno para no liarte mas, lo principal es que aunque no debes acceder
directamente a una variable si puedes acceder a ella mediante metodos o
funciones ejemplo.

Dibujo tiene entre otras dos carácteristicas:
int iAlto;
int iAncho;

No puedes acceder directamente a ellas, pero si mediante metodos como:
GetAlto()
SetAlto()

Luego si quieres ver el alto de un objeto dibujo..

CDibujo dijujo;

x=dibujo.GetAlto(); BIEN
dibujo.SetAlto(200); BIEN

en cambio no podrias acceder directamente

x=dibujo.iAlto; MAL
dibujo.iAlto 0; MAL


Fernando Marin

http:\\www.arrendamientos.biz


"José Manuel Nieto" escribió en el mensaje
news:

Diego Jancic wrote:

Creo que deberias, en el caso que diste vos, crear un objeto aparte
llamado Dibujo o Imagen, el cual se lo podrias pasar en el contructor o
mediante un metodo, por ejemplo, llamado CrearDibujo(Dibujo miDibujo)



Sí, es así como pensaba hacerlo. Pero se me presenta el siguiente
problema.

He puesto a mi clase de nombre "Dibujo" para que entendiérais el ejemplo.
Ya que lo he puesto, seguiré con ese nombre:

Dibujo tiene una serie de variables privadas que lo caracterizan. Si una
clase es quien se encarga de crear los Dibujos mediante un método
CrearDibujo, esta clase creadora debe poder acceder a todos esos datos
internos del Dibujo. Pero según la metodología, un objeto no debe ofrecer
acceso a sus datos internos, sino que todos deben usar su interfaz
pública.

¿Cómo podría hacerlo? Sabiendo que para la creación de un Dibujo se
necesitan como datos imprescidibles:

ArrayList
int[ , ] (matriz bidimensional de enteros)
Size (ancho y alto)


Mi duda entonces es:
Si un objeto A necesita ser guardado al disco, y un objeto B se encarga de
realizar esa tarea... ¿qué de mecanismo debería usar B para acceder a las
variables internas de A?
Respuesta Responder a este mensaje
#5 ArvPart
25/11/2004 - 09:46 | Informe spam
José Manuel Nieto wrote:
Me gustaría que la manera de guardar el Dibujo pudiese ser algo parecido a:

- Dibujo.Save(Stream stream, IDidujoEncoder encoder)

o bien:

- AlmacenajeDibujos.Save(Dibujo dibujo, IEncoderDibujo, Stream stream);



¿De qué manera podría lograrlo haciéndolo de acuerdo a un buen diseño?
Sobre todo hay que tener en cuenta que el IEncodeDibujo deberá COGER
datos internos del dibujo, imaginemos, sus píxeles y su profundidad de
color.

Si alguien me puede ayudar, le estaré muy agradecido.




Si es la primera opcion, no hay problema, porque dibujo es capaz de ver
sus propios miembros internos, además de saber qué información es
precisa. Si escoges la segunda, deberás saltarte las normas de
encapsulación para poder hacerlo.
Echale un ojo a técnicas como serialización (quizá pueda ser una
solución) o reflexion. Esta última opcion es la que te permite saltarte
las reglas. Además de peligrosa, es bastante lenta.
ArvPart
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida