Bloques y Colecciones - 12.4.2011 y 13.4.2011

publicado a la‎(s)‎ 13 abr. 2011 7:40 por Guillermo Polito   [ actualizado el 14 abr. 2011 12:37 por Clara Allende ]

Repaso

Bloques

  • ¿Qué es un bloque?  Por ejemplo
    • vida > 1 ifTrue: [ estado := 'muerto' ]
  • ¿Cómo se ejecutan los bloques? Con el mensaje #value
Bueno, hay bloques un poco más complejos, que reciben parámetros: Por ejemplo
  • [ :numero | numero * 4 ]
A esos bloques con parámetros no les sirve #value, porque esperan un parámetro!  A esos hay que mandarles #value:
  • [ :numero | numero * 4 ] value: 3
También existe el mensaje #value:value: que es para bloques de más parámetros como [ :n1 :n2 | n1 * n2 ]

  • [ :n1 :n2 | n1 * n2 ] value: 2 value: 5
Otros usos de bloques
  • (edad > 1) & (edad < 10)
  • (edad > 1) and: [ edad < 10 ]
El #and: cumple con la propiedad de cortocircuito que habíamos visto en pascal.  En cambio el ejemplo con #& no cumple con eso.
Algo parecido pasa con el #or: y el |.

Colecciones

¿Qué es una colección? Una forma de representar conjuntos en objetos (y desde ya que es un objeto).  Tenemos de varios sabores:
  • bag, que le puedo poner cualquier cantidad de objetos, sin restriccion
  • set, que le puedo poner cualquier cantidad de objetos, pero no se banca que haya repetidos
  • ordered, que le puedo poner cualquier cantidad de objetos, y me los guarda en orden
  • sorted, como las ordered pero se les pasa un criterio de ordenamiento
¿Como obtenemos nuevas colecciones en el object browser?
  • las creamos como nuevo conjunto
  • las clonamos de una coleccion base (las colecciones base son bag, set y ordered)
  • a partir de otras colecciones mandando los mensajes asSet, asBag, etc.. para obtener una nueva con las características que queramos. Las sorted en el Object Browser sólo podemos obtenerlas mandando el mensaje asSortedCollection: a otra colección.
¿Que mensajes entienden? (algunos son:)
  • #add:
  • #remove:
  • #size
  • #anyOne
  • #isEmpty
  • #notEmpty
  • #includes:
  • #select:
  • #collect:
  • #detect:
    • Si no tiene ningun elemento que no cumpla la condicion tira un error... pero por suerte existe el mensaje: #detect: ifNone:
  • #anySatisfy:
  • #allSatisfy:
  • #asSet
  • #asBag
  • #asOrderedCollection
  • #asSortedCollection:
  • #sum
  • #inject: into:
  • #do:
Solo para ordered:
  • #at:
  • #at:put:
  • #first
  • #second
  • #last
  • #indexOf:

Para mas detalles de mensajes de colecciones leer GUIA DE LENGUAJES (importante: la guia de lenguaje la pueden tener en el parcial asi que leeanla e imprimanla)
------------------------------------------------------------------------------------------------------------------

Creamos a arturo y dijimos que queríamos que tenga un ejército.
Estuvimos jungando con arturo para que nos diga cosas sobre su ejercito:
    1) soldados vivos
    2) poder total del ejercito. La sumatoria de los poderes. .
    3) sigue en pie
    4) estaAfull
    5) dame carne de canion

¿Como seguimos?

Trabajo Practico

Para la proxima clase de objetos traer IMPRESO la exportacion de la leccion.
Esa leccion tiene que tener todos los objetos que codificaron para saphira Y el/los workspaces con los que probaron

Lo que hay que hacer:

PARA EL CURSO DE LOS MIERCOLES:
Que saphira tenga una cola de comida.  A esa cola se le puede ir agregando soldados (al final), y despues habría que ir diciéndole #cometeUno.  En la cola de saphira no valen repetidos ni muertos.


PARA EL CURSO DE LOS JUEVES:

Dado que el jueves que viene es feriado, entregar el tp a la lista de profesores el jueves que viene con la misma modalidad indicada arriba.
El tp debería cubrir los siguientes puntos (algo de esto ya lo vimos en clase así que sería sólo pasarlo a la máquina y PROBARLO, el workspace se entrega)
1) soldados vivos
2) poder total del ejército
3) carne de canión (obtener un soldado vivo para sacrificar)
4) cometeUno: - A saphira le pasamos un conjunto de soldados sin repetidos y ella elije al más poderoso para morfar

Desafio cafe con leche (Miercoles)

Preguntar al rey arturo, quien es el mas sabroso de su ejercito para un dragon.  Debe funcionar para saphira (el mas sabroso es el que mas poder tiene) y para sombraNocturna (el mas sabroso es el mas herido (que no este muerto, je))

Desafio cafe con leche (Jueves)

Hacer con inject:into: el select:, el collect:, el detect:, min y max. El primero que lo mande a la lista de profesores se lleva el desayuno con medialunitas y todo ^^


Ċ
Guillermo Polito,
13 abr. 2011 8:09
Comments