Atributos
Sigla: 
CI-0136
Créditos: 
4
Horas: 
5
Clasificación: 
Curso propio
Énfasis y ciclo: 
Ingeniería de Software 3.I
Descripción: 

El diseño arquitectónico y detallado de software determina la calidad de los productos de software que se entregan. Es por esto que la industria del software ha venido sistematizando heurísticas de diseño por medio de lo que se ha llamado principios y patrones de diseño. En la actualidad, este cuerpo de conocimientos es muy amplio y relevante para cualquier ingeniero de software que deba construir software de calidad. El diseño y la construcción de frameworks para familias de productos de software requiere particularmente de la aplicación intensiva de este cuerpo de conocimientos por tratarse de un tipo de software adaptable a la construcción de aplicaciones de una familia con suficiente variabilidad de características como para ser sostenible en un nicho de mercado. Es por esto que el curso se enfoca en la aplicación de principios y patrones de diseño a la construcción de frameworks  sin que por ello deba limitarse exclusivamente a este ámbito el uso de los principios y patrones estudiados.

Objetivo general: 

El objetivo general del curso es que el estudiante sea capaz de diseñar frameworks basándose en principios y patrones de valor comprobado, para desarrollar software de calidad mediante la construcción, depuración y aplicación de un framework generador de productos de una familia de productos específica.

Objetivos específicos: 

Durante este curso el estudiante desarrollará habilidades para:

  1. Explicar la relación general entre atributos de calidad y el diseño de software de calidad para seleccionar principios y patrones adecuados mediante el diseño, la construcción y la depuración de un framework.
  2. Aplicar principios, patrones de diseño arquitectónico y detallado, de valor comprobado para elaborar diseños de software de calidad mediante el diseño, la construcción y la depuración de un framework.
  3. Aplicar patrones de diseño de software paralelo y concurrente para elaborar diseños de software de calidad mediante el diseño, la construcción y la depuración de un framework.
  4. Discernir cuándo usar las técnicas de abstracción de los lenguajes de programación orientada a objetos, a saber: clases parametrizadas y herencia-polimorfismo, para elaborar diseños de software de calidad mediante el diseño, la construcción y depuración de un framework.
  5. Validar el diseño del framework desarrollado en el curso para comprobar su calidad mediante la construcción de una aplicación basada en ese framework.
Contenidos: 
Objetivo específico Eje temático Desglose
1
Atributos
versus
Diseño
1.1 Taxonomía de atributos de calidad Atributos de: disponibilidad, interoperabilidad, modificabilidad, desempeño, seguridad, comprobabilidad, usabilidad, otros.
1.2 Cómo lograr los atributos de calidad Principios, patrones, técnicas y consideraciones para lograr los atributos de calidad de los diferentes tipos.
2
Principios generales
2.1 Principios “SOLID” Responsabilidad única , Apertura/cierre, Substitución de Liskov, Segregación de interfaces, Inversión de dependencias.
2.2 Delegación Principio de delegación.
2.3 Indirección Principio de indirección.
2.4 Inyección Principio de inyección de dependencias.
2
Patrones arquitectónicos
3.1 Multicapas Patrón arquitectónico multicapas.
Patrón Modelo-Vista-Controlador y variantes.
3.2 Broker Patrón broker.
3.3 P2P Patrón Peer-to-peer.
2 y 4
Patrones de objetos y herencia-polimorfismo versus clases parametrizadas
4.1 Patrones de construcción Fábrica abstracta, Constructor, Método fabricante, Prototipo y Singleton.
4.2 Patrones estructurales Composición, Fachada, Adaptador, Puente, Decorador, Proxy y otros.
4.3 Patrones de comportamiento Cadena de responsabilidades, Comando, Mediador, Memento, Observador, Estado, Estrategia, Método plantilla, Visitante∫ y otros.
3
​​​​​​Patrones para concurrencia y paralelismo
5.1 Concurrencia Descomposición de datos, Descomposición de tareas, Objeto activo, Objeto monitor, Half-Sync/Half-Async, Líder/Seguidores y otros.
5.2 Paralelismo Tarea paralela, Divide y vencerás, Descomposición geométrica, Datos recursivos, Coordinación basada en eventos y otros.
Bibliografía: 
  1. Smith, Jason McC. Elemental design patterns. Pearson Education, 2012.
  2. Rouson, Damian et.al. Scientific software design: the object-oriented way. Cambridge University Press, 2011.
  3. Züllighoven, Heinz. Object-Oriented Construction Handbook. Morgan-Kaufmann pub 2005.
  4. Mattson, Timothy G. et.al. Patterns for parallel programming. Pearson Education, 2005,
  5. Schmidt, Douglas et.al. “Pattern-Oriented Software Architecture Vol#2”. Wiley, 2000.
  6.  Fayad, Mohamed et.al. “Building Application Frameworks”. Wiley, 1999.
  7. Gamma, Erich et.al. “Design Patterns”. Addison-Wesley, 1995.
  8. Meyer, Bertrand. “Construcción de Software Orientado a Objetos”. Prentice Hall, 1999.
  9. Sitio del repositorio mundial de patrones: http://hillside.net/.
     
LIberación de responsabilidad: 

Este no es un documento oficial. Documentos oficiales se entregan en la secretaría de la escuela.