Clase de Responsabilidad y Delegación

Resumen de la clase

La clase se trato de la resolucion de un ejercicio en clase y a partir de esto hicimos incapie en:
  • Como resolvemos un ejercicio
  • Responsabilidades
  • Distintas soluciones al mismo ejercicio
A su vez estuvimos hablando de distintos diagramas:
  • Diagrama de objetos:
    • Nos muestra los objetos y su estado (sus variables y los valores que referencian)
  • Diagrama de colaboracion
    • Nos muestra la interaccion entre los objetos para resolver una cierta problematica, nos da el orden de los mensajes que se envian entre los objetos
  • Diagrama de Clases
    • Nos muestra las clases, los selectores que contiene y las variables que tienen sus instancias. También podemos ver las relaciones que tendran las instancias de las clases. Distinguimos entre las relaciones de tener y usar.
Pero mas importante que los nombres de los diagramas es saber:
  • ¿Para que hacemos el diagrama?
  • ¿Para quien es el diagrama que hacemos?
  • ¿Que queremos mostrar?
Nunca olvidar que la idea del diagrama es comunicar algo a alguien.

Ejercicio

(Resuelto en clase, les dejamos el enunciado)

Rebelion en la Granja

En un campo hay que atender a los animales, que tienen varias necesidades.
Consideremos gallinas y cerdos, que tienen estas carácterísticas.
Cerdo
  • Cuando come aumenta el peso en lo que comió – 200 g (si come menos de 200 g no aumenta nada); si come más de 1 kg se le va el hambre, si no no.
  • Quiero saber, para cada cerdo, cuánto comió la vez que más comió.
  • Siempre conviene vacunarlo.
  • Cuando bebe se le va la sed, y le da hambre.
  • Si come más de tres veces sin beber le da sed.
Gallina
  • Cuando come no se observa ningún cambio, siempre pesa 4 kg.
  • Siempre tiene hambre, nunca tiene sed, nunca conviene vacunarla.
  • Quiero saber, para una gallina, cuántas veces fue a comer.
Como se ve, importa cuánto come un animal cuando come (excepto para las gallinas), pero no cuánto bebe cuando bebe.
Hay varios dispositivos de atención automática a los animales:
  • Comederos: cada comedero da de comer una cantidad fija que varía para cada comedero, puede atender a los animales con hambre que pesen menos de lo que soporta el comedero, que también es un valor que depende del comedero. Un comedero normal necesita recarga si le quedan menos de 10 raciones, cuando se lo recarga se le cargan 30 raciones.
  • Vacunatorios: vacunan a un animal, pueden atender a los animales que conviene vacunar. Un vacunatorio necesita recarga si se queda sin vacunas, al atenderlo se le recargan 50 vacunas.
Una estación de servicio tiene varios dispositivos de atención automática.
Modelar lo que se describió de forma tal de poder:
  1. saber si un animal puede ser atendido por una estación de servicio; o sea, si se lo puede atender en alguno de sus dispositivos.
  2. indicar que un animal se atiende en una estación, en este caso se elige un dispositivo que pueda atenderlo, y se lleva al animal a ese dispositivo para que lo atienda.
  3. saber para un cerdo cuánto comió la vez que más comió.
  4. recargar los dispositivos que necesitan recarga en una estación de servicio.

Variables de Clase y Métodos de clase

publicado a la‎(s)‎ 9 jun. 2011 4:59 por gisela decuzzi   [ actualizado el 9 jun. 2011 5:19 ]

Lo que vimos

Este es un resúmen de la clase con los temas que vimos

Metodos de Clase


Seguimos leyendo de...

Trabajo práctico Integrador:

La próxima clase de objetos se entrega el trabajo práctico integrador (Miércoles 15 o Jueves 16 dependiendo que día cursen).
Recuerden que:
  • Este tp NO es de seguimiento y es obligatorio resolverlo para aprobar la materia.
  • El tp es individual.
  • Se entrega impreso al principio de la clase, y debe de incluirse
    • Código (fileOut hecho de pharo)
    • Workspace donde se prueben todos los puntos del tp
    • Diagrama de clases
  • Consultas que involucren código o resolución del tp a la lista de profesores
  • Consultas de enunciado a la lista del curso.
Acá les dejamos el enunciado:

  • TP Integrador Objetos




Herencia

publicado a la‎(s)‎ 18 may. 2011 20:00 por Guillermo Polito   [ actualizado el 18 may. 2011 20:17 ]

Resumen

 - Herencia como forma de compartir codigo entre instancias de distintas clases.
 - Clase como clasificación de conceptos
 - Abstracciones ricas: Tiene sentido subclasificar cuando tiene una relación conceptual y cuando hay comportamiento diferente y en común.
 - Concepto de clase abstracta
 - Relacion entre herencia y polimorfismo
 - super: es una referencia al mismo objeto que self.  Cambia el method lookup para empezar desde la clase inmediatamente superior a donde está escrito el método.
 - Method lookup V. 3.47

¿Qué TP tengo que hacer para la semana que viene?

El tp que está attacheado al post :)

Acuerdensé que la fecha de entrega del tp es:
 - Para quienes no tengan que reentregar TP de funcional, el martes a la mañana, impreso a Germán, Carla o Nico (quién ande por ahí).  Esto es así para empezár con lógico con menos problemas en la cabeza :).
 - Quienes tengan que reentregar el TP de funcional, tienen tiempo para entregarlo por email a la lista de profesores el día miércoles 25 hasta las 12:00 del mediodía.

¿Qué tengo que leer para saber más de herencia, repasar, ser un groso, sacarme un 10 en objetos o levantarme minitas?

Para todo, menos para levantar minitas, pueden leer aca:

- Objetos en general: http://uqbar.no-ip.org/uqbarWiki/index.php/Paradigma_de_Objetos
- Herencia: http://uqbar.no-ip.org/uqbarWiki/index.php/Herencia
- Method Lookup: http://uqbar.no-ip.org/uqbarWiki/index.php/Paradigma_de_objetos_-_method_lookup
- Redefinición: http://uqbar.no-ip.org/uqbarWiki/index.php/Redefinici%C3%B3n
- super: http://uqbar.no-ip.org/uqbarWiki/index.php/Super

- Como crear subclases en Squeak/Pharo: http://uqbar.no-ip.org/uqbarWiki/index.php/C%C3%B3mo_crear_una_subclase_en_Squeak

Clase de Clases - Cuak

publicado a la‎(s)‎ 27 abr. 2011 16:34 por Guillermo Polito   [ actualizado el 4 may. 2011 6:11 por gisela decuzzi ]

Resumen de la clase


Breve repaso:
- ¿Qué es un objeto?
- ¿El method lookup?  Busco un método con igual selector en el objeto, si no lo encuentro, lo busco en el prototipo...
- ¿Dónde estan los metodos? en el objeto
- ¿Dónde estaban las variables? en el objeto
- ¿Qué pasaba si queria tener muchos objetos iguales? Tengo que clonar
- ¿si queremos compartir código entre objetos? Clonamos!

------------------------------------------------------------------------------------------

Nueva forma de crear objetos: Clases.

Una clase es una fábrica de objetos. ¿Como?

  Dragon new

Si yo quiero que todos los dragones compartan el mismo código (o sea, los mismos métodos),
¿donde piensan que voy a meter esos métodos? En la clase.
¿Y las variables donde las defino? En la clase.

Pasamos el ejemplo de saphira a clases

  Dragon>>come: unasOvejas
    energia := energia + unasOvejas * 3

Nueva versión de method lookup: Ahora cuando un objeto recibe un mensaje, lo busca en su clase.  Si no está, no lo entiende...


Tip: algo cambió con el initialize.  Ahora el initialize se ejecuta solito cuando creamos un objeto (hacemos new).

Seguimos...

  Dragon>>atacaA: unaVictima
    unaVictima recibiDanio: self energia * 2

  Soldado>>recibiDanio: unDanio
    vida := vida - unDanio

¿Que pasa con self?  Sigue siendo el mismo de antes:  una referencia al objeto que recibió el mensaje.
¿Y en el method lookup que onda? Igual que antes, los mensajes a self empiezan desde la clase del objeto.

Ahora programamos el ejercito de arturo.  Programamos un Sargento, que tiene un Set que es un ejercito

Sargento>>initialize
  ejercito := Set new

Sargento>>agregarSoldado:unSoldado
    ejercito add: unSoldado.

Sargento>>tenesSoldados
    ^ejercito notEmpty.

Las colecciones siguen siendo las de antes, solo que las creo a partir de clases:

set -> Set
ordered -> OrderedCollection
bag -> Bag

Set new
OrderedCollection new
Bag new

Cositas para leer y reforzar

http://uqbar.no-ip.org/uqbarWiki/index.php/Clases
http://uqbar.no-ip.org/uqbarWiki/index.php/Nombres_de_clases
http://uqbar.no-ip.org/uqbarWiki/index.php/Ley_de_demeter
http://www.pdep.com.ar/material/apuntes/apunte-objetos-1-5.pdf?attredirects=0  (Capítulo 3)

Para practicar y repasar

Guias 2 y 3 de objetos: http://www.pdep.com.ar/material/guas-de-ejercicios


TP para entegar la clase que viene

Hay que entregar (hecho con el system browser) fileout de la categoría y el workspace impreso del ejercicio 1 de la guia de ejercicios nro 2 de objetos (micros empresarios).


Ya me sale todo, y quiero un cafe con leche

Investigar y programar lo suficiente para poder ejecutar en un workspace la siguiente expresión:

1 kilometro + 2 metros

y que al imprimirlo, esa expresión devuelva

'1002 metros'

Repaso y Resolucion de Ejercicio 20.04.2011

publicado a la‎(s)‎ 20 abr. 2011 7:28 por gisela decuzzi   [ actualizado el 20 abr. 2011 11:16 por Clara Allende ]

Repaso

Hablamos del tp y vimos una posible resolución, hablamos de ventajas y desventajas de distintas resoluciones
Entre otras cosas vimos:
  • Mensajes y Métodos
    • Con qué objetos puedo jugar mientras escribo un método:
      1) Con si mismo (self)
      2) Con los objetos que le llegaron como parámetro
      3) Con las variables del objeto que recibio el mensaje
      4) Con los literales (tambien les decimos, los objetos bien conocidos por todos), por ejemplo los numeros y los strings.

IMPORTANTE

La proxima clase hay tp PRESENCIAL. Asi que no falten y PRACTIQUEN
En todas las clases les dejamos links para que lean en los repasos de la clase, leanlos :)

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 ^^


Self y clonación - 6.4.2011 y 7.4.2011

publicado a la‎(s)‎ 6 abr. 2011 16:51 por gisela decuzzi   [ actualizado el 6 abr. 2011 20:22 por Guillermo Polito ]

Repaso

Hoy estuvimos hablando de:
Todo eso lo estuvimos viendo siguiendo el ejemplo de saphira. Tambien vimos como hacer esto en el Object Browser (que ya todos deberian tener instalado... solo para recordar aca tienen las instrucciones)

¿Cómo seguimos?

1) Ya pueden leer el segundo capítulo del apunte que está aca
2) En esta página se habla un poco del manejo de booleanos. La primera parte (true vs True) todavia no la vimos pero lo que sigue es muy interesante como para prestarle atención.
3) Pueden resolver seguro hasta el ejercicio 8 inclusive de la primer guía de objetos. (Recomendado 7 y 8)
4) En esta página se habla de las diferencias entre objetos y procedural basándose en un ejercicio de la guía uno.
5) Hay que leer el apunte de objetos básicos del smalltalk



Intro a Objetos - 30.3.2011 y 31.3.2011

publicado a la‎(s)‎ 4 abr. 2011 21:32 por Guillermo Polito   [ actualizado el 5 abr. 2011 3:40 por gisela decuzzi ]

Repaso

Buenas!

Esta clase vimos:

- ¿Qué es un objeto? Son entes que exhiben comportamiento (Acuérdense la definición de sistema abierto).
- ¿Cómo interactuan los objetos entre ellos y nosotros con ellos? Mandándoles/se mensajes.
- ¿Qué pasa cuando un objeto recibe un mensaje?  Busca un cacho de código, que llamamos método, que tenga el mismo selector y lo ejecuta.
- ¿Qué es una variable en el paradigma de objetos?  Una referencia a un objeto.
- Tipos de mensaje: Unarios, binarios, palabra clave.  Precedencia entre estos mensajes
- Algo de sintaxis de smalltalk: 
  objeto mensaje.
  variable := objeto.
  ^objeto

Introdujimos a Zafira/Safira/Saphira, nuestra dragona escupe fuego (aunque algunos digan que tiene nombre de chica de mal pasar de medioo lejano oriente), mata personas y come ovejas.  La programamos usando smalltalk.
Después fuimos al lab y conocimos el Object Browser, donde vamos a programar las primeras clases.

¿Cómo seguimos ahora?

1) Tienen que instalar el object browser en sus casas (instrucciones aca y manual aca) y programar algo en sus casas.  Si algo no sale, es SU tarea, avisarnos por la lista, asi los ayudamos.
No vale venir en bolas el miércoles!!!

2) Ya pueden leer el primer capítulo del apunte que está aca

3) Aca tienen una serie de articulos breves sobre lo que estuvimos viendo:

1-7 of 7