Andiamo adesso ad analizzare un altro tipo di diagramma: i diagrammi di sequenza. Nei capitoli precedenti abbiamo visto che i diagrammi dei casi d’uso forniscono informazioni sulle interazioni tra gli uteti e il nostro sistema, ma il caso d’uso in se non ci dava informazioni su cosa avvenisse realmente all’interno del nostro sistema. I diagrammi di sequenza servono per descrivere, in maniera dinamica, ciò che accade, all’interno del sistema, quando si compie una determinata operazione. Per poter disegnare un diagramma di sequenza è necessario aver modellato, precedentemente, un diagramma delle classi dal quale partire in quanto le entità principali presenti nei diagrammi di sequenza sono gli oggetti ovvero le istanze delle classi.
Per spiegare al meglio come si costruiscono i diagrammi di sequenza partiamo da un semplice esempio che modella i prestiti di libri concessi da una biblioteca: L’utente effettua le ricerche necessarie prima di trovare il libro che vuole in prestito. Se il libro è disponibile il sistema effettua il controllo sul numero dei prestiti già erogati per l’utente. Se si è raggiunto il numero massimo di prestiti non è possibile prendere i libro. In caso contrario il prestito viene concesso e il sistema aggiorna la lista dei libri in prestito.
Si lascia per esercizio al lettore il diagramma delle classi relativo al problema sopra esposto. Il nostro obiettivo è quello di modellare ciò che avviene quando un utente richiede un prestito del libro e per far ciò spieghiamo le interazioni presenti all’interno del sistema per poter espletare la funzione richiesta. Mostriamo adesso l’inzio del diagramma di sequenza che verrà poi dettagliatamente commentato:
Analizziamo adesso il diagramma mostrato sopra. In alto abbiamo dei blocchi, ed ogni blocco rappresenta un oggetto già istanziato. Nel nostro caso sono stati inseriti tutti gli oggetti, che svolgono delle operazioni, necessari per l’espletamento della funzione del prestito del libro. Come vediamo, sotto ogni blocco, è presenta una linea tratteggiata che rappresenta lo scorrere del tempo. Quindi analizzando il diagramma, dal punto di vista temporale, un’azione che è rappresentata più vicina al blocco rispetto ad un altra significa che quell’azione è stata compiuta prima. Nel nostro esempio il responsabile dell’erogazione del prestito è il Gestore prestiti che sostanzialmente rappresenta l’interfaccia tra l’utente e l’intero sistema. Sarà dunque suo compito verificare se il libro è disponibile o meno, concedere il prestito, e fare gli opportuni aggiornamenti.
I rettangolini bianchi da dove partono le frecce rappresentano il punto esatto nel quale l’oggetto entra realmente in gioco effettuando una operazione. Le frecce che partono dai rettangoli e vanno a finire in un altro rettangolino di un oggetto rappresentano l’operazione effettuata e nel nostro caso, la prima operazione eseguita, è la richiesta del prestito. Notiamo la presenza di due informazioni sulla freccia: un numero progressivo che indica quando viene eseguita l’operazione e l’operazione eseguita. Anche in questo caso è opportuno dare dei nomi coerenti con l’operazione svolta e il più descrittivi possibili. Nel caso in cui l’operazione indicata istanzia un oggetto solitamente si inserisce anche la parola chiave create e il nuovo oggetto viene posizionato dove termina la freccia e non in alto insieme agli altri. Continuando nella nostra analisi, coerentemente con quanto detto riguardo al numero progressivo nelle azioni, la freccia successiva sarà identificata dal numero 2 e l’operazione eseguita è di ovvia comprensione. Notiamo che dall’oggetto libro è presente una freccia tratteggiata in direzione dell’oggetto gestore prestiti. Qesto tipo di freccia non rappresenta un’operazione che deve essere eseguita, bensì rappresenta il risultato dell’esecuzione dell’operazione eseguita precedentemente. E’ buona norma descrivere brevemente il tipo di ritorno ed infatti, nel nostro caso, abbiamo: libro disponibile. Spesso si definiscano le operazioni stimoli e le frecce che ritornano l’esito dell’operazione ritorni.