Академический Документы
Профессиональный Документы
Культура Документы
Diseo de Software
Requerimientos
Arquitectura/Diseo de Software
Sensor Sensor
Motor de Reversa
Piloto
Sensor
pulsos
Motor de Reversa
Piloto
Dependiente
Nivel de Completitud
Enunciado de la Implementacin
10
Design
Subsistema
Requerimientos Design
Componente
Requerimientos Design
Diseo de Software
Los Sistemas de Software Intensivo son entes complejos Cmo lidiamos con la complejidad?
millones de lneas de cdigo, variables, posibles estados, etc... Estructura y Abstraccin... ...s, pero cmo? qu abstracciones? qu relaciones?...
Disear involucra estructurar la solucin utilizando abstracciones y relaciones entre las abstracciones apropiadas para poder:
Documentar y Comprender la propuesta de solucin Razonar sobre su grado de adecuacin c.r.a los requerimientos Comunicarla Implementarla Verificar/Validar el producto final Modificar/Adaptar la solucin en la medida que cambien los requerimientos
Diseo de Software
Gua en la concepcin de productos de software (requerimientos complejos, integracin de componentes existentes, tecnologa, familias de productos, etc.) Drivers: atributos de calidad/requerimientos no funcionales y restricciones de proyecto y tecnologa Usualmente en tensin
A diferencia del mundo de los requerimientos: Denota conceptos del mundo de la solucin (pero incluye fenmenos de la interfase mundo mquina) En general se describen propiedades localizadas (unidad, componente, mdulo) y son de naturaleza operacional
13
Pasos Macro
Diseo Arquitectnico (o Arquitectura) Diseo Detallado (o Diseo)
Proceso iterativo
Decisiones clave primero
ej. Requerimientos no-funcionales crticos Qu va a cambiar?
El Diseo Detallado y la Tecnologa de Construccin de Soluciones Decisiones, patrones, notaciones, modelos y blueprints de diseo pueden estar fuertemente impactados por el paradigma de la tecnologa que se usa en la solucin,
(especialmente si hablamos de un diseo detallado)
Dnde est el lmite entre codificar y disear? Veremos el caso cuando hablemos de POO
19
Introduccin a POO
20
Documentacin
21
La descripcin de un sistema complejo no es unidimensional Es clave saber cules son las vistas relevantes y vincularlas Relevancia: depende del propsito (e.g., enunciar la misin de implementacin, anlisis de atributos de calidad, generacin automtica de cdigo, planificacin, etc.)
22
Vistas
Vistas y stackeholders
La metfora de D.Garlan
I do bones,
not hearts.
D.Garlan
23
Vistas
Las vistas exponen atributos de calidad en diferente grado:
Vista modular: portabilidad Vista de deployment: performace, confiabilidad
Enfatizan aspectos e ignoran otros para que el problema sea abordable Ninguna vista es EL diseo
24
Vistas Clsicas
Vista Modular: Cmo agrupamos el cdigo?
mtodos, procedimientos, clases, librera, DLLs, APIs, paquetes, mdulos... usa, subclase, contiene, depende-de,... diagrama de clases y de paquetes
25
26
Alternando caracteres:
Module View
Alternar maysculas con minsculas a partir de un stream de caracteres
main
sofTWareArchitecture => SoFtWaReArCiTeCtUrE
split
lower
upper
merge
Referencias
config
input/output
Modulo
Usos
27
Alternando caracteres:
C&C View
lower
split
merge
upper
Referencias
Filter Pipe
Binding
28
29
30
31
32
33
34
35
36
Mezclando Vistas
37
Mezclando Vistas
38
Mezclando Vistas
39
40
Mdulo
Concepto proveniente de los 60s y 70s Basado en la nocin de unidad de software que provee servicios a travs de una interfaz bien definida
Elementos
Un mdulo es una unidad de cdigo que implementa un conjunto de responsabilidades
Una clase, una coleccin de clases, una capa o cualquier descomposicin de la unidad de cdigo
42
Relaciones
Se distinguen tres tipos de relaciones
es parte de que define la relacin entre un submdulo A y un mdulo B depende de que define la dependencia entre dos mdulos A y B es un que define una relacin de generalizacin entre un modulo especfico y otro ms general
43
Anlisis de Impacto
Permite predecir el efecto de las modificacin del sistema
44
45
46
47
Elementos
Son entidades con manifestacin runtime que consumen recursos de ejecucin y contribuyen al comportamiento en ejecucin del sistema La configuracin del sistema es un grafo conformado por la asociacin entre componentes y conectores
Utilidad
Cuales son los componentes ejecutables y
como interactan?
Cules son los repositorios y que componentes los acceden? Qu partes del sistema son replicadas y cuantas veces? Cmo progresan los datos a los largo del sistema a medida que ste se ejecuta?
49
Utilidad
Qu protocolos de interaccin son usados por las entidades comunicantes? Qu partes del sistema se ejecutan en paralelo? Cmo la estructura del sistema puede cambiar a medida que se ejecuta?
50
Propiedades
Confiabilidad
Performance
Tiempo de respuesta / carga Tiempo de latencia y volumen de procesamiento
Recursos requeridos
Necesidades de almacenamiento Necesidades de procesamiento
51
Propiedades
Funcionalidad
Funciones mapeadas sobre el componente
Protocolos
Patrones de eventos o acciones que pueden tener lugar en una interacciones representada por el elemento
Seguridad
Encripta Audita Autentica
52
53
Resumen Conectores
C&C viewtype define modelo consistente de elementos que tienen presencia runtime C&C viewtype incluye informacin sobre los caminos de interaccin entre los componentes Los componentes tienen interfaces llamadas ports Los conectores tienen interfaces llamadas roles
54
Ejemplo: IP 2000
Siemens
Source: Applied Software Architecture (Nord, Hofmeister) (Escaneado)
55
Visin Conceptual
56
57
Vista de Mdulos
58
Vista de Mdulos
Descomposicin
59
Vista de Mdulos
Descomposicin
60
Visin Conceptual
C&C
61
C&C y Comportamiento
Sebastian Uchitel
62
C&C - Descomposicin
Visin Conceptual
63
Visin Conceptual
Comportamiento
64
Visin Conceptual
C&C
65
Conector PacketPipe
Visin Conceptual
66
Visin de Ejecucin
67
Principios de Diseo
68
Modularidad
Coleccin bien definida de partes e interacciones bien delimitadas
Ocultamiento de la informacin
Confinar el impacto del cambio (de un mdulo) El ciente de un mdulo no debe conocer los detalles de diseo difciles o que pueden cambiar
Encapsulamiento
Clara separacin de interface e implementacin Mecanismos para no conocer ni usar ms de lo que la interface promete
Abstraccin
Foco en lo esencial
69
Principios (Cont.)
Explotar el Polimorfismo
tratamiento uniforme de una entidad que puede tener mltiples formas Sustitucin Liskov/Wing
Inversin de dependencia/control
Depender en abstracciones e interfaces en lugar de clases concretas Ser invocado en lugar de invocar para reuso de abstracciones de control
Segregacin de interfaces Una sola responsabilidad (cohesion) Open-Close Deteccin de puntos de variabilidad
Advertencia: Estos principios han nacido con la extensibilidad y la modificabilidad como atributos de calidad preponderantes
70
Estrategias de Descomposicin
Problemas que sabemos resolver
Ej. M. Jacksons Problem Frames: Control, Visualizacion, Correspondencia, etc
Pasos de ejecucin
Ej. Filtros de procesamiento de imagenes
Tempo de ejecucin
Ej. Acumulacin vs Utilizacin de Informacin
Funcional
Ej. Facturacin, Compras y Sueldos
Modos de Operacin
Normal vs Excepcional
Datos
Ej. Guiado por el modelo conceptual. Clientes, Ambulancias...
71
Advertencia
Divide and Conquer est muy bien... ...pero despues de descomponer hay que integrar Divide to Conquer and reunite to rule M. Jackson Hay que poder razonar sobre la composicin...
73
Descomposicin de software
Mdulos
Agrupa estructuras de datos y cdigo (y posiblemente otros mdulos) Entidad esttica A veces, separa Interfaz de Implementacin
A veces, es compilable de manera independiente
Es una unidad de trabajo para desarrollo Interfaz bien definida
Componentes
Entidades run-time Descomposicin para cumplir con ciertos requerimientos no funcionales distintos a los mdulos (performance, distribucin, tolerancia a fallas, seguridad, adaptabilidad en run-time, etc.).
74
Abstraccin
Suprimir detalles de implementacin permite
Posponer ciertas decisiones de detalle que ocurren a distintos niveles de anlisis Simplificar el anlisis, comprensin y justificacin de la decisin de diseo
Tipos de Abstraccin
Procedural ej. Funciones, mtodos, procedimientos Datos ej. TADs, modelos de componentes Control ej. loops, iteradores, frameworks y multitasking
75
76
Acoplamiento
Grado de dependencia del mdulo sobre otros mdulos y en particular las decisiones de diseo que estos hacen Generalmente correlaciona inversamente con cohesin Alto acoplamiento generalmente conlleva
Bajo/Dbil acoplamiento y Alta Cohesin Propagacin de cambios cuando se altera un mdulo Mdulos son difciles de entender aisladamente Reuso y testeo de mdulos es difcil ya que se requieren otros mdulos Un mdulo usa un tipo de otro mdulo Si un mdulo usa un servicio de otro mdulo Si un mdulo es un submdulo de otro Tradeoff...
Acoplamiento se incrementa si
80
Tipos de Acoplamiento
Ordenado de mayor a menor (segun E. Yourdon y L. Constantine...) Contenido Comn
Cuando un mdulo modifica o confa en el lo interno de otro ej. acceso a datos locales o privados Cuando comparten datos comunes ej. una variable global Cuando comparten aspectos impuestos externamente al diseo. ej. formato de datos, protocolo de comunicacin, interfaz de dispositivo. Cuando un mdulo controla la lgica del otro ej. pasndole un flag de comportamiento). Cuando comparten una estructura de datos pero cada uno usa slo una porcin Paso de todo un registro cuando el mdulo slo necesita una parte. Mdulos se comunican a travs de datos en parmetros ej. llamado de funciones de otro mdulo Mdulos se comunican a travs de mensajes. Posiblemente no se conocen explcitamente
81
Externo Control
Mensajes
Representacin de datos Algoritmos Formatos de entrada y salida Interfaces de bajo nivel Separacin de polticas y mecanismos Decisiones estructurales de ms bajo nivel Aspectos funcionales
82
83
84
85
86
Cohesin
Del diccionario
cohesin. (Del lat. cohaesum, supino de cohaerre, estar unido). cohesion. the action or fact of forming a united whole
1. f. Accin y efecto de reunirse o adherirse las cosas entre s o la materia de que estn formadas.
Grado de [foco | cun bien trabajan juntos | coherencia | unin] que tienen los distintos elementos de un mdulo Alta cohesin tiende a proveer:
Robustez Confiabilidad Reusabilidad Comprensibilidad Testeabilidad Mantenibilidad
87
Tipos de Cohesin
Ordenado de peor a mejor (segn E. Yourdon y L. Constantine en los 70s) Coincidental
ej. mis funciones de uso frecuente, utils.lib
Lgico
Temporal
Existe una categora lgica que agrupa elementos aunque hagan cosas muy distintas ej. todas las rutinas de I/O Agrupadas por el momento en que se ejecutaran ej. Funciones que atajan un error de output, crean un error en un log y notifican al usuario Agrupadas por pertenecer a una misma sequencia de ejecucin o poltica. ej. funciones que chequean permisos y abren archivos Agrupadas por operar sobre los mismo datos. ej. objetos, operaciones sobre clientes. Agrupadas porque el output de uno es el input de otro Agrupadas porque contribuyen a una tarea bien definida del mdulo Ed dice que estos son aceptables
Procedural
Comunicacional
Secuencial
Funcional
88
89
91
92
Design Patterns
Gamma, Helm, Johnson & Vlissides, 1995 (Aka The gang of four) Soluciones esquemticas (buen diseo) a problemas recurrentes en el desarrollo de software OO Catlogo de 23 patrones:
fenmeno de definicin terminolgica
Los Design Patterns se suponen que incorporan los principios de diseo que vimos
93
Design Patterns
La descripcin de un patrn de diseo debe incluir:
Nombre: Debe ser significativo Problema: una descripicin del problema atacado por el patrn Contexto: precondiciones bajo las que puede ocurrir Fuerzas: restrciciones y cuestiones que la solucin debe tratar Solucin: relacin estticas y dinmicas entre los componentes del patrn. La solucin resuelve las fuerzas en el contexto dado Ms
Ejemplos de uso Patrones relacionados Otros nombres usados del patrn Ejemplo en cdigo
94
Design Patterns
Tipos de Patterns:
De Creacin: soluciones flexibles para la creacin de instancias (e.g., abstract factory, singleton, etc.) Estructurales: soluciones de organizacin (herencia, composicin, agregacin, asociacin) de clases e interfaces para la extensibilidad y cambio (ej., composite, bridge, facade, adapter, etc.) De comportamiento: soluciones para la asignacin de responsabilidades y diseo de algoritmos. Muestran relacin esttica y comunicacin (ej., command, interpreter, mediator, observer, memento, etc. )
95
97
public class Singleton { // Protected constructor is sufficient to suppress unauthorized calls to the constructor protected Singleton() {}
/** * SingletonHolder is loaded on the first execution of Singleton.getInstance() or the first access to SingletonHolder.instance , not before. */ private static class SingletonHolder { private final static Singleton instance = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.instance; } }
98
Design Patterns
99
Design Patterns
100
Design Patterns
101
Design Patterns
102
Design Patterns
103
Design Patterns
104
Design Patterns
105
Design Patterns
106
Design Patterns
107
Design Patterns
108
Design Patterns
109
Design Patterns
Strategy
Design Patterns
111
Design Patterns
112
Design Patterns
113
114
Evaluacin de Diseos
3 grandes tipos de evaluacin
Requerimientos Requerimientos Requerimientos
Diseo
Diseo
Diseo
Cdigo
Cdigo
Cdigo
115
116
Diseo inconsistente
Mdulos funcionan, pero no encajan Divide to conquer, reunite to rule
117
121
Mtricas de Software
1970s: Intentos para definir criterios cuantitativos simples de complejidad del sofwtare y otras calidades Halstead Complexity Measures Program Length = total operators + total operands Program Vocabulary = total distinct operators + total distinct operands Volume = Program Length * (log2Program Vocabulary) Difficulty = (total distinct operators/2) * (total operands/total distinct operands) Effort = Difficulty * Volume McCabe Complexity Measure Cyclomatic Complexity = edges in call graph nodes in call graph + connected components COCOMO modelo de costo para la estimacin de costo, esfuerzo y calendario
122
Transactions on Software Engineering, vol. 20, no. 6, pp. 476-493, Jun. 1994
123