Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
ezequiel.grillo
Nivel 4



Registrado: 11 Abr 2011
Mensajes: 74

Carrera: Informática y Sistemas
argentina.gif
MensajePublicado: Dom Mar 31, 2013 4:59 pm  Asunto:  Ayuda Ejercicio para Entregar Responder citandoFin de la PáginaVolver arriba

Gente necesito una mano con un ejercicio que hay q entregar este miercoles.
No le puedo agarrar la mano a Smalltalk y se me esta complicando bastante Sad.

Tengo que hacer una maquina expendedora de bebidas. Estaba trantado de hacer un metodo "hacedorDeCafeConLeche: unVaso conAzucar: cucharadasAzucar"

unVaso es de tipo Vaso y tiene un contenido y una cantDeCucharadasDeAzucar (atributos).

Les dejo el enunciado (PDF) donde esta la especificacion de lo que tendria que hacer este metodo (es un embole estar copiando y pegando ademas ahi esta mas ordenado).

Si me pueden dar una manito con esto porque sino me parece que me voy a ir despidiendo de algo 3 por este cuatri Sad Sad jaja


   OfflineGalería Personal de ezequiel.grilloVer perfil de usuarioEnviar mensaje privadoMSN Messenger
Bistek
Nivel 8



Registrado: 07 May 2010
Mensajes: 691

Carrera: Informática
CARRERA.informatica.3.jpg
MensajePublicado: Dom Mar 31, 2013 5:59 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

El ejercicio esta basicamente hecho en el enunciado pero describiendo los algoritmos con palabras. Cada cuadrado es una clase que tenes que implementar. Los nombres de la parte de arriba del cuadrado tomalos como atributos de la clase y lo que esta abajo son los metodos que tiene que implementar.
Recorda que los metodos representan las acciones que puede realizar un objeto perteneciente a la clase, por lo tanto deben usarse verbos para los nombres. Un metodo llamado "hacedorDeCafeConLeche: unVaso conAzucar: cucharadasAzucar" es incorrecto, deberia ser "hacerCafeConLecheEn: unVaso conAzucar: cantidadDeCucharadasDeAzucar"

No se que mas te puedo decir para ayudarte. Podrías agregar clases si es necesario, por ejemplo, para representar el vaso


 Género:Masculino  OcultoGalería Personal de BistekVer perfil de usuarioEnviar mensaje privado
ezequiel.grillo
Nivel 4



Registrado: 11 Abr 2011
Mensajes: 74

Carrera: Informática y Sistemas
argentina.gif
MensajePublicado: Dom Mar 31, 2013 6:57 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Si mas o menos eso lo entendi pero me mareo cuando lo voy a implementar en Smalltalk.
Una cosa que no aclare es que en realidad el verdadero ejercicio que tenemos que hacer es hacer pasar unas pruebas (usando el TestRunner).

Por ejemplo este es el codigo de uno de los test:

Código:
testCafe
   
   | unaMaquinaDeCafe unVaso |
   unaMaquinaDeCafe := MaquinaDeCafe new.
   unVaso := Vaso new.
   
   unaMaquinaDeCafe prepararCafeEn: unVaso conAzucar: 0.
   
   self assert: (unVaso volcarContenido = 'cafe').
   self assert: (unVaso volcarContenido = nil).


Lo que se me habia ocurrido es armar una cola o algo asi y que cada vez que llama a volcarContenido saque el ultimo elemento que se agrego.
Pero no entiendo bien como hacer la implementacion de "unaMaquinaDeCafe prepararCafeEn: unVaso conAzucar: 0".

Lo que me marea es esa manera de escribir que tiene smalltalk (tal vez porque siempre programe en C/C++ y ahora me tiraron smalltalk por la cabeza y arreglate jaja)


   OfflineGalería Personal de ezequiel.grilloVer perfil de usuarioEnviar mensaje privadoMSN Messenger
Bistek
Nivel 8



Registrado: 07 May 2010
Mensajes: 691

Carrera: Informática
CARRERA.informatica.3.jpg
MensajePublicado: Dom Mar 31, 2013 10:47 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Si tenes un vaso y le echas cafe el contenido es 'cafe', si le echaste cafe y leche el contenido es 'cafe con leche', le echas azucar a esto y tenes 'cafe con leche con azucar' por ejemplo. No veo que haga falta tomar registro de los elementos individuales que vas echando porque una vez en el vaso son inseparables.

Por cierto, lo que te marea no es el lenguaje, es que no estas pensando en objetos. Fuiste a las clases? este ejercicio suelen resolverlo en clase pasando al frente a modo de juego.

Todo lo que tenes en smalltalk son objetos y mensajes. La clave de este ejercicio (y de poo) es ir delegando responsabilidades. La maquina de cafe no sabe como preparar el cafe con leche, solo tiene el vaso. Entonces le pasa el vaso al hacedor de cafe con leche y le dice que prepare el cafe con leche. El hacedor de cafe con leche conoce la receta del cafe con leche, pero no tiene ni el cafe ni la leche, entonces le pasa el vaso al cafetero y le dice que le ponga cafe adentro, cuando termina lo recupera y se lo pasa al lechero para que le ponga leche, lo recupera de nuevo y el cafe con leche ya esta listo, entonces le devuelve el vaso a la maquina que inicialmente habia pedido la bebida.

Como ves, cada objeto tiene responsabilidad limitada, la maquina conoce las bebidas que puede preparar, los hacedores de cafe y te conocen la receta de los mismos, y el cafetero y el lechero solo saben poner su producto adentro del vaso.




Última edición por Bistek el Dom Mar 31, 2013 10:58 pm, editado 1 vez
 Género:Masculino  OcultoGalería Personal de BistekVer perfil de usuarioEnviar mensaje privado
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Dom Mar 31, 2013 10:52 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Por otro lado, si hicieras lo de sacar un contenido por vez, no se cumplirían los asserts. Está claro por las purebas que después de sacar café una vez el vaso queda vacío.

Fijate cómo son los otros tests (o sea, los de café con azúcar y con leche); eso te debería decir qué es lo que tenés que implementar.

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Dom Mar 31, 2013 10:57 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Perdón, no había leido el enunciado; dice que el cafetero, el lechero y el azucarero "ponen un papel en el vaso".

¿Por qué no posteás las pruebas de alguna bebida más compleja?

BTW, por como está redactado el que implementa la parte de contener las cosas que le pusieron es el vaso, no la máquina de café.

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
ezequiel.grillo
Nivel 4



Registrado: 11 Abr 2011
Mensajes: 74

Carrera: Informática y Sistemas
argentina.gif
MensajePublicado: Lun Abr 01, 2013 12:21 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Esta es la prueba mas "completa" de las que pusieron:

Código:
testTeConLecheConTresDeAzucar
   
   | unaMaquinaDeCafe unVaso |
   unaMaquinaDeCafe := MaquinaDeCafe new.
   unVaso := Vaso new.
   
   unaMaquinaDeCafe prepararTeConLecheEn: unVaso conAzucar: 3.
   
   self assertTrue: (unVaso volcarContenido = 'te').
   self assertTrue: (unVaso volcarContenido = 'leche').
   self assertTrue: (unVaso volcarContenido = 'azucar').
   self assertTrue: (unVaso volcarContenido = 'azucar').   
   self assertTrue: (unVaso volcarContenido = 'azucar').
   self assertTrue: (unVaso volcarContenido = nil).



Si, estuve en clase cuando hicieron el ejercicio y entendi que el objetivo era ir separando las responsabilidades. Mi problema es que a la hora de traducir el "pseudo-codigo" que esta en el pdf nose como hacerlo. No entiendo bien el funcionamiento de Smalltalk para ir delegando entre las clases.

Por ejemplo en el metodo que puse antes "unaMaquinaDeCafe prepararCafeEn: unVaso conAzucar: 0"

A quien corresponderia ese metodo?, a la clase MaquinaDeCafe o al Vaso?
Tengo que hacer otro metodo a parte q sea "prepararCafeEn:"(el que haria esto seria el "hacedorDeCafé")? Si es asi como hago para decirle dentro "unaMaquinaDeCafe prepararCafeEn: unVaso conAzucar: 0" anda a "prepararCafeEn:" y poné cafe??

Muchas pregunta no?? Rolling Eyes .
Perdon que sea tan rompepelotas y gracias por la ayuda Wink


   OfflineGalería Personal de ezequiel.grilloVer perfil de usuarioEnviar mensaje privadoMSN Messenger
Bistek
Nivel 8



Registrado: 07 May 2010
Mensajes: 691

Carrera: Informática
CARRERA.informatica.3.jpg
MensajePublicado: Lun Abr 01, 2013 12:51 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

unaMaquinaDeCafe prepararCafeEn: unVaso conAzucar: 0

La sintaxis es siempre "objeto metodo:argumento"
Aca invocas al metodo "prepararCafeEn: argumento1 conAzucar: argumento2" del objeto unaMaquinaDeCafe que es una instancia de la clase MaquinaDeCafe
Los metodos con varios argumentos se escriben con ese estilo, pero corresponden a un solo metodo.
Tenes que implementar ese metodo en la clase MaquinaDeCafe, tal como lo harias en algo2... esta bien lo que decis del hacedorDeCafe, fijate como podes hacer para que la maquina de cafe conozca al hacedor de cafe y asi poder llamar a sus metodos.

Si aun no entendes, ponete a leer sobre delegacion. Consegui el libro de fontela o busca esa version vieja del mismo que se consigue en internet.


 Género:Masculino  OcultoGalería Personal de BistekVer perfil de usuarioEnviar mensaje privado
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Lun Abr 01, 2013 9:50 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Adhiero a la respuesta de Bistek.

Al respecto del lenguaje, ¿entendés lo que estńa haciendo los dos tests que pegaste? (qué se instancia, cómo, qué métodos se llaman, a qué objeto pertenecen, cuáles son los parámetros)

Sobre el particular la implementación de vaso necesita un contenedor para guardar los "papelitos" (sobre lo de colas que dijiste antes, ¿no se te ocurre un contenedor más sencillo?). Sobre el enunciado, está mal documentado lo que hace el azucarero; no escribe tantas equis como cucharadas de azúcar haya, pone un papelito "azúcar" en el vaso por cada cucharada.

Fijate de entender bien los tests porque te dan un montón de información (por ejemplo, ¿el vaso es LIFO o FIFO?). Igualmente vale lo de Bistek, antes preocupate por entender bien clases, métodos y objetos, lo básico de OOP.

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
ezequiel.grillo
Nivel 4



Registrado: 11 Abr 2011
Mensajes: 74

Carrera: Informática y Sistemas
argentina.gif
MensajePublicado: Mar Abr 02, 2013 1:54 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Gracias por las respuestas. Pude avanzar en el ejercicio pero tengo una duda en el metodo "volcarContenido".
Lo que hice al final es ir guardando en una lista (LinkedList) lo que se iba agregando al vaso (primero agrego cafe o te, despues leche si es q lo pide y por ultimo azucar tmb si lo pide) pero no se bien como ir sacando de la lista.
Por lo q entiendo el vaso seria un FIFO pero hay algun metodo que saque el primero de una lista (y lo borre)??


   OfflineGalería Personal de ezequiel.grilloVer perfil de usuarioEnviar mensaje privadoMSN Messenger
cyng
Nivel 8



Registrado: 04 Jul 2010
Mensajes: 472

Carrera: Informática y Sistemas
paraguay.gif
MensajePublicado: Mar Abr 02, 2013 12:00 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

El linkedList tiene un metodo que se llama removeFirst que remueve el elemento y lo devuelve.
Para mas info te paso el link:

http://www.gnu.org/software/smalltalk/manual-base/html_node/LinkedList_002dadding.html#LinkedList_002dadding


 Género:Femenino  OfflineGalería Personal de cyngVer perfil de usuarioEnviar mensaje privado
ezequiel.grillo
Nivel 4



Registrado: 11 Abr 2011
Mensajes: 74

Carrera: Informática y Sistemas
argentina.gif
MensajePublicado: Mar Abr 02, 2013 5:30 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Gracias gente ya pasaron todas las pruebas.....costo pero al final se me activo el cerebro jajaj

Abrazo.


   OfflineGalería Personal de ezequiel.grilloVer perfil de usuarioEnviar mensaje privadoMSN Messenger
cristian3629
Nivel 1



Registrado: 03 Dic 2012
Mensajes: 4


argentina.gif
MensajePublicado: Mie Abr 03, 2013 2:43 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Hola! Tengo un problema con el mismo ejercicio, básicamente es sobre assert.
En las pruebas realizan esto
self assertTrue(algo="cadena").
y me salta un error del estilo doesNotUnderstand: #assertTrue
Básicamente hago esto:

|p1 contenidos objeto|
contenidos :=OrderedCollection new.
p1 := String new.
p1 := 'cafe'.
contenidos addLast:p1.
objeto:=contenidos removeLast .
self assertTrue(objeto=´cafe´). <------acá esta el problema!


Si alguien me puede decir una pista se lo agradecería mucho!
Saludos


 Género:Masculino  OfflineGalería Personal de cristian3629Ver perfil de usuarioEnviar mensaje privado
cyng
Nivel 8



Registrado: 04 Jul 2010
Mensajes: 472

Carrera: Informática y Sistemas
paraguay.gif
MensajePublicado: Mie Abr 03, 2013 2:50 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

En la lista aclararon que se debe usar el assert y NO el assertTrue


 Género:Femenino  OfflineGalería Personal de cyngVer perfil de usuarioEnviar mensaje privado
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro
No podés responder a temas en este foro
No podés editar tus mensajes en este foro
No podés borrar tus mensajes en este foro
No podés votar en encuestas en este foro
No Podéspostear archivos en este foro
No Podés bajar archivos de este foro


Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.3947s ][ Pedidos: 20 (0.3173s) ]