Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Paradigmas] Duda ejercicio objetos
Autor Mensaje
mantovani.leandro Sin conexión
Empleado de Fotocopiadora
Las despedidas son esos dolore...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 31
Agradecimientos dados: 1
Agradecimientos: 2 en 2 posts
Registro en: Dec 2013
Mensaje: #1
[Paradigmas] Duda ejercicio objetos Ejercicios Paradigmas de Programación
Hola, quisiera saber porque cuando uso este metodo asi:



esAgresiva:persona
^celulasAmenazadas > persona cantidadCelulas * 0.1.



me dice que no entiende el mensaje "false"

y cuando lo uso asi:



esAgresiva:persona
^persona cantidadCelulas * 0.1 < celulasAmenazadas.



anda perfecto. Esa duda es la que tengo. Saludos y gracias !!

celulasAmenazadas es una variable de clase.

cantidadCelulas es un metodo que devuelve la cantidad de celulas de una persona.
(Este mensaje fue modificado por última vez en: 30-10-2014 16:43 por CarooLina.)
30-10-2014 11:30
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Psycrow Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Oct 2010
Mensaje: #2
RE: [SmallTalk] Duda ejercicio objetos
Hola,

tiene que ver con la precedencia del lenguaje Smalltalk.

Las reglas de precedencia para el envío de mensajes son:
- siempre se va de izquierda a derecha
- después los mensajes unarios (por ejemplo, cantidadCelulas)
- después los mensajes binarios (por ejemplo, * y <)
- después los mensajes de palabra clave (por ejemplo, esAgresiva=)

Los paréntesis sirven para forzar una ejecución particular, los agregué yo para explicitar el orden de ejecución en tus dos ejemplos



esAgresiva:persona
^(celulasAmenazadas > (persona cantidadCelulas)) * 0.1



Los mensajes se envían en el siguiente orden
- el objeto referenciado por persona recibe cantidadCelulas (suponete que devuelve el objeto X)
- el objeto referenciado por celulasAmenazadas recibe el mensaje > con el argumento X (supone que todo eso devuelve el objeto booleano B)
- finalmente, el objeto B recibe el mensaje * con el argumento 0.1
- como B es un booleano (true o false) no entiende el mensaje * y se rompe

En tu otro ejemplo



esAgresiva:persona
^((persona cantidadCelulas) * 0.1) < celulasAmenazadas.



Los mensajes se envían en el siguiente orden
- el objeto referenciado por persona recibe cantidadCelulas (suponete que devuelve el objeto X)
- el objeto X recibe el mensaje * con el argumento 0.1 (supone que todo eso devuelve el objeto Y)
- finalmente, el objeto Y recibe el mensaje < con el objeto reverenciado por la variable celulasAmenazadas como argumento

En resumen, si querés mantener el primer ejemplo, tenés que agregar un par de paréntesis para que funcione



esAgresiva:persona
^celulasAmenazadas > (persona cantidadCelulas * 0.1)



Saludos,
30-10-2014 11:54
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Desert69 Sin conexión
Presidente del CEIT
Sin estado :( / "Anarquia...
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.396
Agradecimientos dados: 202
Agradecimientos: 297 en 186 posts
Registro en: Jun 2008
Mensaje: #3
RE: [SmallTalk] Duda ejercicio objetos
El error debe ser "false no entiende el mensaje *".

Acordate las reglas de precedencia: primero los mensajes unarios (los que no tienen parámetros), después los binarios (los que son chirimbolitos), y por último los de palabra clave. Dentro de la misma categoría, va todo de izquierda a derecha.

En tu caso, primero haría "persona cantidadCelulas", que va a dar un número. Y la línea a evaluar quedaría: "^celulasAmenazadas > 42 * 0.1" (asumiendo que devolvió 42).

Todo lo que quedan ahí son mensajes binarios, entonces va de izquierda a derecha: primero resuelve celulasAmenazadas > 42, y evidentemente eso le da false. Entonces ahora tiene "^false * 0.1", y, buen, false no entiende *.

En tu segundo caso, aplicando esto que te cuento, fijate que tiene sentido que funcione.

¿Qué le faltaría a tu primer versión para que ande como esperás? ¿Cómo te quedaría esa línea?


De todos modos, estamos en PdeP, queremos programar bien. Si cuesta tanto entender esa línea de código, probablemente sea un buen momento para pensar que te están faltando abstracciones. "persona cantidadCelulas * 0.1" pareciera representar algo en tu dominio: ¿por qué no hacer un método nuevo que resuelva eso? Y entonces una persona sería agresiva cuando la [nombre de tu nuevo método] de esa persona fuera menor a la cantidad de celulas amenazadas. Sin saber tu dominio, me arriesgo a nombres como "nivelDeCelulasCritico" o algo por el estilo.

¡Salutes!

[Imagen: a2.php]
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
30-10-2014 11:57
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
mantovani.leandro Sin conexión
Empleado de Fotocopiadora
Las despedidas son esos dolore...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 31
Agradecimientos dados: 1
Agradecimientos: 2 en 2 posts
Registro en: Dec 2013
Mensaje: #4
RE: [SmallTalk] Duda ejercicio objetos
Gracias a los dos por las respuestas. Creo que me perdi esa clase. Tiene algun apunte que explique estas cosas teoricas de smalltalk?

Un pesimista es un optimista con experiencia
30-10-2014 12:08
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
.-Fede-. Sin conexión
Profesor del Modulo A

*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 254
Agradecimientos dados: 68
Agradecimientos: 41 en 39 posts
Registro en: Nov 2011
Facebook
Mensaje: #5
RE: [SmallTalk] Duda ejercicio objetos
Yo justo me puse a hacer este ejercicio ayer, es el de Dr house no? mañana me pongo con la segunda parte.

Fijate que hay una wiki que explica todo, creo que es uqbar o algo asi, buscala.
30-10-2014 14:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Desert69 Sin conexión
Presidente del CEIT
Sin estado :( / "Anarquia...
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.396
Agradecimientos dados: 202
Agradecimientos: 297 en 186 posts
Registro en: Jun 2008
Mensaje: #6
RE: [SmallTalk] Duda ejercicio objetos
http://uqbar-wiki.org/index.php?title=Pr...e_Mensajes

[Imagen: a2.php]
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
30-10-2014 16:34
Visita su sitio web 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.