Diseño del Software Requirements specification Design acti vities Architectural design Abstract specificatio n Interface design Component design Data structure design Algorithm design System architecture Software specification Interface specifica tion Component specification Data structure specification Algorithm specifica tion Design pr oducts De la Arquitectura al Diseño ξ ≅ ∃ω α(ω) ⇒ (α ∧ σ) ∨ ∀ε β(ε) ⇒ρ(ε) ∨ ∀ ε ε ∉ Ω ∧ ∑φ(ε) ≈ 2.4 ∨ ¬λ ⇒δ≤τ program pepe(); Diseño del Software Ingeniería del Software 1 2 Criterios Generales n n n No existe “el” método ni “el” criterio general Hay criterios Uso de varias técnicas – Formalidad vs. facilidad de instrumentos n División en módulos para reducir la complejidad y prevenir cambios Diseño del Software Ingeniería del Software 1 3 Módulos: Visión estática n De c/u de los subsistemas. n – El detalle hacia el código n n pueden estar divididos en submódulos no son rutinas – pueden tener memoria persistente Diseño del Software n Herramienta para reagrupar tipos, estructuras de datos, subprogramas, etc. Porción de software que brinda recursos y servicios computacionales Ingeniería del Software 1 4 Diseño n Esta fase se refiere por lo tanto a la identificación de varios módulos y su interrrelación Diseño del Software Ingeniería del Software 1 5 Estrategias de Diseño u Diseño funcional • u El sistema es diseñado desde un punto de vista funcional. El estado del sistema es centralizado y compartido entre las funciones que operan sobre el mismo. Diseño Orientado a Objetos • El sistema es visto como una colección de objetos interactuando. El estado del sistema es decentralizado y cada objeto maneja su propio estado. Objetos pueden ser instancias de clases de objetos y pueden comunicarse a través de métodos. Diseño del Software Ingeniería del Software 1 6 Factores Principales n Cohesión: n – unidad sustancialmente homogénea y que sea fácilmente comprendida Desacoplamiento – entre módulos – ser comprendidos mirando sólo a ellos Hacen a la independencia funcional Alta cohesión no implica alto desacoplamiento, ni viceversa Diseño del Software Ingeniería del Software 1 7 Niveles Cohesión u Coincidental cohesion (débil) • u Logical association (débil) • u Componentes que realizan funciones similares son agrupadas Temporal cohesion (débil) • u Las partes son unidas por coincidencia Componentes que son activadas al mismo tiempo son agrupadas Procedural cohesion (débil) • Los elementos en una misma secuencia son agrupados Diseño del Software Ingeniería del Software 1 8 Niveles de Cohesión u Communicational cohesion (media) • u Sequential cohesion (media) • u El output de una parte del componente es el input de otra parte Functional cohesion (fuerte) • u Todos los elementos de una misma componente operan sobre el mismo input o producen el mismo output Cada parte de una componente es necesaria para la ejecución de una función Object cohesion (fuerte) • Cada operación provee funcionalidades para modificar o inspeccionar los atributos de un objeto Diseño del Software Ingeniería del Software 1 9 Acoplamiento fuerte Module A Module C Module B Module D Shared data area Diseño del Software Ingeniería del Software 1 10 Acoplamiento débil Module A A’s data Module B Module C B’s data C’s data Module D D’s data Diseño del Software Ingeniería del Software 1 11 Hacia un Diseño Modular 5 Criterios – Descomponibilidad – Componibilidad – Comprensibilidad – Continuidad – Protección 5 Reglas – Mapeo Directo – Pocas Interfaces – Pequeñas interfaces – Interfaces explícitas – Information Hiding 5 Principios – Unidad Lingüística Modular – Autodocumentación – Uniformidad de Acceso – Abierto-Cerrado – Simple Opción Diseño del Software Ingeniería del Software 1 12 Descomponibilidad Modular n Un método de construcción satisface DM si ayuda en la tarea de descomposición del problema software en un número de problemas menos complejos conectados por una estructura simple y lo suficientemente independiente para permitir que el resto del trabajo proceda separadamente (B. Meyer) Diseño del Software n n n n División de Trabajo Dependencias: pocas pero Conocidas Ej. Top-Down Design ContraEj.: Módulo global de inicialización – – – – buena cohesión temporal poca autonomía modular se rompe information hiding En OO cada módulo es responsable de su inicialización. Ingeniería del Software 1 13 Componibilidad Modular n Un método de construcción satisface CM si ayuda en la producción de elementos que pueden ser libremente compuestos uno con el otro para producir sistemas nuevos, posiblemente en un ambiente distinto del cual fue inicialmente desarrollado. (B. Meyer) n n n – atención con Top-Down Design n n n Diseño del Software Sacarlos del contexto original para ser reusados El sueño de la fábrica de ensamblaje Independiente de Descomponibilidad EJ.1.: librerías Ej.2: Shells Unix ContraEj.: Preprocesadores (c++) Ingeniería del Software 1 14 Comprensibilidad Modular n Un método de construcción satisface Comprensibilidad Modular si ayuda en la producción de software en la cual un lector humano puede entender cada módulo sin tener que conocer o examinar a ninguno del resto. n Proceso de Mantenimiento n ContraEj.: dependencia secuencial A!B!C (se entiende B sin A y C?) n Documentación (B. Meyer) Diseño del Software Ingeniería del Software 1 15 Continuidad Modular n Un método de construcción satisface Continuidad Modular, si en la arquitectura de software en la cual se basa, un pequeño problema en la especificaicón dispara un cambio de sólo un módulo o un pequeño grupo de módulos (B. Meyer) Diseño del Software n n n n n n Extendibilidad No definible formalmente Ej.1.: Constantes simbólicas Ej.2.: Principio de Acceso Uniforme (a un objeto sea este un dato directo o algo a ser computado) ContraEj.1: Usar representaciones físicas ContraEj.2: Arrays estáticos Ingeniería del Software 1 16 Protección Modular n Un método de construcción satisface Protección Modular, si lleva a que en las arquitecturas en las que ocurre una condición anormal en run time en un módulo queden confinados al mismo, o a lo sumo sólo a pocos vecinos. (B. Meyer) Diseño del Software n Evitar propagación de Errores Runtime por hardware, mal input, falta de recursos como memoria, etc. n Ej.: validar input en la fuente n ContraEj.: Excepciones Indisciplinadas Ingeniería del Software 1 17 Mapeo Directo n Una estructura modular definida en el proceso de construcción de un sistema software debe mantenerse compatible con toda estructura modular definida en el proceso de modelar el dominio del problema. (B. Meyer) n n n Modelos Continuidad Descomponibilidad (aprovechar lo hecho) Diseño del Software Pocas Interfaces n Cada Módulo debe comunicarse con los menos posibles de otros (B. Meyer) n n n Si hay n módulos en lo posible lo más cerca de n-1 conexiones y no a n(n-1)/2! Continuidad Componibilidad Ingeniería del Software 1 18 Pequeñas Interfaces Explícitas n Si dos módulos se comunican, deberían intercambiar la menor cantidad de información posible. (B. Meyer) n n n Cuando dos módulos A y B se comunican, esto debe ser obvio del texto código de ambos. (B. Meyer) n Continuidad Protección ContraEj.: Common de Fortran, Programación extremadamente estructurada (muchos parámetros) Diseño del Software n n n n n Continuidad Componibilidad Descomponibilidad Comprensibilidad Problema con los acoplamientos indirectos como por Shared Memory Ingeniería del Software 1 19 Information Hiding n El diseñador de cada módulo debe seleccionar un subconjuto de propiedades del módulo como la información oficial sobre el mismo, para hacerlo disponible a los autores de los módulos clientes. (B. Meyer) n n No implica protección Encapsulamiento Diseño del Software n n n n n n n n Propiedades Publicas y Privadas (o secretas) Separación de funciones de implementación (TDA y OO) Interfaz --- Iceberg Continuidad Descomponibilidad Componibilidad Comprensibilidad Ej.: procedimiento de acceso a una tabla indexada Ingeniería del Software 1 20 Notación n Sea M un conjunto de módulos: M = {m1,m2,....,mn} n Una relación R sobre M es R⊆MxM n Un módulo mi está en relación R con mj ssi <mi,mj> ∈ R. Notación: miRmj Diseño del Software Ingeniería del Software 1 21 Representación en Grafo n Grafo dirigido a G = <N,A> A⊆NxN N≅M A≅R n b Ej: M = {a,b,c,d,e} R = {<a,b>,<a,e>,<b,c> <e,d>,<d,c>} Diseño del Software c Ingeniería del Software 1 e d 22 Características de la relación n n n No puede ser reflexiva: <mi,mi> ∉ R puede ser simétrica y transitiva grafos acíclicos: – Ej.: árboles – si ∀i <mi,mi> ∉ R* (clausura transitiva) – directo y acíclico ⇒ jerarquía • muchos caminos entre dos nodos • concepto de nivel Diseño del Software Ingeniería del Software 1 23 Distintos Niveles System level Sub-system level Diseño del Software Ingeniería del Software 1 24 La relación USA n n Describe las n mi esta en relación funcionalidades que USA con mj brinda un módulo y (mi USA mj ) si para cuales son las que el módulo mi sea correcto si funcionalidades que necesita la correcta un módulo necesita ejecución de mj . mi resulta ser un cliente de los servicios que provee mj Ingeniería del Software 1 25 Diseño del Software La relación USA n n n n se define estáticamente describe el desacoplamiento llamadas a procedimientos no siempre implican USA y viceversa aciclicidad Diseño del Software n Casos extremos: – USA = M x M – USA = ∅ n Indicaciones: – minimizar arcos salientes – maximizar arcos entrantes análisis por niveles de abstracción Ingeniería del Software 1 26 n La relación Es_Componente_De n n Relación en la dirección de refinamiento sucesivos (topdown) Debe ser una jerarquía (no necesariamente un árbol) Diseño del Software n n Sólo las hojas se implementan efectivamente Los nodos internos son módulos lógicos Ingeniería del Software 1 27 Indicaciones n n n Redefinición de USA respecto a Es_Componenete_De Construcción Incremental Postergar las decisiones Diseño del Software n INFORMATION HIDING – cajas negras – definidas por los servicios que brindan – Interfaz e Implementación – Exportación e Importación – principio de división de trabajo – ¿Qué esconder? Ingeniería del Software 1 28 Descripciones de Diseño u u u u Notaciones Gráficas. Usadas para mostrar relaciones entre los componentes Lenguajes de descripción de Programas. Basados en lenguajes de prog. pero con más flexibilidad para representar conceptos abstractos. Texto informal Descripción en lenguaje natural Todas estas notaciones pueden ser usadas para diseñar sistemas grandes Diseño del Software Ingeniería del Software 1 29 Diseño Orientado a Objetos n Estrategia de diseño basada en – INFORMATION HIDING – ABSTRACCION – MODULARIDAD n Crea una representación del mundo real y lo corresponde con una solución basada en los datos Diseño del Software Ingeniería del Software 1 30 Diseño OO n El software es visto como un conjunto de objetos que interactúan, con su estado privado, en vez de un conjunto de funciones que comparten un estado global O2 O1 estado 1 estado 2 O4 estado 4 O3 estado 3 El mundo es visto como un conjunto.... Diseño del Software Ingeniería del Software 1 31 Características n Los objetos son abstracciones del mundo real o entidades del sistema que son responsables de manejar su estado privado y ofrecen servicios a otros objetos. – Son un modelo de los objetos externos que pueblan el mundo en que actúa el programa. n Los objetos son entidades independientes que pueden ser rápidamente cambiados por la información de la representación y el estado queda dentro del objeto. – un objeto es caracterizado al exterior sólo por la interfaz que brinda, es decir el conjunto de recursos que pone a disposición. Diseño del Software Ingeniería del Software 1 32 Características n La funcionalidad del sistema es expresada en términos de operaciones y servicios asociados con cada objeto. n Áreas de datos compartidos son eliminados. Los objetos se comunican llamando los servicios ofrecidos en vez de compartir variables. – Disminuye el acoplamiento – Disminuye el riesgo de modificaciones a datos compartidos n Los objetos pueden ser distribuidos y pueden ejecutarse en paralelo o concurrentemente. Estas decisiones no deben tomarse tempranamente. – recordar: posponer lo mayor posible toda decisión trascendente de diseño. Diseño del Software Ingeniería del Software 1 33 No preguntes qué hace el sistema sino qué le hace a qué cosa n OOD es el método que permite definir arquitecturas del software basados en los objetos que todo sistema o subsistema usa Diseño del Software n OOD es la construcción de sistemas software como una colección estructurada de TAD. Ingeniería del Software 1 34 Criterios n n n n n Descomponibilidad: facilidad de descomponer un gran problema en subproblemas Componibilidad: facilidad de reuso Comprensibilidad: facilidad de entender un módulo por sí solo Continuidad: pequeños cambios implican pocos cambios Protección: reducir efectos colaterales lo buscado por cualquier método de diseño Diseño del Software Ingeniería del Software 1 35 7 conceptos n n n n Object based modular structure: los sistemas están modularizados en base a su estructura de datos. Data abstraction: los objetos deberían ser descriptos como implementaciones de TADs. Automatic Memory Management: los objetos no usados deberían ser liberados por el lenguaje subyacente. Clases: cada tipo no primitivo es un módulo y cada módulo de altoIngeniería niveldeles un tipo. Software 1 36 Diseño del Software 7 conceptos n n n Una clase puede ser definida como una extensión o una restricción sobre otras. Polimorfismo y Dynamic Binding: se deben permitir referencias a objetos de más de una clase y las operaciones deben poder realizarse en diferentes clases. Múltiple y repetida herencia: debe ser posible declarar una clase como herede de más de una clase o más veces de la misma. Diseño del Software Ingeniería del Software 1 37 Clases n module La clase es el tipo del objeto implementation Clase Persona atributos nombre: string; apellido: string; servicios Mario Rossi Francisca Verdi Carla Bianchi presentate() exports clase persona: descripción de las características comunes a todos los objetos de tipo persona Diseño del Software Ingeniería del Software 1 38 HERENCIA En el mundo real los objetos son clasificados según características comunes Título del diagrama Vertebrados Peces Corvinas Anfibios Surubíes Reptiles Pájaros Mamíferos Carnívoros Herbívoros El mismo principio se puede aplicar a los objetos de un programa. La clasificación se hace definiendo un nuevo tipo como extensión de un tipo preexistente Diseño del Software Ingeniería del Software 1 39 La relación HEREDA_DE presentate() Persona Atributos nombre: string; apellido: string presentate() Estudiante Atributos matrícula: int; Diseño del Software la clase (el módulo) estudiante “extiende” la clase (el módulo) persona: n AGREGANDO un nuevo atributo (matrícula) n REDEFINIENDO un servicio (presentate) Heredadas Heredadaspor por ser persona ser personatambién también nombre = Piero apellido = Fraternalli matricula = 585/96 presentate() = “Buen día soy Fraternalli, estudiante 585/96” Ingeniería del Software 1 40 HEREDA_DE => ES_UN (IS_A) unión nombre Persona peso existe vacío Hombre Embarazada Mujer Conj. de Enteros Conj. de Enteros Ordenados 1er Elem Diseño del Software Ingeniería del Software 1 existe 41