Cursosā€Ž > ā€ŽMartes-MiĆ©rcoles-Jueves MaƱanaā€Ž > ā€Ž

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: