Cursosā€Ž > ā€ŽCursadas Anterioresā€Ž > ā€Ž2014ā€Ž > ā€ŽTar-MiĆ©rcolesā€Ž > ā€Ž

Bitacora - MiƩrcoles Tarde 2014


Clase 26 - Esquemas de tipado. Repaso de conceptos.

publicado a laā€Ž(s)ā€Ž 13 nov 2014 9:21 por Mariana Matos Ā  [ actualizado el 13 nov 2014 10:03]

Ayer estuvimos hablando un poco sobre esquemas de tipado (tipo de checkeo y si es explƭcito o implƭcito), y estuvimos repasando los conceptos mƔs fuertes de la materia que esperamos que se lleven (no tiro links porque casi que cubre toda la wiki).

Les dejo una listita de conceptos, de los cuales la mayorĆ­a surgieron en la clase de repaso que ustedes mismos guiaron :)
Tipos e inferencia
Declaratividad
Expresividad
Abstracción
Responsabilidad y Delegación
Polimorfismo
Orden Superior
Efecto colateral
Asignación vs Unificación
Transparencia referencial
Encapsulamiento vs Pattern matcihng
Estrategias de evaluación
Recursividad
Errores
Inversibilidad (L)
Conjunción vs Disyunción (L)
Existe vs Para todo (L)
Múltiples respuestas vs Unicidad (L vs todo lo demÔs)
Universo cerrado (L)
Aplicación parcial (F)
Composición (F)
Clases, herencia y redefinición (O)
Herencia vs Composición (O)
Identidad (O)

Para las próximas dos clases lleven los siguientes enunciados para trabajar, y elaboren sus propias respuestas antes de la clase (por escrito, tratando de explicarle a otra persona la respuesta).

Clase 24 - Simulacro de Objetos

publicado a laā€Ž(s)ā€Ž 24 oct 2014 6:10 por Mariana Matos

En esta clase trabajamos con el enunciado de Asterix el galo.
Para los que no hayan venido, la clase que viene vamos a poner en común una solución y comentar errores comunes, así que conviene que lo resuelvan previamente para aprovechar mÔs la clase.

Importante sobre los TPs: sólo queda una semana para la fecha de re-entrega, hay mucha gente que todavía no hizo entrega inicial. Les recordamos que tener el TP aprobado es necesario para poder aprobar la materia, evitemos andar corriendo las últimas semanas de clase.

Clase 22 - Ejercicio integrador: Pokemon

publicado a laā€Ž(s)ā€Ž 9 oct 2014 6:47 por Mariana Matos

Estuvimos trabajando toda la clase con parte del enunciado del TP de Pokemon, en particular hicimos entre todos los siguientes puntos, de los cuales se hizo foco en distintas cosas:

Punto 1: delegación y encapsulamiento. La forma mÔs simple de modelar los movimientos que elegimos usar tenía la limitación de no poder compartir un mismo movimiento entre dos pokemones distintos (por ejemplo Descanso para Pikachu y Jigglypuff). Al no romper el encapsulamiento nos resultaría mÔs fÔcil introducir cambios en cómo estÔ modelada esta parte, no planteamos otra alternativa por cuestión de tiempos, pero hay mÔs de una, vale pensarlo por su cuenta :)

Punto 2a: herencia, delegación, polimorfismo y efecto colateral. Le dejamos al movimento decidir qué hacer cuando se usa. Algo que surgió en la clase, qué debería pasar si el movimiento que me pasan no lo puede usar el pokemon receptor porque no es uno de sus movimientos disponibles? Hacer de cuenta que no pasó nada no es una opción, eso sólo trae infelicidad.

Punto2b: herencia, delegación, polimorfismo, manejo de errores y efecto colateral. AcÔ planteamos varias alternativas, inicialmente le preguntÔbamos desde el pokemon a la condición si podía atacar y en caso de que se pudiera lo hacíamos, de lo contrario estallÔbamos. Pero al hacer la condición de sueño vimos que nos quedaba puedeAtacar: como de consulta y con efecto para despertar al bicho! Eso nos llevó a cambiar la lógica original para darle mÔs control a la condición, en vez de preguntarle si puede, llegando a un escenario mucho mÔs prolijo y manejable.

Punto 5: incorporar modificaciones sobre lo que ya tenemos, manejo de colecciones, delegación y efecto colateral.

Punto 6: dejamos algunos huecos acÔ que pueden tratar de resolver, el foco estuvo nuevamente en polimorfismo y delegación.

Punto 7: tenemos que agregar otra condición que se comporta distinto a las que ya teníamos, vemos que lo que nos quedó en el punto 2b era genial para incorporar estos cambios. Vimos dos alternativas, una que jugaba con redefinición (incluía cambios menores sobre lo que hicimos antes) y otra con un manejo de errores mÔs avanzado (sin cambios a lo anterior, sólo se agregaba la nueva condición).

Desde ya, pueden tratar de resolver las partes que no hicimos del ejercicio y venir con dudas la próxima clase para discutir la solución.

La clase que viene vamos a trabajar con el parcial de los Minions, por favor traigan una copia y lƩanlo antes de la clase.

Clase 21 - Responsabilidades de las clases y TP en laboratorio

publicado a laā€Ž(s)ā€Ž 24 sept 2014 11:24 por NicolĆ”s BranĆ” Ā  [ actualizado el 24 sept 2014 21:25 por Mariana Matos]

Hoy estuvimos viendo mƩtodos y variables de clases y tambiƩn estuvimos haciendo el siguiente TP presencial.

La semana que viene no hay clases por las fechas de finales, el siguiente miƩrcoles es la fecha de entrega del TP integrador (obligatorio e individual) de objetos.

El enunciado es este: TP Integrador - Picadito de Quidditch (ojo que no es idéntico al enunciado que figura en la sección parciales, no se confundan)
Cualquier duda pueden mandar mails a sus tutores asignados.

Herencia vs. Composición

publicado a laā€Ž(s)ā€Ž 17 sept 2014 16:04 por Mariana Matos

Hoy estuvimos entrando en el Ôrea mÔs diseñosa de la materia (esperamos que lo que vimos les sirva para llegar mejor parados cuando cursen Diseño de Sistemas). Pueden leer mÔs sobre composición con otros ejemplos a los que vimos en clase.

Clase 19 - Method Lookup++, herencia, redefición y super. Un poco mÔs sobre errores.

publicado a laā€Ž(s)ā€Ž 11 sept 2014 9:57 por Mariana Matos Ā  [ actualizado el 14 sept 2014 15:53]

En esta clase terminamos de ver cómo se resuelve el method lookup con herencia y redefinición (con y sin super).
AdemÔs dimos un último pasito respecto a manejo de errores definiendo nuestras propias clases que heredan de Error para poder atraparlas (en caso de poder recuperarse del error) y validar en nuestros tests que el error arrojado fuera efectivamente el que esperÔbamos y no cualquier otro usando should:raise:.

La semana que viene hay un tp cortito presencial de method lookup al principio de la clase asĆ­ terminamos de despejar dudas sobre este tema.

Y un extra, para los inquietos que sin un TP de paradigmas para hacer en la semana se deprimen... sale otro desafĆ­o!

El primero que me manda por mail una solución para tener bloques que puedan aplicarse parcialmente usando el mensaje binario @ (que claramente no existe en Pharo) y le den verde los 3 tests que estÔn attacheados en BloquesConAplicacionParcial.st (pueden hacer file in de los dos archivos arrastrÔndolos sobre la imagen que tienen) se gana un café con leche y medialunas y mucha fama a reclamar en la siguiente clase (a menos que haya clase de laboratorio, en cuyo caso sólo pueden reclamar la fama, los alimentos quedan para la otra).

Aclaración: tiene que funcionar para N parÔmetros, agrego otro test para que se verifique eso también:

testSeBancaBloquesDeMuchosParametros
Ā Ā Ā  self assert: [ :a :b :c :d :e :f | a + b + c + d +e +f ] @ 1 @ 2 @ 3 @ 4 @ 5 @ 6 equals: 21

El desafĆ­o tiene ganador!!! Felicitaciones MatĆ­as Martino!!!

Clase 18 - Clase de Clases con clase...

publicado a laā€Ž(s)ā€Ž 3 sept 2014 14:20 por Lucas Giudice Ā  [ actualizado el 3 sept 2014 17:21 por Mariana Matos]

Hicimos un repaso general de objetos con pepita, vimos un poco de prototipado y le pusimos el nombre METHOD LOOKUP al mecanismo por el cual se determina, para el envío de un mensaje, qué método se debe ejecutar.

Después introdujimos el concepto de Clase como fÔbrica de objetos por un lado, y como definición de comportamiento de los objetos por otro.

Filosofamos un rato sobre los dos mƩtodos para laburar con objetos (class-based vs prototype-based) y charlamos un poquito de las ventajas y desventajas de uno y otro a la hora de modelar el problema en objetos (entendiendo modelar como organizar el conocimiento).
TambiƩn vimos como cambia el method lookup cuando estamos trabajando en una tecnologƭa con clases.

Luego realizamos el  ejercicio de micros empresarios en el pizarrón, tratando de encarar el problema como lo haríamos en un parcial, y viendo cómo podemos mejorar el código cuando encontramos abstracciones que representan conceptos importantes en nuestro sistema.

DespuƩs vimos como implementar en computadora todo lo que estuvimos viendo, conociendo el system browser (Nautilus) y aprendimos a hacer tests con las nuevas herramientas, lanzar errores y testearlas.


Quedan adjuntos los file outs de lo que implementamos en clase. No estƔn implementadas todos los tipos de persona, pero lo que estƔ estƔ completamente testeado :)

El TP para la semana que viene para hacer con el System Browser es Dr. Casa (Temporada 1). Para la clase que viene traigan el enunciado de Dr. Casa (Temporada 2)

Responsabilidad y delegación + intro a errores

publicado a laā€Ž(s)ā€Ž 29 ago 2014 11:16 por Mariana Matos Ā  [ actualizado el 29 ago 2014 11:18]

En esta clase estuvimos trabajando con las dos partes de Mensajeros de Peliculas
AdemÔs vimos una pequeña introducción a errores como mecanismo para cortar la ejecución del programa en caso de situaciones excepcionales. Para lanzar un error usamos Error signal: 'Descripción del problema'. Este tema lo vamos a profundizar mÔs adelante, no entra en el TP.

Para la próxima clase hay un último TP en ozono sobre colecciones que pueden encontrar en la guía de TPs como "Se dice atómico", a partir del miércoles que viene vamos a empezar a trabajar con las herramientas nativas de Pharo. La modalidad de entrega es la misma que para el primer TP, cualquier duda manden mail a su ayudante asignado.

Clase 16 - Colecciones, igualdad vs identidad y TP de polimorfismo

publicado a laā€Ž(s)ā€Ž 20 ago 2014 11:46 por Mariana Matos Ā  [ actualizado el 20 ago 2014 13:20]

Hoy vimos colecciones, que son objetos que modelan conjuntos de otros objetos. Si bien hay distintos sabores de colecciones, hay una serie de mensajes que entienden todas (o la gran mayoría de ellas, algunos no deberían entenderlos porque no calzan con sus características), por ende sólo nos interesa qué tipo de colección es cuando las creamos, pero para trabajar con ellas no tanto porque son polimórficas!

También mencionamos la diferencia entre igualdad (=) e identidad (==). Dos objetos son idénticos sólo si son el mismo objeto, sin embargo la igualdad (que por defecto se define en términos de identidad) puede ser redefinida, con lo cual lo normal es consultar por igualdad en vez de identidad. Las colecciones (por ejemplo para el mensaje includes:, o el Set para evitar repetidos) se basan en la igualdad para permitir al desarrollador decidir si dos objetos deben considerarse iguales o no.

Empezamos a trabajar entre todos con el punto 1 del TP, les adjunto la lección Utilísima para que puedan hacer el punto 2 partiendo de esa lección.

Clase 15 (2da de objetos) - Poli-rockin'-morfismo, bloques y manejo de booleanos.

publicado a laā€Ž(s)ā€Ž 13 ago 2014 13:21 por Lucas Giudice

Seguimos con objetos, avanzamos con:
  • Polimorfismo: Con un poco de pseudocódigo y otro poco de mĆŗsica vimos las ventajas del polimorfismo respecto del condicional.
  • Modificamos a pepita y vimos cómo logramos las estructuras condicionales sin salir de objeto mensaje.
  • Vimos los bloques, que són, cómo se crean, cómo se ejecutan, y por quĆ© lo necesitamos para diferir la ejecución.
  • Vimos cómo crear test automĆ”ticos con ozono y hablamos sobre las ventajas del testeo automatizado por sobre las pruebas manuales en el workspace.
  • Resolvimos un ejercicio(*) con if's, lo testeamos, y vimos cómo cambiar el código (refactorizarlo) para reemplazar el condicional por polimorfismo.

(*)Ejercicio: Viaje en bondi
Queremos saber el precio de un pasaje en bondi para una persona determinada, sabiendo que la tabla de precios es:
  • < 3 aƱos no pagan pasaje
  • escolar pagan $0.05
  • jubilados pagan $1.75
  • discapacitados no paganĀ 
  • el resto paga $3.50
Queda adjunta la resolución que hicimos en clase. Su misión, si deciden aceptarla, es terminarla y testearla.