14. Fragmentos combinados: alternativas, ciclos, opciones y paralelismo

14.1 Introducción

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.

14.2 Qué es un fragmento combinado

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 permiten representar decisiones, repeticiones y concurrencia sin abandonar el diagrama de secuencia.

14.3 Fragmentos combinados principales

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.

Fragmentos combinados UML alt opt loop y par en diagramas de secuencia

14.4 Fragmento alt

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.

14.5 Guardas en alternativas

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.

14.6 Fragmento opt

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].

14.7 Diferencia entre alt y opt

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.

14.8 Fragmento loop

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].

14.9 Repeticiones con condición

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.

14.10 Fragmento par

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.

14.11 Paralelismo real y paralelismo lógico

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.

14.12 Fragmento break

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.

14.13 Fragmento ref

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.

14.14 Fragmento critical

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.

14.15 Ejemplo: pago aprobado o rechazado

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.

14.16 Ejemplo: líneas de pedido

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.

14.17 No abusar de los fragmentos

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.

14.18 Criterios de revisión

  • ¿El fragmento elegido representa correctamente la situación?
  • ¿Las guardas son claras y breves?
  • ¿Las alternativas cubren los caminos importantes?
  • ¿Los ciclos tienen una condición de repetición comprensible?
  • ¿El paralelismo representado es real o está justificado como independencia de orden?
  • ¿Hay demasiados fragmentos anidados?
  • ¿El diagrama sigue siendo más claro que una explicación textual?

14.19 Errores frecuentes

  • Usar alt cuando solo existe un comportamiento opcional.
  • Usar opt cuando hay varias ramas alternativas.
  • Representar ciclos sin indicar una condición de finalización.
  • Usar par para acciones que en realidad tienen orden obligatorio.
  • Anidar demasiados fragmentos y volver ilegible la secuencia.
  • Escribir guardas demasiado largas o ambiguas.
  • Modelar todos los detalles excepcionales en un único diagrama.

14.20 Qué debes recordar de este tema

  • Los fragmentos combinados agregan lógica de control a los diagramas de secuencia.
  • alt representa alternativas entre caminos posibles.
  • opt representa un bloque opcional.
  • loop representa repetición.
  • par representa acciones paralelas o independientes en orden.
  • Las guardas indican condiciones de ejecución.
  • El uso excesivo de fragmentos puede perjudicar la claridad.

14.21 Conclusión

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.