Los diagramas de secuencia muestran mensajes ordenados en el tiempo. Sin embargo, muchos escenarios reales no son completamente lineales. Pueden existir condiciones, caminos alternativos, pasos opcionales, repeticiones o tareas que ocurren en paralelo. Para representar esas situaciones, UML utiliza fragmentos combinados.
Un fragmento combinado encierra una parte de la secuencia y le agrega un significado especial. Por ejemplo, puede indicar que solo se ejecuta si se cumple una condición, que se repite varias veces o que existen dos caminos posibles según el resultado de una validación.
Un fragmento combinado es un marco rectangular que agrupa mensajes dentro de un diagrama de secuencia. En una esquina se coloca un operador que indica el tipo de lógica representada. Algunos operadores frecuentes son alt, opt, loop y par.
Dentro del fragmento pueden aparecer condiciones, llamadas guardas, escritas entre corchetes. Por ejemplo, [pago aprobado] o [hay más productos]. Estas condiciones indican cuándo se ejecuta una parte de la interacción.
Los fragmentos combinados más usados son alt para alternativas, opt para comportamiento opcional, loop para repeticiones y par para acciones paralelas. Cada uno expresa un tipo distinto de control dentro de la interacción.
El fragmento alt representa alternativas. Se usa cuando existen dos o más caminos posibles y solo uno se ejecuta según una condición. Es similar a una estructura condicional con varias ramas.
Por ejemplo, en una compra, si el pago es aprobado se registra el pedido y se envía confirmación. Si el pago es rechazado, se informa el error y no se confirma la compra. Ambas ramas pueden representarse dentro de un fragmento alt.
Las guardas son condiciones que determinan qué rama se ejecuta. Se escriben entre corchetes al inicio de cada sección del fragmento. Por ejemplo: [pago aprobado] y [pago rechazado].
Las guardas deben ser claras y mutuamente entendibles. Si una condición es muy extensa, puede ser mejor explicarla en una nota o en una regla de negocio aparte.
El fragmento opt representa comportamiento opcional. Se usa cuando una parte de la secuencia puede ejecutarse o no, según una condición. A diferencia de alt, no hay varias ramas; hay una sola sección opcional.
Por ejemplo, después de registrar un usuario, el sistema puede enviar un cupón de bienvenida solo si existe una promoción activa. Ese envío puede representarse con opt [promoción activa].
alt se usa cuando se elige entre caminos alternativos. opt se usa cuando existe un comportamiento adicional que puede ocurrir o no. Si hay dos respuestas posibles, conviene usar alt. Si solo hay un bloque opcional, conviene usar opt.
| Fragmento | Uso | Ejemplo |
|---|---|---|
alt |
Elegir entre dos o más caminos. | Pago aprobado o pago rechazado. |
opt |
Ejecutar un bloque solo si se cumple una condición. | Enviar cupón si hay promoción activa. |
El fragmento loop representa repetición. Se usa cuando una parte de la secuencia se ejecuta varias veces mientras se cumple una condición o para cada elemento de una colección.
Por ejemplo, en una compra, el sistema puede recorrer cada producto del carrito para crear una línea de pedido. Esa repetición puede representarse con loop [por cada producto del carrito].
La condición del ciclo debe indicar cuándo o cuántas veces se repite el bloque. Puede expresarse como [mientras haya turnos disponibles], [por cada línea de pedido] o [intentos < 3].
Un ciclo mal descrito puede generar dudas sobre cuándo termina. Por eso conviene que la guarda sea breve, pero suficientemente precisa.
El fragmento par representa comportamiento paralelo. Se usa cuando dos o más partes de la interacción pueden ejecutarse concurrentemente o sin un orden estricto entre ellas.
Por ejemplo, después de confirmar una compra, el sistema puede enviar una notificación al cliente y actualizar estadísticas en paralelo. El uso de par comunica que esas acciones no dependen necesariamente una de la otra.
No todo paralelismo en un diagrama implica necesariamente hilos de ejecución reales. A veces se usa para expresar que dos actividades pueden ocurrir sin orden obligatorio. En otros casos sí representa procesamiento concurrente real.
Si la diferencia importa para el diseño, conviene aclararla con una nota o mediante el nivel de detalle del diagrama. Lo importante es no sugerir paralelismo cuando en realidad existe una dependencia estricta.
El fragmento break representa una interrupción del escenario normal. Si se cumple su condición, se ejecuta el bloque y se abandona la interacción principal.
Por ejemplo, si durante una reserva se detecta que el usuario no está autenticado, puede ejecutarse un bloque de interrupción que informa el problema y detiene el proceso.
El fragmento ref permite hacer referencia a otra interacción o a otro diagrama de secuencia. Es útil para evitar repetir una secuencia compleja que ya fue modelada en otro lugar.
Por ejemplo, varios procesos pueden incluir una interacción llamada Validar identidad. En lugar de copiarla completa en cada diagrama, se puede referenciar con ref Validar identidad.
El fragmento critical indica una región crítica que debe ejecutarse sin interferencia de otras interacciones concurrentes. Es más técnico y suele usarse cuando se modelan problemas de concurrencia.
Por ejemplo, la reserva de un último turno disponible puede requerir una sección crítica para evitar que dos usuarios reserven el mismo horario simultáneamente.
En un proceso de compra, el sistema envía una solicitud a la pasarela de pagos. Si la respuesta es aprobada, se registra el pedido, se descuenta stock y se envía confirmación. Si la respuesta es rechazada, se informa al usuario y no se genera el pedido.
Este caso se representa naturalmente con un fragmento alt, porque hay dos caminos alternativos según el resultado del pago.
Cuando un carrito contiene varios productos, el sistema puede repetir una operación por cada producto: crear línea de pedido, calcular subtotal y asociar producto. Este comportamiento corresponde a un fragmento loop.
La guarda podría escribirse como [por cada producto del carrito]. Así se evita dibujar manualmente la misma secuencia varias veces.
Los fragmentos combinados son poderosos, pero pueden volver pesado un diagrama si se usan en exceso. Un diagrama con muchos bloques anidados puede ser más difícil de leer que una explicación textual o que varios diagramas separados.
Si una secuencia tiene muchas alternativas, ciclos y excepciones, conviene evaluar si corresponde dividirla en escenarios más pequeños o documentar algunas reglas en texto complementario.
alt cuando solo existe un comportamiento opcional.opt cuando hay varias ramas alternativas.par para acciones que en realidad tienen orden obligatorio.alt representa alternativas entre caminos posibles.opt representa un bloque opcional.loop representa repetición.par representa acciones paralelas o independientes en orden.Los fragmentos combinados permiten que un diagrama de secuencia represente escenarios más realistas, con decisiones, opciones, ciclos y paralelismo. Su valor está en aclarar el comportamiento sin convertir el diagrama en una estructura difícil de seguir.
En el próximo tema veremos diagramas de comunicación, que muestran la colaboración entre objetos y responsabilidades desde otra perspectiva.