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.

1-10 of 22