UTNianos

Versión completa: Duda Objetos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola tengo la siguiente duda, tengo un objeto y un método necesito que el metodo devuelva un mensaje de otro objeto, ej:
objeto1: ecologica
objeto2: turbinas
el método(que pertenece a "ecologica") seria asi:
produccion
^turbinas sum.

cómo se tendira que hacer? porque turbinas me lo toma como si fuera una referencia y no otro objeto, si lo hago con un parametro por ej
produccion: unaTurbina.
^ unaTurbina sum.

funciona joya pero es muy al pedo porque siempre va a operar con el mismo objeto.

Gracias.
en la primer solución para que funcione tenes que tener dentro de "ecologica" un atributo tipo "turbinas" (se intuye que es una colección) donde le pasas la referencia de turbinas algo como:

turbinas:unasTurbinas
turbinas:=unasTurbinas

y ahí si podes hacer ...

produccion
^turbinas sum

Sin embargo, es mucho mas correcto hacer lo segundo, podrias delegar y hacer un metodo dentro de turbinas que devuelva la suma que necesitas y haces algo asi:

#ecologica
produccion: unaTurbina
^ unaTurbina suProduccion

#turbinas
suProduccion
^self sum
turbinas debe ser un atributo de ecologica para usarlo así, si no, no es reutilizable y solo podes tener una sola "turbinas" en todo el programa
vos ahi lo queres usar como una instancia de otro objeto, y ya le decis que nombre debe tener la instancia, se puede hacer, pero no te sirve si otra instancia de ecologica, usa una "turbinas2" por ejemplo
(11-09-2014 23:42)cplhenderson escribió: [ -> ]en la primer solución para que funcione tenes que tener dentro de "ecologica" un atributo tipo "turbinas" (se intuye que es una colección) donde le pasas la referencia de turbinas algo como:

turbinas:unasTurbinas
turbinas:=unasTurbinas

y ahí si podes hacer ...

produccion
^turbinas sum

Sin embargo, es mucho mas correcto hacer lo segundo, podrias delegar y hacer un metodo dentro de turbinas que devuelva la suma que necesitas y haces algo asi:

#ecologica
produccion: unaTurbina
^ unaTurbina suProduccion

#turbinas
suProduccion
^self sum

Si es una colección, pero cuando voy a crear un nuevo método no me deja porque dice que las "colecciones no son modificables", gracias a ambos por contestar!
Estás usando Ozono (el Object Browser), ¿no?

Digo, porque es distinto a "Smalltalk posta" en algunas cosas.


Y, fuera de joda: me encanta UTNianos, pero me parece un crimen mandar consultas de PdeP a algún lado que no sea la lista de pdep. Hay tantos tan grosos con tantas ganas de contestar y tirarte la posta allá...
Acá también somos muy grosos y poder tirarte la posta! =P
Primero que todo en objetos, todo es un objeto, así que esa referencia que decis que es, es una referencia a un objeto. Es que me parece que estás confundiendo lo que es un atributo o una referencia interna de un objeto a lo que es un objeto que apunta a otro. Vos tenés que pensar en tu ambiente y a partir de eso resolver el problema. Es decir:

Vos tenés una ecológica que tiene ciertas turbinas, por lo tanto vos lo que vas a tener que hacer es en ecológica vas a crear una referencia a una colección de turbinas, y vas a tener que ir agregándole turbinas...es decir, tendrías que crear un método que sea,

#ecologica >> agregarTurbina: unaTurbina
turbinas add: unaTurbina

Eso te crea una referencia al objeto turbina, y ya lo agregaste a tu colección por lo tanto vos en vez de operar con cada turbina por separado, operas con tu colección cosa que estás haciendo bien, pero lo que tenes que identificar es que cuando usas turbinas estás usando una referencia a otro objeto que es el que tiene referencias a cada una de tus turbinas y por tanto puede operar con ellas.

PD: Redondeando un poco, vos tenes una referencia a la colección y esa colección va a tener una referencia a cada objeto que tenga "asignado". Armate algún diagramita de objetos para entenderlo mejor.
URLs de referencia