Apuntes
Presentaciones 
- 01 Introducción a la materia
 - 01B Introducción a la ingeniería de Software
 - 06 Organización de conocimiento
 - 07 Historia de Smalltalk
 - 12 TDD
 - 16 Intro a Patrones de diseño
 
Git 
Taller de git 
Apunte teórico 
Conceptos que exploramos
- Objeto
 - Mensaje vs Método
 - Igualdad vs Identidad
 - Closures
 - Acoplamiento y cohesión
 - Encapsulamiento
 - Polimorfismo
 - Prototipado vs Clasificacion
 - Clase y jerarquías de conocimiento.
 
Heurísticas de diseño
Hasta ahora…
- Buscamos 1:1 entre objeto y ente de la realidad. Separación de responsabilidades.
 - Nombrar a los objetos (clases y colaboradores) según el ROL que cumplen de acuerdo al contexto / al dominio de problema.
 - Guiarnos por el aspecto funcional conduce a buenos diseños.
 - Evitar romper encapsulamiento.
 - Código repetido: Señal de que falta una abstracción.
 - Favorecer polimorfismo por sobre ifs.
 - Favorecer inmutabilidad
 - Crear objetos completos
 - Crear objetos validos
 - Evitar subclasificar de clases concretas.
 - Favorecer composición por sobre subclasificación.
 
Técnicas que vimos:
- Algoritmo para quitar código repetido
 - Algoritmo para quitar el if [*]
 - Switch dinámico
 
[*]
- 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 un test que falle
 - Hacer pasar todos los test
 - Reflexionar