Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 1 votos - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Paradigmas de Programación] Objetos - Pharo
Autor Mensaje
elhombre Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 25
Agradecimientos dados: 1
Agradecimientos: 3 en 2 posts
Registro en: Jun 2008
Mensaje: #1
[Paradigmas de Programación] Objetos - Pharo Dudas y recomendaciones Paradigmas de Programación
Buenas!
Desde hace un rato que estoy luchando con el Pharo, y por ahora me gana lejos!!
Estoy haciendo un metodo que cuenta la cantidad de objetos de una coleccion. Lo de estoy haciendo es bastante generoso porque no me sale un cuerno!
Se entiende mas o menos lo que quiero?
Hay una coleccion (es un diccionario) de objetos que tienen un atributo que es "dueño".
Los jugadores son los "dueños" de los objetos, por lo que dentro del diccionario hay objetos que le pertenecen a pepe, otros a pipa, etc.
En la clase jugadores cree el sig metodo, que esta mal!

contarInversiones
(coleccion select:[ :a | a dueño: self ])size.

Alguna idea???
Gracias!!!

F.
(Este mensaje fue modificado por última vez en: 01-10-2010 19:28 por pablo.)
30-09-2010 19:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
LeaTex Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.852
Agradecimientos dados: 55
Agradecimientos: 195 en 50 posts
Registro en: Apr 2008
BlogSpot Facebook Google+ Last.fm LinkedIn Twitter
YouTube
Mensaje: #2
RE: Paradigmas - Objetos
Para empezar una coleción y un diccionario no son exactamente la misma cosa.

En un diccionario vos tenés relaciones del tipo "clave -> valor", donde la clave es un objeto, y el valor otro (cualquier objeto).
Así que no podés tener un diccionario con un atributo "dueño".

Ahora, lo que entiendo de tu planteo, es que tenés una colección (supongo que una OrderedCollection) con objetos, que tienen un atributo (variable de instancia) dueño.
Pensá cómo lo harías a mano, si tus objetos fueran por ejemplo tarjetas con un dueño. Suponete que tus objetos son los naipes y querés saber cuántos naipes de cada palo tenés; digamos que el palo sería el "dueño". Entonces vos irías sacando cartas del mazo, y acomodándolas en montones según el palo. ¿Se entiende?

Supongamos que no sabemos cuántos dueños existen, entonces no sabemos cuántos montones hay que hacer. En tu caso, cada montón sería una nueva colección.

Hay muchas formas de hacerlo, pero una sencilla es la siguiente:

Supongo que una OrderedCollection en Pharo entiendo el mensaje groupBy: entonces deberías hacer:



| coleccionDeObjetos objetosAgrupados |

coleccionDeObjetos := "acá supongo que ya tenés la colección de alguna forma".

objetosAgrupados := coleccionDeObjetos groupBy: [:unObjeto | unObjeto duenio].




Con eso obtenés tus colección de objetos agrupados por dueño, y el resultado (objetosAgrupados) es un diccionario, donde la clave es el dueño y el valor una OrderedCollection con los objetos que le pertenecen.

Luego, para ver los resultados, podés usar algo como:



objetosAgrupados keysAndValuesDo: [:dueño :objs |
Transcript
show: dueño printString;
cr;
show: objs size printString;
cr; cr;
]




Imagino que Dictionary en Pharo entiende el mensaje keysAndValuesDo: así que no debería haber problema.

Cualquier cosa volvé a preguntar.

(Este mensaje fue modificado por última vez en: 30-09-2010 19:58 por LeaTex.)
30-09-2010 19:57
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
LeaTex Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.852
Agradecimientos dados: 55
Agradecimientos: 195 en 50 posts
Registro en: Apr 2008
BlogSpot Facebook Google+ Last.fm LinkedIn Twitter
YouTube
Mensaje: #3
RE: Paradigmas - Objetos
estoy viendo pharo. el mensaje para agrupar objetos de una colección no es groupBy: sino groupedBy:

ejemplo:

(OrderedCollection new)
add: 'aas';
add: 'sfdf';
add: 'fdfd';
yourself ;
groupedBy: [:x | x first ]



y el mensaje keysAndValuesDo: sí existe así que no hay problema ahí.

el Transcript lo tenés que abrir mandando el mensaje open.
ejemplo:



Transcript open.
((OrderedCollection new)
add: 'aas';
add: 'sfdf';
add: 'fdfd';
yourself ;
groupedBy: [:x | x first ])
keysAndValuesDo: [:clave :valor | Transcript show: clave printString; cr; show: valor printString; cr]




01-10-2010 12:34
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
elhombre Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 25
Agradecimientos dados: 1
Agradecimientos: 3 en 2 posts
Registro en: Jun 2008
Mensaje: #4
RE: [Paradigmas de Programación] Objetos - Pharo
Antes que nada, gracias Lea!!
No me aviso de la respuesta y la veo recien ahora!
No estaba mal mi razonamiento, lo que pasa es que en vez de ":" va un "=", bien de salame el error!
Pero despues pusiste algo que me interesa, como hago para que me muestre los objetos de una coleccion?
Y ya que estamos, tengo:
juan:= Jugador new.
Si meto a juan en una coleccion (bag) y la muestro me pone a Bag (a Jugador), o algo asi. Necesitaria que me devuelva Juan, sabes como se hace?
Podria crearle una variable a jugador que diga nombre, pero no me parece lo optimo.
Saludos y gracias de nuevo.
F.
10-10-2010 19:22
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Desert69 En línea
Presidente del CEIT
Sin estado :( / "Anarquia...
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.272
Agradecimientos dados: 149
Agradecimientos: 246 en 158 posts
Registro en: Jun 2008
Mensaje: #5
RE: [Paradigmas de Programación] Objetos - Pharo
lea, el tema es que el groupBy no se usa en PdeP ni en pedo...


arriesgándome a caer en subestimaciones y bla, se me ocurre que lo que necesitabas hacer era contar las inversiones de una persona conociendo la colección de todas las inversiones existentes... entonces, por eso con un inversiones select: [:inversion | inversion dueño = self] estabas más que hecho...


para la pregunta esta nueva, te la desgloso en dos partes...

lo que preguntás puntualmente lo podrías llegar a hacer redefiniendo alguno de los métodos "printOn:" o alguno similar (en Dolphin creo que eran printStream, pero acá sinceramente no lo se)

aún así, te pregunto... ¿estás seguro que necesitás eso? porque pensá que cuando al pedir "Print it" te muestra "a Bag (a Jugador)", lo que estás mostrando no es el nombre de un jugador ni un jugador, sino una colección de jugadores.

Si por algún motivo (para hacer algo) necesitás el nombre de un jugador, pensá que son tres objetos distintos: la colección, el jugador, y su nombre. Entonces, si quisieras tener el nombre "Juan" para hacer algo con ello, a la colección le pedís el jugador (en este caso podría ser jugadores first), y a eso le pedís su nombre (osea, jugadores first nombre)..



ahhhhhh! ahí caí en otra cosa...

cuando vos hacés "juan := Jugador new", a una variable que VOS llamás "juan" le asignás un objeto Jugador. ahora, el objeto Jugador NO TIENE NI IDEA de que existe una variable "juan" que lo referencia, ni tiene sentido que eso pase. Como habrás visto en clase (con pepita, seguramente), al mismo objeto instancia de Jugador referenciado por "juan" lo podés referenciar con otras variables, como, por ejemplo, "jugador", "primo", o cualquier nombre pedorro... incluso podría haber una variable "ernesto" referenciandolo...

lo importante es que tu objeto NO SE ENTERA de quiénes lo apuntan, ni tiene por qué importarle...

pensá que los objetos son abstracciones de la realidad, y, si en la realidad los Jugadores tienen un atributo "nombre", tiene TODO EL SENTIDO que tu clase Jugador tenga una variable de instancia llamada "nombre". Y, ahí, por más que un objeto Jugador con su variable de instancia "nombre" apuntando al string "Juan" sea referenciado por una variable llamada "jose", otra llamada "hermano" y otra llamada "aprendizDeEberLuduenia", el nombre de ESE jugador va a ser Juan.


moraleja: referencia != identidad/atributo/instancia/objeto...

(si tenés apuntes - tanto los de Spigariol del CEIT o los que cuelgan en la página los cursos de la mañana - repasate el capítulo sobre múltiples referencias a la misma instancia y esas cosas...)

[Imagen: a2.php]
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
11-10-2010 19:11
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
elhombre Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 25
Agradecimientos dados: 1
Agradecimientos: 3 en 2 posts
Registro en: Jun 2008
Mensaje: #6
RE: [Paradigmas de Programación] Objetos - Pharo
Gracias Desert!
Estaba casi seguro que era asi como vos decias, pero queria estar seguro.
Hoy se lo consulte a Fleichman y me dijo que no se puede, tengo que agregarle un atributo que se llame nombre.
Para que lo queria? Por ejemplo para armar un ranking. Ordeno la coleccion y me tira (a Jugador a Jugador a Jugador a Jugador a Jugador) y es un pijazo!
Gracias por todo!!
Saludos!
F.
13-10-2010 07:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.