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