Tema 10: Diseño y Herramientas UML (Actividad, Estados, Despliegue y Componentes)
Resumen Ejecutivo
Esta sesión finaliza la revisión de las herramientas UML necesarias para el diseño de software, enfocándose en modelar el comportamiento detallado y la arquitectura física del sistema. Se profundiza en cómo los Diagramas de Actividad y Máquinas de Estado permiten definir la lógica de negocio y los ciclos de vida de los objetos, respectivamente. Finalmente, se aborda la materialización de la solución mediante Diagramas de Despliegue y Componentes, conectando el diseño lógico con la implementación tecnológica.
Conceptos Clave
- UML vs. Proceso Unificado: Diferencia entre el lenguaje de modelado (herramienta) y la metodología de desarrollo (proceso).
- Diagrama de Actividad: Modelado de comportamiento centrado en el flujo de control y flujo de datos (similar a un diagrama de flujo vitaminado).
- Diagrama de Máquina de Estados: Representación de los estados por los que pasa un sistema u objeto en respuesta a eventos externos o internos.
- Swimlanes (Calles): Divisiones en un diagrama de actividad que asignan responsabilidades a roles específicos.
- Diagrama de Despliegue: Muestra la arquitectura física (nodos) y cómo se distribuyen los artefactos de software en ella.
- Componente: Unidad modular de despliegue y sustitución (ej. un archivo
.jar) que encapsula un conjunto de clases e interfaces.
Desarrollo del Temario
1. Contextualización: UML y el Proceso de Ingeniería
El profesor comienza aclarando una distinción fundamental para el examen y la práctica profesional: UML no es lo mismo que el Proceso Unificado.
-
UML (Lenguaje Unificado de Modelado): Es un conjunto de herramientas gráficas. No te obliga a trabajar de una manera específica; es un lenguaje para expresarse.
-
Proceso Unificado: Es una metodología que dicta los pasos a seguir (Requisitos, Análisis, Diseño, Implementación).
- Relación: Aunque nacieron juntos, puedes usar herramientas UML (como un diagrama de actividad) dentro de metodologías ágiles o cualquier otro proceso si necesitas definir funcionalidad a bajo nivel.
¡OJO AL DATO!: Es crucial entender en qué fase "encaja" teóricamente cada diagrama dentro del Proceso Unificado, aunque en la práctica sean flexibles:
-
Análisis: Casos de uso, Modelo de dominio (Clases conceptuales).
-
Diseño: Diagramas de secuencia (interacción), Máquinas de estado, Actividad, Componentes y Despliegue.
2. Diagramas de Actividad
Se utilizan para modelar el comportamiento de una funcionalidad, centrándose en el flujo de ejecución (orden de los pasos) y el flujo de datos (información que se pasa).
Analogía del Profesor: El profesor menciona que utiliza estos diagramas incluso fuera de la informática (ej. procesos de negocio o tareas cotidianas) debido a su claridad para representar pasos secuenciales y paralelos.
Elementos Principales:
-
Actividad y Acciones: La actividad es el proceso general (rectángulo grande) y las acciones son los pasos individuales (rectángulos redondeados pequeños).
-
Flujo de Control: Flechas que indican "qué va después de qué".
-
Nodo de Decisión (Rombo): Caminos alternativos (if/else). Solo se puede salir por uno de los caminos.
-
Nodo Merge (Rombo): Donde convergen varios caminos alternativos en uno solo.
-
Concurrencia (Paralelismo):
-
Fork (Barra negra de división): Un flujo se divide en varios que ocurren a la vez.
-
Join (Barra negra de unión): Espera a que terminen todos los flujos paralelos para continuar.
Características Avanzadas:
-
Nodos Objeto (Pins): Representan datos. Si una acción genera una "Factura", se dibuja un rectángulo (objeto) saliendo de la acción. Esto explicita el flujo de datos.
-
Swimlanes (Calles): Permiten indicar quién realiza la acción. Dividen el diagrama en columnas (ej. Cliente, Ventas, Almacén).
-
Regiones Interrumpibles: Zonas del diagrama que pueden ser canceladas abruptamente si ocurre un evento (ej. señal de "Cancelar Pedido"). Se representa con un marco punteado y un rayo (señal).
-
Excepciones: Se marcan con un triángulo en la línea de flujo, indicando que es un camino de error o no deseado (ej. "Bombón roto").
3. Diagramas de Máquinas de Estado
A diferencia del diagrama de actividad (que es un flujo paso a paso), la máquina de estados ve el sistema como un "todo" que cambia de estado según ocurran eventos.
Definición de Estado: Situación en la que se encuentra un objeto o sistema durante un tiempo, esperando un evento (ej. "Inactivo", "Calentando").
Componentes de la Transición:
Una transición se define generalmente como:
-
Evento: Lo que dispara el cambio (ej.
demasiadoFrío). -
Parámetros: El evento puede llevar datos (ej.
tempDeseada). -
Acción: Lo que se ejecuta al transicionar.
Tipos de Acciones en un Estado:
- entry / acción: Se ejecuta inmediatamente al entrar al estado.
- exit / acción: Se ejecuta justo antes de salir.
- do / acción: Actividad continua que ocurre mientras se está en el estado (ej.
play ringing tonemientras suena el teléfono).
Estados Compuestos (Superestados):
Un estado puede tener "sub-estados" dentro:
-
Secuenciales: Dentro del estado general, hay un flujo lineal (uno detrás de otro).
-
Ortogonales (Paralelos): El estado se divide en regiones separadas por líneas punteadas. El sistema está en varios sub-estados a la vez (ej. cursar una asignatura implica estar en "Laboratorio realizado" Y "Proyecto realizado" simultáneamente).
¡OJO AL DATO! - Historia (): Si sales de un estado compuesto y quieres volver exactamente al sub-estado donde te quedaste (no al principio), usas el indicador de historia:
- H: Recuerda el nivel superior.
- H*: Recuerda profundamente todos los sub-niveles anidados.
4. Diagramas de Implementación
Diagrama de Despliegue
Modela la arquitectura física ("el hierro" y la red).
-
Nodos: Recursos computacionales (Servidores, PCs). Se dibujan como cubos.
-
Artefactos: Lo que se instala en los nodos (archivos
.jar,.exe, bases de datos). Se dibujan como rectángulos con la etiqueta<<artifact>>. -
Caminos de comunicación: Líneas que unen nodos (ej. conexión HTTP, JDBC).
Diagrama de Componentes
Modela la organización del código en módulos lógicos. Es el puente entre el Diseño y la Implementación.
-
Componente: Encapsulación de varias clases. Es la unidad física de sustitución (ej. un fichero
Prestatario.jares un componente tecnológico formado por 17 clases). -
Interfaz: Define cómo se comunican los componentes.
-
"Chupachups" (Bola): Interfaz proporcionada (lo que ofrezco).
-
"Copa" (Medio círculo): Interfaz requerida (lo que necesito para funcionar).
Preguntas de Autoevaluación
- ¿Cuál es la diferencia principal entre un Diagrama de Actividad y uno de Secuencia si ambos modelan comportamiento?
-
Respuesta: El Diagrama de Secuencia se centra en el intercambio de mensajes entre objetos (quién habla con quién y en qué orden), mientras que el Diagrama de Actividad se centra en el flujo de operaciones y datos (qué tarea va después de cuál), permitiendo representar mejor la concurrencia y la lógica condicional compleja.
-
En una máquina de estados, ¿qué diferencia existe entre una acción
entryy una actividaddo? -
Respuesta: La acción
entryes puntual y atómica (se ejecuta una sola vez al entrar), mientras que la actividaddoes continua y dura todo el tiempo que el sistema permanece en ese estado (o hasta que se complete). -
Explica qué sucede cuando un flujo llega a un "Nodo Fork" y luego a un "Nodo Join" en un diagrama de actividad.
-
Respuesta: Al llegar al Fork, el flujo único se divide en múltiples hilos de ejecución paralela (concurrencia). Estos hilos se ejecutan independientemente hasta llegar al Join, donde el flujo se detiene y espera hasta que todos los hilos entrantes hayan terminado para continuar como un solo flujo.
-
¿Qué representa el símbolo en un estado compuesto?
-
Respuesta: Representa la "Historia Profunda". Indica que si el sistema reingresa a ese estado compuesto, debe volver exactamente a la configuración de sub-estados (incluso los anidados) que tenía la última vez que salió, en lugar de reiniciar desde el estado inicial por defecto.
-
Según la explicación del profesor, ¿cuál es la relación física entre un Componente y una Clase?
- Respuesta: Un componente es la materialización tangible (ej. un archivo
.jar) que agrupa y encapsula un conjunto de clases (ej. 17 clases) que trabajan juntas para ofrecer una funcionalidad desplegable.