Apuntes
Presentaciones 
- 01 Introducción a la materia
- 01B Introducción a la ingeniería de software
- 01C Introduccion a la ingenieria de software
- 10 TDD
Esta sección se irá completando con el correr del cuatrimestre
Git 
Taller de git 
Apunte teórico 
Objeto: Representación de un ente de la realidad. Se define a partir de los mensajes que sabe responder. Mensaje: Representa el QUE de los objetos. Define una responsabilidad. Puede tener múltiples implentaciones. Método: Es la implementación de un mensaje. Representa el COMO. Conjunto de colaboraciones. Colaborador: Variable. Puede ser interno (variable de instancia), externo (parámetro) o temporal.
Clase: Representa un concepto de la realidad. Subclase: Especialización. “Se comporta como”. Forma de organizar el conocimiento mediante jerarquias.
Buscar el 1:1 entre objeto-ente
Heuristicas de diseño
- Favorecer composición sobre subclasificación.
- No subclasificar de clases concretas.
- Codigo repetido: Señal de que me falta una abstracción.
- Evitar romper encapsulamiento
- Favorcer polimorfismo por sobre ifs
- Nombrar objetos segun el ROL que cumplen en el dominio de problema.
- Guiarnos por aspectos funcionales conduce a mejores modelos.
- Crear objetos compĺetos
- Crear objetos válidos
- Favorecer objetos inmutables
- No usar nil/null
Quitar código repetido
- Copiar lo repetido a “algun lugar”
- Parametrizar lo que cambia
- Nombrar la abstraccion
- Reemplazar lo repetido x la nueva abstracción
Reemplazar if por polimorfismo
- Crear una jerarquia de clases con una clase por cada condicion del if (si no existe)
- Mover el cuerpo del if de cada condicion a cada abstracción del paso 1) utilizando un mensaje polimorfico.
- Nombrar el mensaje polifmorfico
- Nombrar las abstracciones del paso 1)
- Reemplazar el if por el envio de mensaje polimorfico
- Buscar el objeto polimorfico (si es necesario)
TDD
- Escribir el test mas simple posible que falle
- Hacer pasar los tests con la implementacion mas simple posible
- Reflexionar, ¿refactorizar?