Nei diagrammi di sequenza, i frammenti combinati sono raggruppamenti logici rappresentati da un rettangolo che contiene strutture condizionali che riguardano il flusso di messaggi. Un frammento combinato contiene operandi di interazione ed è definito da un operatore di interazione.
Il tipo di frammento combinato è determinato dall'operatore di interazione. È possibile utilizzare frammenti combinati per descrivere diverse strutture di controllo e logiche in modo compatto e conciso. L'operatore di interazione identifica il tipo di istruzione logica o condizionale che definisce il funzionamento del frammento combinato.
Come illustra la seguente figura, un frammento combinato viene visualizzato come un frame che comprende le lifeline e contiene operandi di interazione. Un frammento combinato separa gli operandi di interazione contenuti con una linea orizzontale tratteggiata tra ogni operando.
Un operatore di interazione definisce la semantica di un frammento combinato e determina come utilizzare gli operandi di interazione in tale frammento. L'operatore definisce il tipo di condizioni logiche da applicare agli operandi. Ad esempio, un frammento combinato con l'operatore di interazione alternativo (alt) agisce come un'istruzione if-then-else. Nella figura precedente, un loop ed un operatore di interazione alternativo (alt) definiscono i due frammenti combinati.
Nei diagrammi di sequenza, un operando di interazione è un contenitore che raggruppa i frammenti di interazione e i messaggi che sono in esecuzione se viene riscontrata una condizione di guardia. In assenza di guardia, il blocco sarà sempre in esecuzione.
Ogni operando di interazione è un frammento di un'interazione e include le lifeline nel frammento combinato. Tale operando contiene una condizione di guardia che contiene un vincolo di interazione. L'operando di interazione è in esecuzione solo se la condizione di guardia ha il valore true.
In base al tipo di operatore di interazione, è possibile avere uno o più operandi di interazione in un frammento combinato. Ogni operando deve avere una condizione di guardia.
Quando si crea un operando di interazione, esso viene visualizzato in uno stato espanso. È possibile ridurlo per nasconderlo insieme ai relativi messaggi associati e ai frammenti di interazione e per ridurre la dimensione del frammento combinato nel frame di interazione.
Nella figura precedente, il frammento combinato alternativo (alt) contiene due operandi di interazione; uno con una condizione di guardia x>5 e l'altro operando di interazione con la condizione di guardia x<=5. Se x=6, la condizione di guardia x<=5 e l'operando corrispondente e i messaggi vengono eseguiti. La condizione di guardia x>5 e l'operando corrispondente e i messaggi contenuti non vengono eseguiti.
Nei diagrammi di sequenza, una condizione di guardia contiene un vincolo di interazione che è un'espressione booleana o, in caso di loop, un'espressione che indica il numero di volte minimo e massimo in cui il loop è in esecuzione e, facoltativamente, il valore incrementale.
Una condizione di guardia è una limitazione o una condizione semantica impostata tra parentesi quadre in un operando di interazione all'interno di un frammento combinato. Quando si crea un frammento combinato, viene creata automaticamente una condizione di guardia. È inoltre possibile creare manualmente una condizione di guardia in un operando di interazione che non dispone di tale condizione.
Una condizione di guardia viene visualizzata all'inizio dell'interazione e contiene tutte le informazioni necessarie per decidere se eseguire o meno l'operando di interazione. Se la condizione di guardia verifica true, il frammento di interazione viene eseguito.
![]() |
// Questa sezione è un frammento combinato //if else rappresenta l'operatore di interazione //if-else è un frammento combinato alternativo(alt) if ( valore maggiore di 5) // la condizione tra () è la condizione di guardia // Il codice tra {} è l'operando di interazione // Viene eseguito se la condizione di guardia è true { A send a message to B; B sends a return message to A; } else if(x is less than or equal to 5) { B sends a message to A; } |