Clase 3 - Bloques y Colecciones

publicado a la‎(s)‎ 1 sept. 2011 16:45 por gisela decuzzi   [ actualizado el 1 sept. 2011 18:07 ]
Esta clase vimos con mucho mas detalle Colecciones y Bloques (ademas de repasar lo que ya habiamos visto).
Empezamos hablando de los bloques. Hicimos mucho MUCHO hincapié que un bloque es algo que ya conociamos: un objeto que entiende mensajes. Particularmente recalcamos que el bloque representa código y por lo general lo que vamos a querer hacer con el código es evaluarlo y esto se logra a traves del mensaje value.

Hablamos sobre la ventaja y el uso de los bloques por parte de los objetos booleanos y por qué escribir
pepita energia < 50 ifTrue: (pepita come: 100)

No se comporta como querríamos, ya que lo que buscamos es que solamente coma si su energia es < 50, por lo que digimos que queríamos diferir la evaluación de ese código (pepita come: 100)  y que para lograr esto contamos con los objetos bloques.

Para que quede claro hablamos de los objetos booleanos true y false e hicimos una posible implementación para ifTrue: llegamos a qué:
true>>ifTrue: bloque
    bloque value.
false>>ifTrue: bloque
    "no hacemos nada"
Después dijimos que en Pharo es muy similar la implementación solo que lo implementa devolviendo algo (pero que no hacía al caso del tema de los bloques).

NOTA: Así como los números ya vienen, los booleanos también y los podemos usar libremente por todo nuestro Pharo. Eso incluyue al Object Browser por lo que no es necesario definirlos ni escribir los métodos que usamos en el pizarrón.

Como comentario al margen hablamos de que no es lo mismo devolver (retornar) que mostrar. Digimos que mostrar es exponer algo al mundo mientras que retornar es algo interno a nuestro programa.

Hablamos de bloques con parámetros e implementamos nuestro bloque que espera tres parámetros y da una solución para la raíz de un polinomio cuadrático. Nos quedó algo asi: [:a :b :c | (b negated + ((b raisedTo: 2)+ (4*a*c)) sqrt)/(2*a)]
Para evaluarlo dijimos que necesitabamos un mensaje con 3 parámetros y dijimos que los bloques entienden el mensaje value:value:value:
Por ejemplos si queremos que se evalúe de forma que a valga 2 b 3 y c 4 teniamos que evaluar:
[:a :b :c | (b negated + ((b raisedTo: 2)+ (4*a*c)) sqrt)/(2*a)] value: 2 value: 3 value: 4.

Como verán el código que está dentro del loque no es lo mas sencillo y está lleno de paréntesis para los que no estan muy cancheros con cuestiones del lenguaje y su presedencia acá tienen un apunte cortito y muy muy interesante (con muchos ejemplos).

Seguimos avanzando para entrar en el tema de colecciones, quisimos que pepita se fuera de viaje y como buena golondrina (?) se llevaba su equipaje.
Empezamos diciendo que pepita se llevaba unas zapatillas nike, una cartera luisBoton y una guitarra gibson. Ahora como pepita no es una golondrina muy acaudalada se toma de esos viajes baratos pero que NO permiten pasarse en el peso... asi que queríamos saber el peso de la valija de pepita, pasamos por varias versiones y nos dimos cuenta que no sabiamos cuantos items se iba a llevar pepita en cada momento, ni queriamos tener que modificar código cada vez que pepita se lleve un nuevo elemento en su valija.
Llegamos a la conclusión que lo que queríamos era modelar un conjunto, y como estamos en el paradigma orientado a objetos dijimos que necesitabamos un objeto que modelara la idea de conjunto y que me sirviera cada vez que quiero tener muchas cosas de algo, por ejemplo en nuestro caso... nos serviría para modelar la valija en sí que es (para nosotros) un conjunto de items.
Nos quedamos con la idea de conjunto y hablamos de lo que queriamos hacer, como modela smalltalk esta idea, hablamos del objeto set que es objeto que entiende mensajes para agregar, sacar, contar cosas y varias cosas más.
Hicimos una listita de mensajes que entienden las colecciones:
  • add:
  • remove:
  • includes:
  • size
  • isEmpty
  • count:
  • sum:
  • select:
  • collect:
Pueden ver mas mensajes y de hecho lo pueden tener siempre con ustedes el apunte de la guía de lenguajes (sí, el siempre incluye el parcial).
Finalmente... hicimos el tp presencial.

¿Como seguimos?

Leyendo! Este resumen para empezar y los apuntes (con los links que les dejamos ahora y en las clases anteriores)
Practicando! Mucho, pueden hacer toda la guía 1 de objetos sin problemas.
Adjunto en este post pueden encontrar un apunte de colecciones y bloques mas explicado para ampliar lo que vimos en clase.

La materia sigue y cada vez se hace mas complicada, les recomendamos que se mantengan al día porque a partir de acá arrancamos para aprender nuevos conceptos asi que si no tenemos claros la base hace que todo sea cuesta arriba y eso no esta bueno.

Próxima clase

La clase que viene vamos a hacer un nuevo tp presencial en el laboratorio por lo que les aconsejamos que no falten :).

ċ
bloquesColeccionesBasico.pdf
(87k)
gisela decuzzi,
1 sept. 2011 18:13
Comments