1
Presentación del diseño
- Un recordatorio de los fundamentos de la programación orientada a objetos y el lenguaje UML.
- Ventajas de UML para el diseño.
- Los retos del diseño.
- Utilización de la herencia. Ventajas e inconvenientes.
2
Principios fundamentales del diseño orientado a objetos
- Los principios de apertura/cierre (OCP) y sustitución de Liskov (LSP).
- Concepto de polimorfismo, acoplamiento débil y cohesión fuerte.
- El impacto del diseño de objetos en los proyectos.
Trabajo práctico
Reparto de responsabilidades entre clases.
3
Principios de construcción de clases
- Gestión de dependencias con inversión de dependencias (DIP).
- Reducción de la complejidad aparente mediante la separación de interfaces (ISP).
- Reparto de responsabilidades con GRASP.
4
Principios de organización de paquetes
- El paquete: una unidad de diseño de entrega/reutilización (REP) y reutilización común (CRP).
- El desglose de paquetes. CCP.
- Organización entre paquetes.
Trabajo práctico
Creación y priorización de paquetes.
5
Desarrollo basado en pruebas
- Desarrollo dirigido por pruebas (TDD) frente a ingeniería dirigida por modelos (MDE).
- Redacción de casos de prueba y conjuntos de pruebas.
Trabajo práctico
Asignación de responsabilidades a los componentes de software utilizando el enfoque TDD.
6
Principios de los patrones de diseño
- Patrones de diseño para reutilizar la experiencia.
- Alcance, ventajas y limitaciones de los patrones de diseño.
- Respuesta a problemas recurrentes.
- Los patrones fundacionales de Gamma y GoF: patrones de creación, comportamiento y estructura.
- Refactorización. ¿Por qué refactorizar?
- Modificación de la presentación del código y de los algoritmos de clase. Rediseño.
Trabajo práctico
Ejemplo de diseño, refactorización y programación con patrones GoF.
7
Arquitectura de software y patrones arquitectónicos
- De los requisitos a la arquitectura.
- Estilos arquitectónicos.
- Patrones de distribución (estilo cliente-servidor, patrón de bus de datos, pizarra, repositorio).
- Patrones de diseño de sistemas (MVC, arquitectura en capas, estilo Plug-in, Pipeline).
8
Proceso de desarrollo
- Diseñar en un proceso iterativo e incremental.
- El manifiesto ágil. XP, Scrum.