Ingeniería del Software
Diseño de Software
Prof. Mariela Orrego
Mayo 2024
Daily Agile:
• Presentación del panel.
• Cada uno entrega el estatus de las tareas asignadas.
• Asignación de tareas que se realizaran para la siguiente clase.
• Se despejan dudas y promueve la colaboración con el equipo.
Diseño de Software
Estructura y Arquitectura del software.
Diseño de Software
¿Por qué es importante el diseño?
• El diseño permite modelar el sistema o producto que se va a
construir.
• Permite establecer la calidad del software.
• Permite medir la calidad y su mejora antes de generar código.
Diseño de Software
¿Cómo me aseguro de que lo hice bien?
El modelo de diseño es evaluado por el equipo de software.
Comprobaciones
• Errores
• Inconsistencias u omisiones.
• Si existen mejores alternativas.
• y si es posible implementar el modelo dentro de las restricciones,
plazo y costo.
Diseño de
Software
¿Qué es el diseño Arquitectónico?
El diseño arquitectónico representa la
estructura de los datos y de los
componentesdelprogramaquese
requierenparaconstruirunsistema basado
ensoftware.
Diseño de Software
“La arquitectura es demasiado importante para dejarla en
manos de una sola persona, no importa cuán brillante sea.”
Scott Ambler
Diseño de Software
¿Quién lo hace?
• El IngenierosdeSoftware/Especialistas.
• El diseñador de una base de datos crea la arquitectura de los datos para el
sistema.
• El arquitecto del sistema selecciona un estilo arquitectónico apropiado a
partir delos requerimientosobtenidosdurante elanálisisdelos datos.
Diseño de Software
¿Por que es importante?
¿Ustedintentaríaconstruirsucasasinun plano?
Antesdepreocuparseporlosdetalles,necesitaríatenerelpanoramageneral “Lacasa”.
Antesdepreocuparse por losdetalles,necesitaría tener el, panorama general:
La casaensí.
Eso es lo que hace el diseño arquitectónico, da el panorama general y asegura que sea el
correcto.
Diseño de Software
¿Cuales son los pasos?
1. Eldiseñodelaarquitecturacomienzaconeldiseñodelos datos.
2. Continúa con la obtención las representaciones de la estructura
arquitectónicadelsistema.
3. Seanalizanalternativasdeestilosopatrones arquitectónicos.
4. Seleccionadalaalternativa,seelaboralaarquitecturautilizandounmétododediseño..
Diseño de Software
¿Cual es el resultado?
Un modelo de arquitectura que incluye datos y la estructura del software.
Además,sedescribenlaspropiedadesy relaciones que hay entre los componentes.
Modelo de Datos
Arquitectura de clúster
Diseño de Software
Géneros Arquitectónicos
El género Arquitectónico dicta el enfoque específico para la estructura que
deba construirse.
Especifican una categoría dentro del dominio general del software, dentro
de cada categoría hay varias subcategorías.
Científicos
Política Local Médicos
Industrial
Militares
Transporte
Diseño de Software
Algunos Géneros Arquitectónicos
Comerciales
Sistemas que son fundamentales para la
operación de una empresa de negocios.
Diseño de Software
Algunos Géneros Arquitectónicos
Comunicaciones
Sistemas que proveen la infraestructura para transferir y
manejar datos, para conectar usuarios o para presentar
datos en la frontera de una infraestructura.
Diseño de Software
Algunos Géneros Arquitectónicos
Contenido de Autor
Sistemas que se utilizan para crear o
manipular artefactos de texto o multimedios.
Diseño de Software
Algunos Géneros Arquitectónicos
Dispositivos
Sistemas que interactúan con el mundo físico a
fin de brindar algún servicio puntual a una
persona.
Diseño de Software
Algunos Géneros Arquitectónicos
Financieros
Sistemas que proporcionan la infraestructura
para transferir, manejar dinero y otros títulos.
Diseño de Software
Algunos Géneros Arquitectónicos
Juegos
Sistemas que dan una experiencia de
entretenimiento a individuos o grupos.
Diseño de Software
Algunos Géneros Arquitectónicos
Gobierno
Sistemas que dan apoyo a la conducción y
operaciones de una institución
Diseño de Software
Algunos Géneros Arquitectónicos
“Cada género representa un desafío único”.
Diseño de Software
Estilos Arquitectónicos
Describen las categorías del sistema que incluye:
1) Un conjunto de componentes (como una base de datos o módulos de
cómputo) que realizan una función requerida por el sistema.
2) Conectores que permiten la “comunicación, coordinación y
cooperación” entre los componentes.
3) Restricciones que definen cómo se integran los componentes para
formar el sistema.
4) Modelos semánticos que permiten que un diseñador entienda las
propiedades generales del sistema al analizar las propiedades conocidas
de sus partes constituyentes.
Diseño de Software
Estilos Arquitectónicos
• Arquitecturas centradas en los datos.
• Arquitecturas orientadas a objetos.
• Arquitecturas en capas.
• Arquitecturas de flujo de datos.
Diseño de Software
Estilos Arquitectónicos: Arquitecturas centradas en los datos.
El almacenamiento de datos es el componente central, así otros
componentes del sistema acceden a este almacenamiento para realizar
operaciones como actualizar, agregar, eliminar o modificar datos. Este
estilo promueve la integrabilidad, lo que significa que facilita la
•
interconexión y el funcionamiento conjunto de distintos componentes del
sistema.
Ejemplos:
• Sistema de Gestión de Bases de Datos: MySQL, PostgreSQL
• Sistema de gestión de inventarios, Sistemas de Gestión de Contenidos,
• Sistemas de Procesamiento de Transacciones Financieras
Diseño de Software
Estilos Arquitectónicos: Arquitecturas centradas en los datos.
Características Principales
• Almacenamiento Centralizado de Datos: Un único repositorio de
datos al que acceden diferentes componentes.
• Actualización Frecuente de Datos: Los componentes del sistema
interactúan constantemente con el almacenamiento de datos para
realizar diversas operaciones.
• Integrabilidad: La arquitectura facilita que distintos componentes
trabajen juntos sin problemas.
Diseño de Software
Algunos Géneros Arquitectónicos: Arquitecturas
orientada a objetos.
Las arquitecturas orientadas a objetos son un estilo de diseño de software
donde el sistema se organiza en componentes llamados objetos. Cada
objeto encapsula datos y las operaciones que pueden realizarse sobre esos
datos. Los objetos se comunican y coordinan entre sí mediante el envío de
mensajes.
Diseño de Software
Algunos Géneros Arquitectónicos: Arquitecturas en
capas.
La arquitectura en capas divide un sistema en varias capas, cada una con
responsabilidades específicas. La capa externa maneja la interfaz de
usuario, las capas intermedias proveen servicios y lógica de aplicación y la
capa interna interactúa con la capa de datos. Esta estructura facilita la
separación de responsabilidades, el mantenimiento y la escalabilidad del
sistema.
Diseño de Software
Estilos Arquitectónicos: Arquitecturas de flujo de datos.
Esta arquitectura se utilizan cuando los datos de entrada necesitan
transformarse en datos de salida a través de una serie de pasos. Estos
pasos son realizados por componentes computacionales llamados filtros.
Ej:
• sistema que recoge y procesa datos de varios sensores para
monitorear condiciones ambientales.
• sistema que analiza logs de servidores y aplicaciones para
identificar problemas y optimizar el rendimiento.
•Entrada de Datos: Logs generados por aplicaciones y servidores.
•Filtros:
• Filtro 1: Recolecta y agrega logs de múltiples fuentes.
• Filtro 2: Filtra logs relevantes basados en criterios de búsqueda.
• Filtro 3: Analiza los logs para detectar errores, patrones y tendencias.
•Salida de Datos: Informes de rendimiento, alertas sobre errores críticos.
Diseño de Software
Calidad del Diseño de Software
Diseño de Software
Calidad del Diseño
A través del proceso de diseño se evalúa la calidad del software en
función de las siguientes revisiones:
• Debe implementar todos los requerimientos explícitos contenidos
en el modelo de requerimientos.
• Debe ser una guía legible y comprensible para quienes generan el
código y para los que lo prueban.
• Debe proporcionar el panorama completo del software y abordar los
dominios de los datos, las funciones y el comportamiento desde el
punto de vista de la implementación.
• Se haya creado con el empleo de estilos o patrones arquitectónicos
reconocibles.
Diseño de Software
Calidad del Diseño
A través del proceso de diseño se evalúa la calidad del software en
función de las siguientes revisiones:
• Debe ser modular, es decir, el software debe estar dividido de
manera lógica en elementos o subsistemas.
• Debe contener distintas representaciones: de datos, interfaces y
componentes.
• Debe conducir a estructuras de datos apropiadas para las clases que
se van a implementar y que surjan de patrones reconocibles de
datos.
• Debe llevar a componentes que tengan características funcionales
independientes.
Diseño de Software
Calidad del Diseño
A través del proceso de diseño se evalúa la calidad del software en
función de las siguientes revisiones:
• Debe conducir a interfaces que reduzcan la complejidad de las
conexiones entre los componentes y el ambiente externo.
• Debe representarse con una notación que comunique con eficacia
su significado.
Diseño de Software
Calidad del Diseño
Hewlett-Packard desarrolló un conjunto de atributos de la calidad del
software a los que se dio el acrónimo FURPS:
• Funcionalidad
• Usabilidad
• Confiabilidad,
• Rendimiento
• Mantenibilidad.
Los atributos de calidad FURPS representan el objetivo de todo diseño de
software.
Diseño de Software
Calidad del Diseño
La funcionalidad se evalúa de acuerdo con:
• El conjunto de características y capacidades del programa.
• La generalidad de las funciones que se entregan.
• La seguridad general del sistema.
Diseño de Software
Calidad del Diseño
La usabilidad se evalúa de acuerdo con:
• Tomando en cuenta factores humanos
• La estética general.
• La consistencia.
• La documentación.
Diseño de Software
Calidad del Diseño
La Confiabilidad se evalúa de acuerdo con:
• Medición de la frecuencia y gravedad de las fallas.
• La exactitud de los resultados que salen, el tiempo medio para que
ocurra una falla.
• La capacidad de recuperación ante ésta y lo predecible del
programa.
Diseño de Software
Calidad del Diseño
El rendimiento se evalúa de acuerdo con:
• Con base en la velocidad de procesamiento.
• El tiempo de respuesta.
• El uso de recursos.
Diseño de Software
Calidad del Diseño
La mantenibilidad se evalúa de acuerdo con:
• Combina la capacidad del programa para ser ampliable y adaptable.
• Que pueda probarse y configurable .
• Facilidad de instalación.
• Facilidad para que se detecten los problemas.
Diseño de Software
Estrategias y Métodos del Diseño de Software
Diseño de Software
Estrategias de Diseño
Estrategia de
Definición Ejemplo en un Sistema de Biblioteca
Diseño
Consiste en descomponer un
problema complejo en partes más
Descomponer el sistema de biblioteca en
pequeñas y manejables, resolver
Divide y vencerás módulos como gestión de libros, gestión de
cada parte por separado y luego
usuarios, y procesamiento de préstamos.
combinarlas para obtener la
solución final.
Implica desarrollar el sistema en Comenzar con un diagrama general del
etapas, comenzando con una sistema de biblioteca y luego detallar cada
Refinamiento en
visión general y refinando módulo (gestión de libros, gestión de
pasos sucesivos
gradualmente los detalles en cada usuarios, etc.) en diagramas más
paso sucesivo. específicos.
Top-down: Diseñar el sistema
comenzando con el nivel más alto
Top-down: Diseñar primero la arquitectura
de abstracción y
general del sistema de biblioteca y luego
descomponiéndolo en
Top-down vs definir las funciones de cada módulo. <br>
componentes más detallados. <br>
bottom-up Bottom-up: Crear primero funciones
Bottom-up: Construir el sistema a
básicas como agregar libro, eliminar libro, y
partir de componentes básicos,
luego integrarlas en el sistema completo.
integrándolos gradualmente en una
estructura más compleja.
Diseño de Software
Estrategias de Diseño
Estrategia de
Definición Ejemplo en un Sistema de Biblioteca
Diseño
Separar los detalles de
Abstracción de implementación de los datos, Utilizar clases para encapsular datos de
datos y proporcionando una interfaz clara libros y exponer solo métodos públicos
ocultamiento de y ocultando los detalles internos para interactuar con ellos, ocultando los
información para reducir la complejidad y detalles de implementación.
mejorar la modularidad.
Aplicar reglas prácticas basadas
Usar la regla de "menos es más" para
en la experiencia y el juicio para
simplificar la interfaz de usuario del sistema
Uso de heurísticas guiar las decisiones de diseño y
de préstamo de libros, haciendo la
encontrar soluciones satisfactorias
navegación más intuitiva.
de manera eficiente.
Utilizar soluciones probadas y
documentadas (patrones de Aplicar el patrón Singleton para asegurar
diseño) para resolver problemas que solo haya una instancia del
Uso de patrones
comunes en el diseño de software, LibraryManager que maneje todas las
facilitando la reutilización y la operaciones de la biblioteca.
comunicación.
Desarrollar el sistema de manera
iterativa, construyendo versiones Crear un prototipo inicial del sistema de
Aproximación
sucesivas que incrementan la biblioteca, obtener retroalimentación de los
iterativa e
funcionalidad y refinan el diseño, usuarios y añadir funcionalidades
incremental
permitiendo ajustes basados en adicionales en iteraciones posteriores.
retroalimentación continua.
Diseño de Software
Patrones de Diseño
Diseño de Software
Patrones de Diseño
Los patrones de diseño son soluciones reutilizables y probadas para problemas comunes
que se presentan durante el desarrollo de software. Podríamos pensar en ellos como
recetas o guías que te ayudan a resolver problemas específicos de manera eficiente y
efectiva.
• Soluciones Probadas: Los patrones de diseño no son nuevas ideas que necesitas
inventar desde cero. Son soluciones que otros desarrolladores han usado
exitosamente muchas veces antes.
• Problemas Comunes: Los patrones de diseño se aplican a problemas que aparecen con
frecuencia en el desarrollo de software, como organizar el código, cómo crear objetos
o cómo comunicar entre partes del sistema.
• Reutilizables: Una vez que aprendes un patrón de diseño, puedes usarlo en diferentes
proyectos y situaciones, lo que te ahorra tiempo y esfuerzo.
• Facilitan la Comunicación: Los patrones de diseño tienen nombres comunes (como
Singleton, Factory Method, Observer), lo que facilita que los desarrolladores se
entiendan entre sí cuando hablan sobre soluciones de diseño.
Diseño de Software
Patrones de Diseño
“El patrón propone una solución arquitectónica que sirve como base para
el diseño de la arquitectura.”
Los patrones arquitectónicos se abocan a un problema de aplicación
específica dentro de un contexto dado y sujeto a limitaciones y
restricciones.
La clave es utilizar los patrones que mejor se adapten a los problemas
específicos que necesitas resolver. Usar patrones de diseño de manera
innecesaria o excesiva puede complicar el sistema sin aportar beneficios
claros. Aquí tienes algunas consideraciones y un enfoque más pragmático:
Diseño de Software
Patrones de Diseño
Consideraciones y enfoque:
1.Identificación de Problemas Específicos:
Evalúa los problemas que tu diseño necesita resolver. Usa patrones que
aborden estos problemas de manera clara y eficiente.
2.Simplicidad y Claridad:
Mantén tu diseño lo más simple posible. Introducir patrones solo
cuando sean realmente necesarios ayuda a mantener la claridad y la
facilidad de mantenimiento del código.
Diseño de Software
Patrones de Diseño
Consideraciones y enfoque:
1.Flexibilidad y Reutilización:
Usa patrones que proporcionen flexibilidad y faciliten la reutilización del
código en el futuro. Piensa en cómo puede evolucionar tu sistema y
elige patrones que soporten esa evolución.
2.Mantenibilidad:
Elige patrones que faciliten el mantenimiento del sistema a largo plazo.
Considera cómo los cambios en el sistema pueden ser manejados de
manera más efectiva utilizando ciertos patrones.
Diseño de Software
Patrones de Diseño
Categorías principales:
• Patrones Creacionales: Cómo crear objetos.
• Patrones Estructurales: Cómo componer objetos y clases.
• Patrones de Comportamiento: Cómo interactúan y se comunican
los objetos.
Diseño de Software
Patrones de Diseño
Categoría Patrón de Diseño Propósito Ejemplo en Sistema de Biblioteca Justificación
Asegurar una única instancia Una única instancia de LibraryManager para Centraliza la gestión de la biblioteca, asegurando que
Singleton y proporcionar acceso manejar todas las operaciones de la biblioteca y evitar todas las operaciones sean manejadas por una única
global. duplicaciones. instancia.
Definir una interfaz para
Crear diferentes tipos de libros (eBook, Audiobook) Facilita la extensión del sistema para admitir nuevos
Factory Method crear objetos, delegando la
según el formato solicitado por los usuarios. tipos de libros sin modificar el código existente.
instanciación a subclases.
Proporcionar una interfaz
Permite la creación consistente de conjuntos
para crear familias de objetos Crear familias de objetos de préstamo, como libros,
Patrones Abstract Factory relacionados de objetos (libros, revistas, medios
relacionados sin especificar revistas y medios digitales, de manera consistente.
Creacionales digitales).
clases concretas.
Separar la construcción de
Construir configuraciones de préstamo complejas con Facilita la creación de configuraciones complejas de
Builder un objeto complejo de su
múltiples opciones (plazo, renovación, usuario). préstamos de manera flexible y escalable.
representación.
Crear nuevos objetos Permite crear nuevos registros de libros basados en
Clonar un registro de libro para crear nuevos registros
Prototype copiando una instancia configuraciones existentes, ahorrando tiempo y
con configuraciones similares.
existente. esfuerzo.
Diseño de Software
Patrones de Diseño
Categoría Patrón de Diseño Propósito Ejemplo en Sistema de Biblioteca Justificación
Convertir la interfaz de una
Adaptar un sistema de gestión de bases de datos Facilita la integración de sistemas externos con el
Adapter clase en otra que el cliente
externo para integrarlo con el sistema de biblioteca. sistema de biblioteca existente.
espera.
Desacoplar la interfaz de usuario del sistema de
Desacoplar una abstracción Permite cambiar o mejorar la interfaz de usuario sin
Bridge gestión de biblioteca de la lógica de negocio
de su implementación. afectar la lógica de negocio del sistema.
subyacente.
Componer objetos en
Gestión de colecciones de libros, permitiendo tratar
estructuras de árbol para Facilita la gestión uniforme de libros individuales y
Composite tanto libros individuales como series completas de
tratar objetos individuales y colecciones de libros.
manera uniforme.
compuestos uniformemente.
Patrones Añadir funcionalidad a un
Añadir funcionalidades adicionales a los libros, como la Permite extender las capacidades de los objetos libro
Estructurales Decorator objeto de manera dinámica y
capacidad de ser reservado o renovado. de manera dinámica y flexible.
transparente.
Proporcionar una interfaz Proporcionar una interfaz única para operaciones
Simplifica el uso de subsistemas complejos
Facade simplificada para un comunes de la biblioteca (préstamo, devolución,
proporcionando una interfaz más fácil de usar.
subsistema complejo. búsqueda).
Usar objetos compartidos
Gestionar copias de libros populares utilizando objetos Reduce el uso de memoria al reutilizar objetos
Flyweight para minimizar el uso de
compartidos para reducir el uso de memoria. compartidos para libros populares.
memoria.
Proporcionar un sustituto Controlar el acceso a libros digitales mediante un
Controla el acceso y gestiona las autorizaciones para
Proxy para controlar el acceso a un proxy que maneja las autorizaciones y restricciones
libros digitales de manera eficiente.
objeto. de uso.
Diseño de Software
Patrones de Diseño
Categoría Patrón de Diseño Propósito Ejemplo en Sistema de Biblioteca Justificación
Define una dependencia uno- Mantiene a los usuarios informados sobre eventos
Notificar a los usuarios cuando un libro reservado
Observer a-muchos entre objetos para relevantes de manera automática, mejorando la
vuelve a estar disponible.
notificaciones automáticas. experiencia del usuario.
Define una familia de
algoritmos, encapsula cada Implementar diferentes estrategias de búsqueda de Permite cambiar fácilmente el método de búsqueda sin
Strategy
uno, y hace que sean libros (por título, autor, ISBN). afectar otras partes del sistema.
intercambiables.
Patrones de Encapsular una solicitud
Comportamiento como un objeto para Registrar acciones de préstamo y devolución de libros Permite deshacer o rehacer operaciones de préstamo
Command
parametrizar clientes con para permitir deshacer o rehacer transacciones. y devolución de manera flexible.
diferentes solicitudes.
Pasa una solicitud a lo largo Procesar solicitudes de préstamo, escalando de un
Chain of Facilita el manejo de solicitudes complejas
de una cadena de asistente de biblioteca a otro según la complejidad de
Responsibility escalándolas a diferentes niveles de responsabilidad.
manejadores. la solicitud.
Permite a un objeto alterar su
Cambiar el comportamiento de un libro según su Permite que el comportamiento del libro cambie
State comportamiento cuando su
estado (disponible, prestado, reservado). dinámicamente según su estado actual.
estado interno cambia.