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
v.1