Tengo dos clases y en una de las clases instancié un objeto. Como sería la sintaxis para utilizar ese objeto en la otra clase. O como podría utilizar ese objeto en otra clase diferente.
Hola Gonzalo,
Si un objeto A instanció un objeto B y necesitás que un objeto C (que no fue instanciado por el objeto A) pueda usar al objeto B entonces podrías hacer que el objeto A devuelva el objeto B como respuesta a uno de sus mensajes y luego enviárselo al objeto C. O bien si el objeto A conoce al objeto C entonces el objeto A puede directamente enviarle un mensaje al objeto C con el objeto B como parámetro.
Dependiendo de qué es lo que quieras modelar puede que ninguna de estas opciones sea la más adecuada.
El objeto C agrega al objeto A.
Muchas gracias
No, en el escenario que planteé el objeto C recibe al objeto B como parámetro en uno de sus mensajes. Se lo pudo haber enviado el objeto A directamente (en caso de que A conozca a C) o algún otro objeto que previamente recibió el objeto B del objeto A.
De todas maneras insisto en que te fijes si realmente necesitás hacer algo así en tu modelo. Por ejemplo en el ejercicio de ayer, el cafetero instanciaba el café pero luego no se lo devolvía al hacedor de café con leche sino que lo ponía en el vaso y era el vaso lo que devolvía, de manera tal que el hacedor de café con leche no necesitó interactuar con el objeto café.
Pero tengo que recorrer el objeto B en un mensaje del objeto C. En otro mensaje del objeto C agrego al objeto A. ¿Como hago para acceder al objeto B (que fue instanciado por el objeto A) en el objeto C?.
Seguramente hay algún concepto que no estoy entendiendo (o varios) y quizá no estoy explicando bien que es lo que quiero hacer.
Gracias
¿Por qué el objeto C tiene que encargarse de recorrer el objeto B si no lo conoce? Supongo que si querés recorrerlo es porque querés obtener algo de ahí, entonces ¿por qué no se encarga el objeto A (que sí conoce al B) de recorrerlo y le da al C lo que el C necesita?
Fijate este ejemplo en donde un disco rígido puede contener varios directorios y a su vez cada directorio puede contener varios archivos:
| resultadoOK unDiscoRigido directorioFebrero directorioMarzo |
resultadoOK := true.
unDiscoRigido := DiscoRigido new.
directorioMarzo := Directorio new.
directorioMarzo establecerNombre: 'Marzo'.
directorioMarzo agregarArchivo: 'Extreme_Programming.pdf'.
directorioMarzo agregarArchivo: 'tp0.st'.
unDiscoRigido agregarDirectorio: directorioMarzo .
directorioFebrero := Directorio new.
directorioFebrero establecerNombre: 'Febrero'.
directorioFebrero agregarArchivo: 'gastos-feb.xls'.
directorioFebrero agregarArchivo: 'links.txt'.
unDiscoRigido agregarDirectorio: directorioFebrero.
(unDiscoRigido existeArchivo: 'links.txt') ifFalse: [resultadoOK := false].
El disco rígido no va a contener archivos sino directorios y por lo tanto no va a poder responder tan fácilmente si existe un archivo en particular. Lo que puede hacer es preguntarle a cada uno de sus directorios si alguno de ellos contiene a ese archivo y responder verdadero cuando algún directorio lo haya encontrado o falso cuando después de haberle preguntado a todos los directorios ninguno lo haya podido encontrar. De esta manera el disco rígido (objeto C) no necesita acceder a los archivos (objetos B) para poder responder si un archivo existe o no; son los directorios (objetos A) los que se encargan de eso y le dicen al disco rígido lo que necesita saber.
Tomás, entendí perfectamente. Ahora tengo el problema de que cuando realizo la búsqueda en el objeto B no contiene (en este caso) ningún archivo. Me ocurre lo siguiente: Cuando realizo el mensaje(el objeto A busca en el objeto B el archivo) dentro de un mensaje del objeto C, el objeto B esta vacio. Pero cuando realizo el mismo mensaje en el Playground me funciona perfectamente. No puedo encontrar el problema de porque me funciona el mismo mensaje en un lugar y en otro no.
Muchas gracias por su tiempo
Muy probablemente no estés probando las mismas instancias de objetos aunque no se entiende exactamente qué es lo que estás probando. Si un directorio está vacío es porque no se le agregó ningún archivo. Y el estado de ese directorio es distinto al de otro, independientemente de que tengan el mismo nombre. Fijate si podés extrapolarlo al ejemplo de los archivos o si no directamente lo podés consultar en la clase del jueves.
Ya esta.
Muchas Gracias