2021
Clase 14
Liberamos el parcial Cloudfunding en este assignment.
El martes a las 18 nos encontramos para charlar dudas del parcial.
El jueves a las 21 cierra el tiempo para la primera entrega del parcial. En la planilla de notas te dejaremos el horario para hacer la defensa por coloquio.
Clase 13
Vamos a resolver el examen del año pasado: El Tío Cosa... Nostra.
Clase 12
Double dispatch: Ejercicio Selección de Personal
Selección de personal: Double dispatch, Extension method.
double-dispatch: trabaja con method dispatch de xtend (recomendado para ver)
dispatch: trabaja con double dispatch manual
Clase 11
Objetivo de la clase: Comprender técnicas para diseñar la creación de los objetos y sus dependencias.
Apuntes principales: Resumen de la clase de ejemplos creacionales - Microprocesador. Patrones creacionales.
Ejemplos: Fijate en la página de ejemplos la solución de la Máquina de Helado y también la de Patrones creacionales del Microprocesador.
Material complementario
Para practicar en casa: tenés la guía de ejercicios Modelado de Objetos con patrones, en particular Patrones creacionales.
Resumen de clase de ejemplos creacionales de los clientes de una tarjeta de crédito y el ejercicio del Firewall.
Clase 10
Objetivo de la clase: Modelar comportamiento como un objeto.
Vamos a encarar el ejercicio del Microprocesador (primera parte). Podés descargarte:
el repositorio con la solución principal que vamos a ver en el branch master
el branch bloques, donde modelamos los commands mediante objetos bloque
Material complementario
Para practicar en casa: tenés la guía de ejercicios Modelado de Objetos con patrones, en particular Modelar comportamiento.
El ejercicio del Firewall también permite ver cómo trabajar con filtros y acciones (commands) para despachar paquetes.
La pregunta de Stack Overflow sobre cómo hacer un deep copy en Java
Videos de clase: Sobre los efectos del Observer - Microprocesador Parte 1 - Microprocesador Parte 2
Clase 9
Objetivo de la clase: Conocer el patrón de diseño observer que sirve para desacoplar eventos de un objeto.
Continuaremos con el enunciado de Listas de correo, trabajando el requerimiento Enviar mensaje junto con los agregados del punto 2, que nos servirá para dar Lista de correo: eventos ante un post.
También veremos la Inyección de Dependencias para ver cómo se inyecta el componente que envía mails, implementado en estos tres ejemplos
master: trabaja la inyección de dependencias del MessageSender en el constructor del MailObserver
singleton: el componente que envía mails es un Singleton y esto hace fallar los tests.
service-locator: implementa el patrón arquitectural Service Locator para desacoplar el envío de mensajes de la aplicación.
Por último, hablaremos sobre los efectos en el patrón Observer.
Material complementario
Para practicar en casa: tenés la guía de ejercicios Modelado de Objetos con patrones, en particular Notificaciones / Manejo de eventos
Link a las diapositivas de clase
Videos de clase: Observer pattern - Inyección de dependencias
Clase 8
repasaremos el Decorator en Xtend
conoceremos el mixin como un concepto que permite la reutilización de código de forma más flexible que la herencia.
Veremos la implementación del mismo ejercicio de Tarjetas de Crédito en Wollok con mixins.
Más información sobre mixins podés encontrarla en el sitio de Wollok | Documentación de conceptos | Avanzados y en la página de la wiki de Uqbar sobre mixins.
Veremos el ejemplo Lista de Correo (link al enunciado), que nos servirá para repasar diferentes formas de modelar soluciones y cómo compararlas entre sí, la aparición de requerimientos asincrónicos, y el diseño de interfaces entre componentes.
Videos de clase: Mixines. Lista de Correo.
Clase 7
Conoceremos el ejemplo de los clientes de la tarjeta de crédito, para evaluar diferentes soluciones, donde finalmente aparecerá el patrón Decorator. Te dejamos las diapositivas de la clase y el ejemplo Decorator en Github, tenés varios branches: if, strategy y decorator son los que vimos.
como BONUS, haremos un decorator que implemente strategies. Te dejamos el link al repo donde están los branches implementados en Wollok.
Videos de clase: Decorator - parte 1. Decorator - parte 2.
Clase 6
Primero continuaremos con la explicación de testeo unitario repasando los stubs y conociendo los mocks.
Luego resolveremos el parcialito de UML
Videos de clase: Stubs y Mocks (repaso y última parte). Explicación del Parcial UML.
Material complementario
Para practicar en casa: tenés la guía de ejercicios Modelado de Objetos con patrones, en particular Intercepción de código
Clase 5
Vamos a retomar el apunte Manejo del cambio: expansión y refactoring, explicando qué son los bad smells y diferentes refactors que nos pueden ayudar.
Luego estudiaremos el testeo de stubs y mocks mediante el ejemplo de la Ruleta Virtual, también podés buscar en los ejemplos: Alumnos, Canje de Premios y el de Lista de Correo (branch master). Te dejamos el paper de Martin Fowler Mocks aren't stubs para que complementes el contenido de la clase. Te dejamos el link a las diapositivas.
Después de la clase vamos a liberar el assignment de UML para que lo resuelvas, para lo cual tenés que leer el apunte Guías para comunicar un diseño
Videos recomendados: Refactoring, Ejemplo Ruleta (Stubs y Mocks)
Videos de clase: Refactoring Parte 1 - Refactoring Parte 2 + Stubs/Mocks
Clase 4
Después del feriado de semana santa, repasaremos los patrones strategy, template method y composite, y veremos cómo resolver el costo impositivo de una tarea. Luego hablaremos del Manejo del cambio: expansión y refactoring.
Diapositivas: Expansión y Refactoring para el manejo del cambio.
Videos de clase: Parte 4 Manejo de Proyectos - Refactoring y Expansión
Videos recomendados sobre los patrones (son más cortos que los de clase)
Clase 3
Objetivo: entender el proceso del diseño y cómo los design patterns nos ayudan en esta tarea.
Seguimos con el Proceso del Diseño, con el Ejercicio Manejo de proyectos: Strategy y Composite.
Videos de clase: Parte 2 Manejo de Proyectos - Parte 3 Manejo de Proyectos
Acordate que en https://github.com/uqbar-project/clases-algo2-2021 está pusheado lo último que hicimos
Clase 2
Objetivo: adquirir herramientas que nos ayuden a solucionar errores. Entender el proceso del diseño y cómo los design patterns nos ayudan en esta tarea.
Subimos a github el ejercicio de seguros. Configuramos, entendemos cómo trabajar con Travis. y lo vemos en acción. Badges. Cobertura de tests.
Cómo corregir un error en runtime, a partir de un ejemplo en github
Empezaremos a estudiar el Proceso del Diseño, con el Ejercicio Manejo de proyectos: Strategy y Composite.
Te dejamos el repositorio con el código de las clases 1 y 2 (tienen packages diferentes)
Videos de clase: CI y Travis. Cómo corregir un error. Manejo de proyectos.
Clase 1
Objetivo: entrar en calor con el set de tecnologías que propone la materia y repasar las técnicas de testing.
Apuntes principales:
Vamos a familiarizarnos con el entorno de trabajo de la materia, en particular
Crearemos un proyecto desde cero
Entenderemos la diferencia entre JDK vs. JRE
Y tendremos una introducción a Maven
Por otra parte, nuestro primer proyecto de xtend nos servirá de excusa para revisar cómo diseñamos los tests
Testeo unitario avanzado (hay un apunte más completo de Testing para que leas)
Videos de la clase: Intro a TDD - Parte 1, Intro a TDD - Parte 2
Recordá que tenés la página con más ejemplos
¿Qué tengo que hacer después de clase? Anotar acá tus datos y armar los grupos de 3 integrantes para la cursada práctica.
Para empezar a trabajar en tu compu: seguí los pasos de instalación del entorno Xtend. Te va a ayudar a configurar las opciones para pasarla mejor y también a tenés una guía para generar un proyecto nuevo.
Fundamental tené a mano siempre el link a la guía rápida del lenguaje y los Shortcuts Felices que quizás conozcas de Algoritmos 1