investigación de los Avances tecnológicos del siglo XXI
Clase 06 diseno_arquitectura
1. Arquitectura de Software
(Arquitectura de Software para Practicantes)
Universidad de los Andes
Demián Gutierrez
Marzo 2013
1
2. ¿Qué es Diseño de Software?
Diseño es el proceso creativo de
transformar un problema en una solución.
La descripción de esa solución
también es llamada diseño. *
El diseño de software es el proceso de
concebir (modelar) y especificar los detalles
de como el sistema cumplirá
las especificaciones de requerimientos
establecidas en el análisis
*Pfleeger, 1998 2
3. ¿Qué es Diseño de Software?
Diseño = Proceso Creativo
Diseño = Solución
No hay UNA única solución
No existe una solución completamente óptima
Sólo hay soluciones buenas, mediocres, malas...
La evaluación y elección depende del cliente, de los
requerimientos, del criterio del diseñador, del
contexto, etcétera
3
4. ¿Qué es Diseño de Software?
(Son muchas las cosas que se pueden diseñar)
Diseño de
Procesos /
Interacción,
etcétera
Diseño de los
Diseño de la
modelos de
Interfaz H/M
datos
Requerimientos
del Sistema
(¿qué?)
Diseño de las ¿cómo?
Diseño de la
Interfaces con
Arquitectura
otros
El objetivo del diseño es del Software
Sistemas
“implementar”
los requerimientos del usuario 4
6. ¿Arquitectura?
La Arquitectura de un Sistema define
la división y estructura de un sistema
en subsistemas y establece un
marco de control, comunicación y
cooperación entre los distintos
subsistemas
6
7. ¿Arquitectura?
La Arquitectura de Software es la
organización fundamental de un
sistema encarnada en sus
componentes, las relaciones entre
ellos y el ambiente y los principios
que orientan su diseño y evolución
*IEEE 7
8. ¿Arquitectura?
Una Arquitectura de Software describe:
Un conjunto de elementos / componentes que
conforman un sistema
(con sus responsabilidades)
Un conjunto de conectores entre componentes
(comunicación, coordinación, control, cooperación)
Restricciones que definen cómo se integran los
componentes para formar el sistema
Adaptado de: Shaw M., Garland D., Software Architecture 8
9. ¿En que afecta una buena / mala
Arquitectura de Software?
¿cuál es el impacto
de la arquitectura
en un sistema?
9
10. ¿En que afecta una buena / mala
Arquitectura de Software?
¿propiedades
emergentes
de un sistema?
10
11. ¿En que afecta una buena / mala
Arquitectura de Software?
Confiabilidad Rendimiento Extensibilidad
Eficiencia
Seguridad Escalabilidad
Memoria/Ejecución
Portabilidad Disponibilidad Reusabilidad
¿qué falta aquí?
11
12. ¿En que afecta una buena / mala
Arquitectura de Software?
Facilidad de
Mantenibilidad
Prueba
Estos dos aspectos están relacionados
con un concepto que es muy importante
12
13. ¿En que afecta una buena / mala
Arquitectura de Software?
¿Calidad Interna?
Fácil de Entender
Fácil de Cambiar
Barato de Desarrollar
Barato de Mantener
13
14. ¿En que afecta una buena / mala
Arquitectura de Software?
¿Calidad Interna?
Son buenos para comer, pero nadie quiere
que su aplicación se transforme en esto 14
16. Diagramas de Bloques
Una herramienta simple para modelar Arquitectura de Software
Bloque / Bloque /
Componente Componente
1 3
Conexiones:
Bloques: partes, Bloque / relaciones
módulos, Componente estructurales,
componentes, 4 dependencias,
subsistemas, etc comunicaciones,
flujos de datos, etc
Bloque / Bloque /
Componente Componente
2 n
16
17. Arquitectura de Software
(Un Ejemplo)
Sistema de
Visión Controlador de
Controlador del
la Mano
Brazo
Articulada
Sistema de
Identificación Sistema de
de Objetos Selección de
Empaquetado
Controlador de
Sistema robótico de control Sistema de
la Cinta
de empaquetado Empaquetado
Transportadora
Fuente: Sommerville /
Ingeniería del Software 17
18. Arquitectura de Software
(Un Ejemplo)
Nos ayuda a pensar en términos abstractos
sin preocuparse mucho por la notación 18
19. Componentes / Partes de un Sistema
¿cohesión?
¿responsabilidades?
¿acoplamiento?
19
20. Distintos Niveles de Abstracción
¿en qué distintos niveles de
abstracción se puede pensar
en términos de
arquitectura / ingeniería
de software?
20
21. Distintos Niveles de Abstracción
Objetivos de Negocio,
Más cerca de la implementación
Objetivos de la Organización
Propuesta de Valor
B D
A C
21
22. Distintos Niveles de Abstracción
B D
Más cerca de la implementación
A C
C
C.1 C.2
C.3 C.4
22
23. Distintos Niveles de Abstracción
C.1 C.2
Más cerca de la implementación
C.3 C.4
23
24. ¿Arquitectura?
--INTERMEDIO: Otra Definición ---
Estructura y Componentes* del sistema
desde el punto de vista del programador
Jerarquía y funciones de cada componente* de software
Estructuras de datos empleadas por cada componente*
Flujos de datos entre los componentes*
* También se puede ver desde el punto de vista de Clases / Objetos 24
25. Distintos Niveles de Abstracción
Más cerca de la implementación
public class Producto {
private String codigo;
private String nombre;
private Money precio;
public Producto(String codigo, String nombre, Money precio) {
this.codigo = codigo;
this.nombre = nombre;
this.precio = precio;
}
// ... más código ...
}
25
26. Distintos Niveles de Abstracción
En todos los niveles
hay aspectos y decisiones
importantes de
Arquitectura de Software
¿decisiones? 26
27. Distintos Niveles de Abstracción
Un Arquitecto / Ingeniero
de Software debería
sentirse cómodo
trabajando a cualquier nivel
de abstracción, desde el
más alto, entendiéndose
con el negocio hasta el nivel
más bajo, es decir, codificando
¿por qué? 27
28. Distintos Niveles de Abstracción
¿Puede existir un cargo de
Arquitecto Junior?
¿por qué? 28
29. Diseño Arquitectónico
¿la arquitectura es una fase
de un proyecto?
...
¿tiene un comienzo y
un fin claramente definido?
29
30. ¿Qué es Diseño de Software?
Definición de
Requerimientos
Diseño de Sistema
y de Software ¿?
Implementación
y Pruebas de
Unidades
Integración y
Prueba del
¿esto tiene Sistema
NECESARIAMENTE
que ser en cascada?
;-)
Operación y
Mantenimiento
30
31. ¿Qué es Diseño de Software?
Definición de La Arquitectura de Software
Requerimientos
es algo que se trabaja y refina
continuamente a lo largo de
Diseño de Sistema todo el ciclo de vida
y de Software de un sistema de software
Implementación
y Pruebas de
Unidades
Integración y
Prueba del
¿esto tiene Sistema
NECESARIAMENTE
que ser en cascada?
;-)
Operación y
Mantenimiento
31
33. Diseño Arquitectónico
Arquitectura
del Software
Diseño
Arquitectónico
Estilos Frameworks
Arquitectónicos (Marcos)
Patrones de Bibliotecas /
Diseño Componentes
Clases /
Funciones
En general, estos elementos se (SOLID)
verán mas adelante 33