Temario Unidad 1: Diseño de Software 1. Fundamentos de diseño de software 2. Diseño arquitectónico 3. Diseño de objetos 4. Diseño de la persistencia de datos 5. Diseño de la interfaz Unidad 2: Construcción y mantenimiento del software 6. Implementación del software 7. Verificación y validación del software 8. Evolución del software 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Ingeniería del software de gestión II 1
1.El diseño y la Ingeniería del Software 2.Conceptos de diseño 3.Actividades del diseño 4.Enfoques para el desarrollo del diseño Tema 1 Fundamentos de diseño de software 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 2
Bibliografía Los conceptos de diseño estudiados en este tema se abordan detalladamente en: Ingeniería del Software: un enfoque práctico, 6ª edición Capítulo 8 R. S. Pressman. McGraw Hill, 2010 También se puede encontrar información en : Análisis y diseño orientado a objetos de sistemas, 3ª edición Capítulo 13 S. Bennett, S. McRobb y R. Farmer. McGraw-Hill, 2006 Se recomienda realizar una búsqueda de bibliografía disponible en la Universidad de Jaén (tanto libros como recursos electrónicos) relacionados con el diseño de software y las metodologías de diseño 3
Actividades propuestas 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Consultar en la bibliografía los distintos tipos de ciclos de vida del software, y cómo reflejan la tarea de diseño Consultar en cualquiera de las referencias incluidas en la bibliografía básica los aspectos teóricos relacionados con los fundamentos del diseño de software Localizar información y recursos disponibles sobre diseño de software en las página web asociadas a algunas de las referencias bibliográficas básicas de Ingeniería del Software Buscar distintas definiciones del concepto de patrón de diseño en la bibliografía indicada, en las referencias sobre ingeniería del software disponibles en la web de la biblioteca (libros electrónicos) y en internet 4
1. El diseño y la Ingeniería del Software 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Breve comentario sobre la Ingeniería del Software - ¿Qué es la Ingeniería del Software? - ¿Para qué sirve? - ¿Se utiliza realmente para el desarrollo de aplicaciones? Evolución de las metodologías de desarrollo de software Programación ⇒ Diseño ⇒ Análisis 5
1. El diseño y la Ingeniería del Software 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Qué es el diseño: “... el proceso de aplicar distintas técnicas y principios con el propósito de definir un dispositivo, proceso o sistema con suficientes detalles como para permitir su realización física” Taylor,
1. El diseño y la Ingeniería del Software Dónde se encuadra: Es la primera fase de construcción del sistema desde el punto de vista del dominio de la solución (sistema software): El Análisis estudia el sistema a desarrollar desde el punto de vista del dominio del problema El Diseño lo hace con el punto de vista del dominio de la solución La fase concreta en que se desarrolla el diseño depende del ciclo de vida que se utilice 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 7
1. El diseño y la Ingeniería del Software 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Cómo se desarrolla: Proceso Punto de vista de gestión: Diseño preliminar Diseño detallado Punto de vista técnico: Diseño de datos Diseño arquitectónico Diseño a nivel de componentes Diseño de la interfaz 8
1. El diseño y la Ingeniería del Software 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Problemas que nos podemos encontrar durante la fase de diseño: Mala especificación de requisitos Fallos al considerar alternativas de diseño Querer detallar demasiado pronto Estos problemas se pueden paliar utilizando notaciones sistemáticas El diseño es la base del resto del desarrollo y el mantenimiento “El diseño ayudará al ingeniero de software a reconocer la diferencia entre un programa que funcione y otro que funcione correctamente” Jackson 9
1. El diseño y la Ingeniería del Software En el proceso de diseño se utilizan 4 elementos: Intuición y criterios basados en experiencia anterior Principios y/o heurísticas para guiar el proceso de desarrollo Criterios de calidad Un proceso iterativo que concluye con el diseño final El aspecto más importante en el diseño es la calidad Criterios para asegurar la calidad: Tratar de representar jerárquicamente la organización del problema Desarrollar un diseño modular Utilizar un método para desarrollar el diseño que sea repetible y se base en los requisitos de software obtenidos en el análisis 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 10
1. El diseño y la Ingeniería del Software Filosofías de diseño Filosofía descendente (TOP-DOWN) Primero se pone atención en aspectos globales de todo el sistema. Conforme se avanza en el diseño, el sistema se descompone en subsistemas añadiéndole detalles específicos Filosofía ascendente (BOTTON-UP) Se intenta primero identificar un conjunto base de objetos, acciones y relaciones. Luego estos conceptos básicos se utilizan para formular otros conceptos de más alto nivel Casi nunca hay un diseño puramente ascendente o descendente. La situación más habitual es utilizar un enfoque fundamentalmente descendente, pero anticipando ciertos detalles como se haría en un enfoque ascendente 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 11
1. El diseño y la Ingeniería del Software La mayoría de proyectos de software son complejos, y la estrategia utilizada para superar la complejidad es la descomposición: dividir el problema en unidades más pequeñas que sean manejables. El enfoque tradicional para realizar esto es el análisis y diseño estructurados: Descomponer el problema en funciones o procesos Este método origina una división jerárquica de procesos constituidos por subprocesos Ejemplo: Sistema de Información de Biblioteca podría ser el siguiente: 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 12
1. El diseño y la Ingeniería del Software Otra forma de realizar la descomposición es usando un esquema de análisis y diseño orientado a objetos En este esquema, se busca descomponer el problema en objetos, y no en funciones En el ejemplo del Sistema de Información de Biblioteca: 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 13
1. El diseño y la Ingeniería del Software 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática En sus comienzos, el desarrollo orientado a objetos se desarrollaba de acuerdo con las siguientes actividades Análisis orientado a objetos Desarrollo de un modelo orientado a objetos del dominio de aplicación Los objetos identificados reflejan las entidades y operaciones que se asocian con el problema a resolver Diseño orientado a objetos Desarrollo de un modelo orientado a objetos de un sistema de software para implementar los requerimientos identificados Los objetos en un diseño orientado a objetos están relacionados con la solución del problema por resolver Programación orientada a objetos Llevar a cabo el diseño de software utilizando un lenguaje de programación orientado a objetos Un lenguaje de este tipo permite la implementación directa de los objetos y suministra recursos para definir las clases de objetos 14
1. El diseño y la Ingeniería del Software 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Sin embargo, actualmente se prefiere hablar de tres fases de alto nivel en las metodologías orientadas a objetos: Planificación y Especificación de Requisitos Planificación, definición de requisitos, construcción de prototipos, etc. Construcción del sistema, que consta de las siguientes fases: Análisis (diseño de Alto Nivel): Se aborda el sistema a construir como una caja negra, centrándonos en la visión que tienen los actores desde el exterior (los casos de uso). Se analiza el problema construyendo un modelo conceptual Diseño (diseño de Bajo Nivel): Se especifica en detalle el sistema definido en el análisis, describiendo todas las operaciones que debe realizar para satisfacerlo Implementación: La especificación del diseño se implementa en un lenguaje Pruebas: Se desarrollan pruebas para corroborar que el software satisface lo especificado en la etapa de Planificación y Especificación de Requisitos Instalación: Puesta en marcha del sistema su entorno previsto de uso 15
1. El diseño y la Ingeniería del Software 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Características de los enfoques orientados a objetos Desplazamiento del esfuerzo de desarrollo hacia el análisis Se traslada gran parte del esfuerzo del desarrollo de software hacia la fase de análisis. El esfuerzo adicional en el análisis resulta más que compensado por una implementación más rápida y más sencilla, y una mayor facilidad para cambios futuros Interés especial en las estructuras de datos antes que en las funciones Una aproximación orientada a objetos centra su atención en las estructuras de datos, y no en las funciones que haya que efectuar, aportando una base más estable y menos vulnerable a los cambios Un proceso de desarrollo sin costuras Se utiliza la misma notación a lo largo del ciclo de desarrollo, por lo que la separación entre fases del ciclo de vida resulta mucho menos aparente Iterativo más que secuencial El proceso de desarrollo real es iterativo. La carencia de costuras del desarrollo orientado a objetos hace más sencillo repetir los pasos de desarrollo con grados de detalle cada vez más finos 16
2. Conceptos de diseño 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática En las metodologías de Ingeniería del Software, el diseño ha ido evolucionando a partir de ciertos conceptos fundamentales Aquí estudiaremos algunos de estos conceptos fundamentales, aplicables en la mayoría de las metodologías de desarrollo: Abstracción Uso de Patrones Modularidad Independencia funcional Ocultamiento de información Refinamiento por pasos Clases de diseño Muchos de estos conceptos se pueden considerar complementarios, y están muy relacionados unos con otros 17
2. Conceptos de diseño 1. Abstracción 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Nos permite concentrarnos en un problema a un cierto nivel de generalización independiente de detalles irrelevantes de bajo nivel Mecanismos de abstracción en el diseño de software: Abstracción funcional. Secuencia de instrucciones con una función limitada y específica Abstracción de datos. (TAD) Tipos de datos a utilizar, junto a sus operaciones permitidas. Encapsulado de datos Abstracción en el control. Permite hablar de un efecto de control sin necesidad de definir el mecanismo exacto 18
2. Conceptos de diseño 2. Uso de patrones Un patrón es una solución a un problema general, utilizable para resolver un problema particular ajustando sus atributos Las características del patrón indican los atributos ajustables para permitir que el patrón se ajuste a una variedad de problemas Tipos de patrones por el grado de abstracción: Patrones arquitectónicos. Define la estructura general del software y las relaciones entre subsistemas y componentes del software Patrones de diseño. Se aplican a un elemento específico del diseño como un agregado de componentes para resolver algún problema de diseño Patrones de código. Suelen implementar un elemento algorítmico o un componente, un protocolo de interfaz específico o un mecanismo de comunicación entre los componentes Los que más nos interesan son los patrones de diseño 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 19
2. Conceptos de diseño 2. Uso de patrones 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Los patrones de diseño pueden describirse empleando una plantilla: Nombre del patrón: describe el patrón en un nombre corto, pero expresivo Intención: describe el patrón y lo que hace Motivación: proporciona un ejemplo del problema Aplicabilidad: anota situaciones específicas de diseño a las que es aplicable Estructura: describe las clases que se requieren para implementar el patrón Participantes: describe responsabilidades de clases necesarias para implementarlo Colaboraciones: colaboración entre participantes para realizar sus responsabilidades Consecuencias: describe las “fuerzas de diseño” que afectan al patrón y los intercambios potenciales que deben considerarse al implementarlo Patrones relacionados: patrones de diseño relacionados (referencias cruzadas) La descripción del patrón puede considerar un conjunto de fuerzas de diseño: Describen requisitos no funcionales en el que se aplicará el patrón Definen las limitaciones a la implementación del diseño 20
2. Conceptos de diseño 3. Modularidad En un diseño modular, el software se divide en componentes con nombres independientes a los que se denomina módulos El conjunto de módulos satisfacen los requisitos del problema Propiedades de un sistema modular: La abstracción de un proceso será un subsistema definido con claridad Las funciones tendrán un propósito especifico Las funciones sólo compartirán datos globales, y de forma selectiva Encapsulación de las instancias de los tipos de datos con sus estructuras 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 21
2. Conceptos de diseño 3. Modularidad Ventajas de la modularidad: Complejidad (divide y vencerás) Sea x = problema a resolver C (x) = función que mide la complejidad del problema x E (x) = función que mide el esfuerzo para resolver x Si p1 y p2 son problemas y C(p1) > C(p2), entonces: E(p1) > E(p2) C(p1+p2) > C(p1) + C(p2) E(p1+p2) > E(p1) + E(p2) 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 22
2. Conceptos de diseño 3. Modularidad Ventajas de la modularidad: Costes Región de coste mínimo (nº óptimo de módulos) Coste Nº de módulos Coste de integración Coste de desarrollo 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 23
2. Conceptos de diseño 3. Modularidad Criterios de modularización: Criterio convencional: cada módulo junto con sus submódulos corresponden a un paso del proceso en la secuencia de ejecución Criterio de ocultamiento de información: cada módulo oculta a otros módulos las decisiones difíciles o modificables en el diseño Abstracción de datos: un módulo oculta detalles de representación bajo las funciones que procesan o modifican la estructura de datos Niveles de abstracción: hacer una jerarquía de complejidad de las funciones dentro de los módulos Modelación del problema: la estructura del sistema se ajusta a la del problema Las estructuras de datos se ajustan a la estructura del problema, con lo que hay unas funciones visibles para manejar esas estructuras Los módulos crean una red de procesos de comunicación en la que cada proceso corresponde a una entidad del problema Considerar la independencia funcional: desarrollar módulos que tengan una función clara y que apenas tengan interacción con otros módulos 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 24
2. Conceptos de diseño 4. Independencia funcional El concepto de independencia funcional es una derivación directa del de modularidad y de los conceptos de abstracción y ocultamiento de la información El desarrollo y mantenimiento de software es más fácil utilizando módulos independientes La independencia funcional mide la independencia entre módulos utilizando dos criterios: el acoplamiento y la cohesión Acoplamiento: Medida de la interdependencia entre los módulos Cohesión: Medida de la fuerza funcional relativa de un módulo 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 25
2. Conceptos de diseño 4. Independencia funcional 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Acoplamiento: Medida de la interdependencia entre los módulos 26
2. Conceptos de diseño 4. Independencia funcional Tipos de acoplamiento: Sin acoplamiento directo: cuando módulos que están totalmente separados dentro de la estructura del software no están relacionados unos con otros Acoplamiento de datos: cuando un módulo es accesible mediante una lista de argumentos convencionales a través de la cual pasan los datos Acoplamiento por estampado: variación del acoplamiento de datos, que se presenta cuando se pasa una porción de estructura de datos (en lugar de argumentos simples) mediante un interfaz de módulo Acoplamiento de control: se produce un paso de control entre módulos. Este control se pasa mediante un indicador sobre el que se toman las decisiones en un módulo subordinado o superior Acoplamiento externo: cuando los módulos están ligados a un entorno externo del software Acoplamiento común: cuando varios módulos hacen referencia a un área de datos global Acoplamiento por contenido: un módulo hace uso de información de control o de datos mantenidos dentro de los límites de otro módulo 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 27
2. Conceptos de diseño 4. Independencia funcional Cohesión: Medida de la fuerza funcional relativa de un módulo 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 28
2. Conceptos de diseño 4. Independencia funcional Tipos de cohesión: Cohesión coincidental: un módulo ejecuta unas tareas que están relacionadas con otras débilmente Cohesión lógica: un módulo ejecuta tareas están relacionadas lógicamente Cohesión temporal: un módulo tiene tareas que están relacionadas porque se han de ejecutar a la vez Cohesión procedimental: los distintos elementos de un módulo están relacionados y han de ejecutarse en un orden específico Cohesión de comunicación: cuando todos los elementos de procesamiento se concentran sobre un área de una estructura de datos Cohesión secuencial: se da entre los elementos de un módulo cuando una salida de un módulo sirve como entrada de otro Cohesión funcional: se produce cuando todos los elementos de un módulo se encuentran relacionados con el objetivo de cumplir una única función Cohesión informacional: el módulo tiene una estructura de datos compleja y varias estructuras que manejan dicha estructura. A diferencia de la cohesión de comunicación, implica que todo el código del módulo se ejecuta cuando se llame a ese módulo 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 29
2. Conceptos de diseño 4. Independencia funcional En sistemas modulares, es deseable obtener bajos niveles de acoplamiento y altos niveles de cohesión. Suelen considerarse como niveles más adecuados: Acoplamiento de datos Cohesión funcional 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 30
2. Conceptos de diseño 5. Ocultamiento de información Cada módulo oculta los detalles internos de sus procesos comunicándose unos módulos con otros a través de interfaces bien definidas Actualmente este concepto se suele denominar “encapsulamiento” El ocultamiento de información evita que se propaguen los errores producidos al hacer cambios en alguno de los módulos Cuestiones a ocultar de un módulo respecto a otro: Estructura de datos y los detalles internos de implementación Formato de bloques de control. Códigos de caracteres, detalles dependientes de la máquina El ocultamiento de información se puede utilizar como técnica de diseño arquitectónico o como criterio de modularidad 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 31
2. Conceptos de diseño 6. Refinamiento por pasos Propuesto por Niklaus Wirth, es un enfoque de diseño descendente en el que el desarrollo de una aplicación se realiza al refinar sucesivamente los niveles de detalla procedimentales Actividades: Tomar unas decisiones de diseño para descomponer en niveles elementales Aislar aspectos de diseño que no sean totalmente independientes Posponer las decisiones sobre detalles de representación Que se pueda demostrar y que se demuestre, que en cada paso que damos el refinamiento refleja fielmente los pasos anteriores Ventajas: Descomposición descendente Añade los detalles poco a poco Aplaza decisiones de diseño Verificación continua de la consistencia del diseño 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 32
2. Conceptos de diseño 7. Clases de diseño El modelo de análisis define un conjunto completo de clases de análisis, que describen los elementos del dominio del problema Durante el diseño se define un conjunto de clases de diseño: Refinando las clases de análisis al proporcionar detalles de diseño que permitan la posterior implementación de las clases Produciendo nuevas clases de diseño que permitan el desarrollo de la solución Se sugieren cinco tipos diferentes de clases de diseño: Clases de interfaz con el usuario Clases del dominio del problema (refinamiento clases de análisis) Clases del proceso (menor nivel de abstracción del problema) Clases persistentes (almacenamiento de datos) Clases del sistema (gestión y control del software) 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 33
2. Conceptos de diseño 7. Clases de diseño Repaso de conceptos de clases y objetos Objeto Abstracción de un elemento (concepto) del Contexto del Problema Ejemplos: Fecha Automóvil Libro Clase Describe un conjunto de objetos del Contexto del Problema, que tienen las mismas características y el mismo comportamiento Un objeto es una instancia de una clase 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 34
2. Conceptos de diseño 7. Clases de diseño Repaso de conceptos de clases y objetos Un objeto empaqueta datos (una representación concreta) y procedimientos que operan sobre los datos 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Nombre Datos/Atributos/Campos Métodos/Servicios/Interfaz 35
2. Conceptos de diseño 7. Clases de diseño Repaso de conceptos de clases y objetos Variables miembro o propiedades de la clase Son los campos de datos dentro de una clase Funciones miembro o métodos de la clase Son las operaciones con los datos de una clase Los miembros de una clase (propiedades y métodos) pueden ser: Públicos, a los que se puede acceder desde fuera de la clase Privados, a los que sólo se puede acceder desde dentro de la clase Para acceder a propiedades privadas de una clase se definen los métodos de acceso Un miembro (propiedad o método) puede ser estático, si pertenece a la clase en sí y no a los objetos de la clase 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 36
1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Repaso de conceptos de clases y objetos El envío de mensajes es la única forma para que un objeto realice una operación. Las operaciones son la única forma para cambiar el estado de los datos. Cuando esto se cumple, se dice que el estado interno del objeto (el valor de sus datos) está encapsulado; éste no puede ser manipulado directamente desde el exterior y su representación concreta es invisible. 2. Conceptos de diseño 7. Clases de diseño 37
Repaso de conceptos de clases y objetos Encapsulación Combinación de datos y métodos en una sola cápsula La frontera de la cápsula crea un espacio interior y otro exterior El principio de encapsulamiento es una forma moderna de denominar al tradicional principio de ocultamiento de la información Retirar( ) Ingresar( ) saldo Retirar( ) Ingresar( ) saldo ¿CuentaBancaria ? 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 2. Conceptos de diseño 7. Clases de diseño 38
Repaso de conceptos de clases y objetos Relaciones entre clases Generalización Relación “es un” que ocurre entre un elemento general (clase padre o superclase) y un caso específico (clase hija o subclase). También se conoce como Herencia Asociación Una clase está estructuralmente compuesta de otras clases Se consigue usando algún objeto de una de las clases como atributo de la clase compuesta. Así, una clase puede estar compuesta por objetos de otras clases Dependencia Es una relación de utilización, donde un cambio en el estado de un objeto (el independiente) afecta al estado de otro (el dependiente) pero no a la inversa. Aparece en la práctica cuando una clase se relaciona con otra a través de los mensajes que le envía (métodos que invoca) 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 2. Conceptos de diseño 7. Clases de diseño 39
Repaso de conceptos de clases y objetos Relaciones entre clases Asociación Agregación/Composición Relaciones del tipo …tiene… y …está compuesto de… Dependencia Empleado Empresa trabaja en Ducha Cañería Rueda Puerta Motor Coche 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 2. Conceptos de diseño 7. Clases de diseño 40
Repaso de conceptos de clases y objetos Herencia La herencia indica una relación “es un tipo de" La herencia es una relación entre clases Las nuevas clases añaden especialización a las existentes Músico Violinista Clase base Clase derivada Generalización Especialización 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 2. Conceptos de diseño 7. Clases de diseño 41
Repaso de conceptos de clases y objetos Herencia Jerarquías de clases: las clases con relaciones de herencia forman jerarquías de clases Músico ??? Músico de cuerda Músico de cuerda Violín ??? Instrumento musical Instrumento musical toca Violinista Instrumento de cuerda Instrumento de cuerda 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 2. Conceptos de diseño 7. Clases de diseño 42
Repaso de conceptos de clases y objetos Herencia Herencia sencilla: derivadas de una clase base Herencia múltiple: derivadas de dos o más clases base Instrumento de cuerda Instrumento de cuerda Violín Instrumento musical Instrumento musical Instrumento de cuerda Instrumento de cuerda Con teclas Violín tiene una sola clase base directa Instrumento de cuerda tiene dos clases base directas 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 2. Conceptos de diseño 7. Clases de diseño 43
Repaso de conceptos de clases y objetos Polimorfismo Permite definir de forma distinta un método, dependiendo del objeto El polimorfismo es posible gracias a la herencia: MiCuadrado.pintar()MiCirculo.pintar()MiTriangulo.pintar() Figura Triángulo Pintar() Cuadrado Círculo 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 2. Conceptos de diseño 7. Clases de diseño 44
3. Actividades del diseño Cada elemento del modelo de análisis proporciona la información necesaria para crear los modelos de diseño (actividades) necesarios para la especificación del diseño: Diseño de datos/clases Transforma los modelos de análisis y clases en clases de diseño Diseño arquitectónico Define la relación entre los elementos estructurales más importantes, los estilos arquitectónicos y los patrones de diseño que se pueden utilizar Diseño de interfaz Describe la forma en que el software se comunica con los sistemas y usuarios que interactúan con él Diseño de componentes Transforma los elementos estructurales de la arquitectura del software en una descripción procedimental de los componentes 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 45
1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática El diseño de datos (o arquitectura de datos) crea un modelo de datos o información que se representa con un alto grado de abstracción Después, este modelo de datos se refina en representaciones que van desarrollando progresivamente una implementación específica y que pueden procesarse mediante el sistema informático En muchas aplicaciones de software la arquitectura de los datos tendrá una profunda influencia sobre la arquitectura del software que los debe procesar y sobre la calidad del software La estructura de los datos siempre ha sido una parte importante del diseño de software 3. Actividades del diseño Diseño de datos 46
Define la relación entre los elementos estructurales más importantes del software, los estilos arquitectónicos y patrones de diseño que pueden usarse para satisfacer los requisitos definidos por el sistema, y las restricciones que afectan a la forma en que se pueden implementar los patrones arquitectónicos Es el equivalente al plano de planta de una casa, que proporciona una visión global de la casa. Los elementos del diseño arquitectónico dan una visión general del software El modelo arquitectónico se obtiene a partir de tres fuentes: La información del dominio de la aplicación del software a construir Los elementos del modelo de análisis específico (como diagramas de flujo de datos o clases de análisis), sus relaciones y colaboraciones La disponibilidad de patrones y estilos arquitectónicos Permite construir el "esqueleto" del sistema, que nos da una visión global del mismo y de sus funcionalidades 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 3. Actividades del diseño Diseño arquitectónico 47
1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Los elementos del diseño de la interfaz para software muestran cómo fluye la información desde o hacia el sistema y cómo éste está comunicado entre los componentes definidos como parte de la arquitectura Existen tres elementos importantes del diseño de la interfaz: Diseño de la interfaz externa e interna Interfaces intermodulares, depende de los datos que deben fluir entre los módulos y las características del lenguaje de programación Se aprovecha la información del modelo de análisis Ambos diseños de interfaces deben acoplarse con algoritmos de validación de datos y corrección de errores dentro del módulo¡ Diseño de otras interfaces externas Se establecen las interfaces entre el software y cualquier consumidor/productor no humano de información Diseño de la interfaz hombre-máquina Es un elemento muy importante, porque refleja la comunicación entre la aplicación y los usuarios. 3. Actividades del diseño Diseño de la interfaz de usuario 48
El diseño de componentes de software equivale a un conjunto de especificaciones para cada habitación de una casa: describe por completo el detalle interno de cada componente de software El diseño de componentes transforma los elementos estructurales de la arquitectura del software en una descripción procedimental de los componentes de éste: Define estructuras de datos para todos los objetos de datos locales Expresa detalles algorítmicos para todo el procesamiento que ocurre dentro de un componente Detalla una interfaz que permite el acceso a todas las operaciones de los componentes (comportamientos) Los detalles de diseño de componentes se pueden modelar a muchos grados distintos de abstracción: El procesamiento lógico se puede representar con diagramas de actividad El flujo detallado de procedimiento de un componente se puede representar mediante pseudocódigo u otro tipo de diagramas 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 3. Actividades del diseño Diseño de componentes 49
4. Enfoques de diseño 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Definición de diseño (Freeman):...El diseño es una actividad en la que se toman decisiones importantes, frecuentemente de una naturaleza estructural. Con la programación, comparte los aspectos relativos a la abstracción de la representación de la información y de las secuencias de procesamiento, pero el nivel de detalle es muy diferente en ambos casos. El diseño construye representaciones coherentes y bien planificadas de los programas, centrándose en las interrelaciones de los componentes de mayor nivel y en las operaciones lógicas implicadas en los niveles inferiores... Método de diseño: Enfoque sistemático para crear un diseño mediante la aplicación de un conjunto de técnicas y guías 50
4. Enfoques de diseño El objetivo de las metodologías no es reducir el proceso de diseño a una secuencia mecánica de pasos, sino aportar guías para ayudar al diseñador durante el proceso de diseño Hay muchos métodos para derivar los diferentes elementos de un diseño de software, pero todos ellos siguen un conjunto de principios de diseño que se pueden aplicar sin importar el método que se utilice Fundamentalmente, las metodologías de desarrollo de software se pueden agrupar en torno a dos enfoques: Metodologías estructuradas Metodologías orientadas a objetos 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 51
4. Enfoques de diseño Metodologías estructuradas Basadas en la descomposición del sistema en módulos El sistema se ve como una colección de información que se sigue el flujo entrada / procesamiento / salida Se utilizan modelos distintos en las fases de Análisis y Diseño Metodologías orientadas a objetos Basadas en la abstracción de datos y procedimientos Cada elemento del sistema (objeto) encapsula datos y operaciones El sistema globalmente se considera como una sociedad de objetos que interactúan entre sí El Análisis y Diseño comparten el mismo modelo conceptual, que además se acerca mucho más al modelo real del sistema 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 52
4. Enfoques de diseño En ese mismo sentido, las estrategias de diseño se pueden agrupar en torno a: Diseño orientado al flujo de datos Representa la información como un flujo continuo que se transforma conforme avanza de la entrada a la salida Se basa en conceptos de diseño como modularidad, diseño descendente y programación estructurada La metodología más extendida es SSD Diseño orientado a objetos Produce un diseño que interconecta objetos de datos y operaciones de procesamiento, modularizando la información y el procesamiento en lugar de dejar aparte el procesamiento Se construye sobre tres pilares fundamentales: abstracción, ocultamiento de información y modularidad Existen multitud de metodologías, pero la más extendida es el Proceso Unificado OJO: No confundir el Proceso Unificado (metodología) con UML (lenguaje) 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 53
Métodos 4. Enfoques de diseño 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Cambio de mentalidad Procedimiento 1 Procedimiento 2 Datos Objeto Datos Objeto Datos Paradigma orientado a objetos: Paradigma tradicional: Objeto 54
4. Enfoques de diseño Diferencias entre ambos enfoques: El diseño orientado el flujo de datos está guiado por la información Intenta transformar la información en representación del software El diseño orientado a objetos se centra en objetos del mundo real y sus manifestaciones Utiliza una representación de los datos como base para la representación del programa Encapsula los datos y su procesamiento en los objetos, mientras que el diseño orientado al flujo de datos separa ambos elementos 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática 55
4. Enfoques de diseño 1. Fundamentos de diseño - Ingeniería del Software de Gestión II (a extinguir) - Departamento de Informática Criterios para la elección de la metodología No hay una “mejor” estrategia de diseño para todo Conjunto de criterios para elegir la metodología: Ajustarse a los objetivos Cubrir el ciclo completo de desarrollo de software Integrar las distintas fases del ciclo de desarrollo Incluir la realización de validaciones Permitir la exactitud del sistema a través del ciclo de desarrollo Ser la base de una comunicación efectiva Especificar claramente los responsables de los resultados Poder emplearse en un entorno amplio de proyectos Poder enseñarse Soportada por herramientas CASE Soportar la evolución del sistema Contener actividades para mejorar el proceso de desarrollo 56