Referencias Bibliográficas: [Bass et al., 2021,Richards and Ford, 2020]
Temas
- Principios de diseño de sistemas. Fundamentos de Sistemas (SF) -Reliability
- Niveles de abstracción (por ejemplo, diseño arquitectónico y diseño detallado)
- Separación de preocupaciones (separation of concerns)
- Ocultación de información (information hiding)
- Acoplamiento y cohesión (coupling and cohesion)
- Arquitectura de software. Fundamentos de Sistemas (SF) -Reliability
- Paradigmas de diseño
- Descomposición funcional de arriba hacia abajo/diseño por capas
- Arquitectura orientada a datos
- Análisis y diseño orientado a objetos
- Diseño dirigido por eventos
- Arquitecturas estándar (por ejemplo, cliente-servidor y arquitecturas de microservicios incluyendo discusiones sobre REST, n-capas, tuberías y filtros, Modelo Vista Controlador)
- Identificar límites y dependencias de componentes
- Programación a gran escala vs programación a pequeña escala (programming in the large vs programming in the small). Fundamentos de Sistemas (SF) -Reliability
- Modelos estructurales y de comportamiento de diseños de software
- Modelado de diseño, por ejemplo con diagramas de clases, diagramas de entidad-relación o diagramas de secuencia
- Principios de diseño de API
- Consistencia
- Las API consistentes son más fáciles de aprender y menos propensas a errores
- La consistencia es tanto interna (entre diferentes partes de la API) como externa (siguiendo patrones comunes de API)
- Capacidad de composición (composability)
- Documentación de contratos
- Las operaciones de la API deben describir su efecto en el sistema, pero generalmente no su implementación
- Precondiciones, postcondiciones e invariantes
- Capacidad de expansión (expandability)
- Reporte de errores
- Los errores deben ser claros, predecibles y accionables
- La entrada que no coincida con el contrato debe producir un error
- Los errores que pueden gestionarse de manera confiable sin reportarse deben gestionarse
Aprendizaje esperado (Learning Outcomes)
- Identificar la arquitectura de software estándar de un diseño de alto nivel dado [Analizar]
- Identificar las dependencias entre un conjunto de componentes de software en un diseño arquitectónico [Analizar]
- Seleccionar y usar un paradigma de diseño apropiado para diseñar un sistema de software simple y explicar cómo se han aplicado los principios de diseño de sistemas en este diseño [Evaluar]
- Traducir un diseño de software en lenguaje natural a diagramas de clases [Traducir]
Generado por Ernesto Cuadros-Vargas , Sociedad Peruana de Computación-Peru, basado en el modelo de la Computing Curricula de IEEE-CS/ACM