Università di Padova Facoltà di Scienze MM.FF.NN Informatica - anno 2008-09 Corso di Ingegneria del Software UML Diagrammi di interazione Interaction diagrams lazione dinamica Dynamic ing Interazioni tra oggetti che partecipano in ciascun use case Sequenza di messaggi intra-oggetti Diagrammi di sequenza e/o di comunicazione (ex. collaborazione) di stato ver. 3.0 Renato Conte - UML: interazione - 1/40 - Renato Conte - UML: interazione - 2/40 - Fasi, modelli e diagrammi Use Case Fasi e relazioni tra diagrammi Requirements Analysis Use Case Analysis Class Component Object Analisi requisiti DiagrammiUse Case Diagrammidelle Classi Design Deployment Design Implementation Test Deployment Implem. Test Sequence Communication Statechart Activity Interaction diagrams Collaboration UML 1.x Diagrammidiinterazione (com unic.) e/o sequenza :Customer :Credit :Account Renato Conte - UML: interazione - 3/40 - Renato Conte - UML: interazione - 4/40 -
Per creare diagrammi di interazione Si deve sviluppare il diagramma Use Case ed il diagramma delle classi prima di creare un diagramma di interazione. Un diagramma di interazione Un diagramma di interazione mostra un insieme di oggetti e le loro relazioni, inclusi i messaggi che essi si scambiano Ci sono due tipi di diagrammi di interazione: Diagrammi di sequenza (Sequence diagrams) Diagrammi di comunicazione (Communication diagrams) Renato Conte - UML: interazione - 5/40 - Nel diagramma di sequenza viene enfatizzata la sequenza ordinata dei messaggi tra gli oggetti. Nel diagramma di comunicazione (ex. collaborazione) l enfasi viene posta sulla organizzazione strutturale degli oggetti che partecipano alla soluzione del problema, sulla loro interazione diretta. Renato Conte - UML: interazione - 6/40 - Diagrammi di sequenza e di comunicazione esempio di diagramma di sequenza oggetti Sequence Diagram x y z a b c Communication (collaboration) Diagram 1.1: a 1.2: c x y z 1.1.1: b Tempo c: Client p : ODBCProxy {transient} «create» : Transaction lifeline setactions(a,d,o) setvalues(d, 3.4) setvalues(a, CO ) Ritorno opzionale committed «destroy» messaggio Focus of control Renato Conte - UML: interazione - 7/40 - Distruzione dell oggetto Renato Conte - UML: interazione - 8/40 -
esempio di diagramma di comunicazione corrispondente Dal diagramma delle classi al diagramma di sequenza (1) c: Client oggetti Fattura * Acquisto quantity * Articolo price 1:«create» 2:setActions(a,d,o) 3:«destroy» :Fattura :Acquisto :Articolo «local» «global» : Transaction p : ODBCProxy {transient} 2.1:setValues(d, 3.4) 2.2:setValues(a, CO ) messaggi *[for all Purchase] getsubtotal() computetotal getunitprice() Renato Conte - UML: interazione - 9/40 - Renato Conte - UML: interazione - 10/40 - Diagramma di sequenza: dettagli 1 Diagramma di sequenza: dettagli 2 :Object :Thing :Object :Thing :Object *[i:=1..n]dostuff() iterazione Guards [i=0]dostuff() Selection ricorsione sync. message [i=1]dostuff() async. message Renato Conte - UML: interazione - 11/40 - Renato Conte - UML: interazione - 12/40 -
Diagramma di sequenza: dettagli 3 Dal diagramma delle classi al diagramma di sequenza Actor n := getname() :Customer :Account :Credit Course getprerequisite * CourseSection * Registration * requesttoregister addtoregistrationlist Student addtoschedule haspassedcourse Tempo new Account(n) ritardo :CourseSection :Student parametri creditcheck() requesttoregister :Registration <<create>> addtoschedule addtoregistrationlist Renato Conte - UML: interazione - 13/40 - Renato Conte - UML: interazione - 14/40 - Un maggior dettaglio nel progetto Esempio: cancellazione di una prenotazione GUI :CourseSection astudent: Student :Course requesttoregister requesttoregister (astudent) hasprerequisite := haspassedcourse(prereq) [hasprerequisite] <<create>> :Registration addtoregistrationlist addtoschedule prereq := getprerequisite :SpecificFlight :Booking :PassengerRole cancelbooking cancel deletefromitinerary deletefrompassengerlist Renato Conte - UML: interazione - 15/40 - Renato Conte - UML: interazione - 16/40 -
Access System: Sequence with Interaction frames sd GivePIN :User :ACSystem msg("give your PIN!") Digit() Digit() Digit() Digit() reference loop alternative sd EstablishAccess(String txt) ref :User loop(0,3) alt ref :ACSystem ref AC_EstablishAccess(txt) Idle Cardid GivePIN msg("try again!") GivePIN msg(txt) PIN NOK PIN OK alt opt par Loop region neg ref sd Common Operators for Interaction Frames Alternative multiple fragments; only the one whose condition is true will execute. Optional; the fragment executes only if the supplied condition is true. Equivalent to an alt with only one trace. Parallel; each fragment is run in parallel. Loop; the fragment may execute multiple times, and the guard indicates the basis of iteration. Critical region; the fragment can have only one thread executing it at once. Negative; the fragment shows an invalid interaction. Reference; refers to an interaction defined on another diagram. The frame is drawn to cover the lifelines involved in the interaction. You can define parameters and a return value. Sequence diagram; used to surround an entire sequence diagram, if you wish. Renato Conte - UML: interazione - 17/40 - Renato Conte - UML: interazione - 18/40 - Interaction summary diagram Communication Diagram for GivePIN GivePin 1: msg( Give PIN ) :User :ACSystem 2 *[i:=1 4: digit() ] Renato Conte - UML: interazione - 19/40 - Renato Conte - UML: interazione - 20/40 -
Dal diagramma delle classi al diagramma di comunicazione maggiori dettagli Course getprerequisite * CourseSection * Registration * requesttoregister addtoregistrationlist Student addtoschedule haspassedcourse GUI 1: requesttoregister(astudent) :CourseSection 2: prereq := getprerequisite :Course :CourseSection 1: <<create>> 3: addtoregistrationlist :Registration 2: addtoschedule :Student 3: hasprerequisite := haspassedcourse(prereq) astudent: Student 4: [hasprerequisite] <<create>> 5: addtoschedule 5: addtoregistrationlist :Registration Renato Conte - UML: interazione - 21/40 - Renato Conte - UML: interazione - 22/40 - stimulus Altro esempio di diagramma di comunicazione (v.più avanti) redisplay () 1: displaypositions (window) 1.1 *[i := 1..n]: drawsegment (i) standard stereotype «self» object symbol wire left : Bead window : Controller : Window wire :Wire 1.1.1a: r0 := position () 1.1.1b: r1 := position () Concurrent threads right : Bead link symbol Standard stereotype «local» line Standard constraint 1.1.2: create (r0, r1) 1.1.3: display (window) {new} : Line standard stereotype window «parameter» 1.1.3.1 add (self) contents {new} Oggetto creato durante le operazioni arrow label Renato Conte - UML: interazione - 23/40 - I link di comunicazione nei diagrammi di collaborazione objectx :ClassA sync. Message on objectx async. Message on objecty objecty :ClassB Un link di comunicazione può esistere tra due oggetti ogniqualvolta sia possibile per un oggetto mandare un messaggio ad un altro oggetto Situazioni: 1. Le classi, a cui appartengono i due oggett, possiedono una associazione che le lega. Questo è il caso più comune. Se tutti i messaggi sono inviati nella stessa direzione, probabilmente la relazione può essere resa unidirezionale 2. L oggetto che riceve è memorizzato in una variabile locale del sending method. Questo succede spesso quando l oggetto è creato in modo automatico (anche da un return). Lo stereotipo da utilizzare è «local» o [L]. Renato Conte - UML: interazione - 24/40 -
Link e messaggi Messaggi nei diagrammi di comunicazione: dettagli oggettor:= messaggio( oggettok: tipo ) Predecessor / sequence-expression: return-value := message-name (argument-list) objectx :ClassA objecty :ClassB 3. Un riferimento all oggetto ricevente è stato ricevuto come un parametro del sending method. Lo stereotipo da utilizzare è «parameter» or [P]. 4. L oggetto che riceve è globale. Questo è il caso quando una referenza di un oggetto può essere ottenuta usando un metodo statico. Lo stereotipo da utilizzare è «global», o un simbolo [G]. 5. Gli oggetti comunicano attraverso una rete. Suggeriamo di scrivere «network». 2.1 a, 2.2 b / 3.1 a : res := getlocation ( fig ) Progressione dei messaggi (livello di annidamento della procedura) Sequenza di interi separati dal punto: numerazione decimale di Dewey Lettere dell'alfabeto: nome thread. 3.7.4: move (5, 7) Lista di numeri di sequenze di altri messaggi Clausola opzionale. Indica che il messaggio non sarà attivato fino a che tutti i messaggi indicati nella lista non avranno terminato le loro azioni (sincronizzazioni). Renato Conte - UML: interazione - 25/40 - Renato Conte - UML: interazione - 26/40 - Numerazione decimale di Dewey Messaggi nei diagrammi di comunicazione: clausola condizionale Pred. / seq.exp: retval := mess( arg.-list ) 1 2 3.1.2 [ Z >0 ] : res := sadf ( 1,2,3 ) 1.1 1.2 1.3 1.3.1 Opzionale. La clausola condizionale è normalmente espressa in pseudo codice ed esprime quali condizioni devono verificarsi per la attivazione del messaggio. 1.2.1 1.2.2 Visita in preordine 1.2.5 [ free memory ] : createcopy ( ) Renato Conte - UML: interazione - 27/40 - Renato Conte - UML: interazione - 28/40 -
Messaggi nei diagrammi di cumunicazione (collaborazione): clausola iterativa Regole di sviluppo dei diagrammi di interazione Fissare il contesto dell interazione Includere solo quelle caratterizzazioni degli oggetti che risultano essere rilevanti al problema analizzato 3.1.2 *[ i:= 1..N ] : drawsegment ( i ) Esprimere il flusso dei messaggi da sinistra a destra e dall alto in basso Inserire preferibilmente le istanze attive a sinistra e/o in alto Opzionale. La clausola iterativa è normalmente espressa in pseudo codice ed esprime una esecuzione ripetuta Usare i diagrammi di sequenza: per mostrare esplicitamente l ordine degli stimoli (e /o messaggi) quando il problema riguarda il real-time Usare i diagrammi di comunicazione (collaborazione): quando la struttura della soluzione è importante per concentrarci sul comportamento degli oggetti per validare il relativo diagramma delle classi (test) Renato Conte - UML: interazione - 29/40 - Renato Conte - UML: interazione - 30/40 - Un programma server comunica con due programmi client :Server c1 :Client c2 :Client Esempi di diagrammi di interazione listen for connections connect send message connect send reply disconnect send message disconnect stop listening Renato Conte - UML: interazione - 31/40 - Renato Conte - UML: interazione - 32/40 -
Chiamata telefonica (msg. asincroni, ogg. attivi, vincoli temp.) {b.receivetime - a.sendtime < 1 sec.} {c.receivetime - b.sendtime < 10 sec.} The call is routed through the network. {d.receivetime - d.sendtime < 5 sec.} At this point the parties can talk. chiamante stazione di commut. a: solleva ricevitore b: dial tone c: dial digit... d: route ringing tone stop tone phone rings answer phone stop ringing ricevente {< 1 sec.} redisplay () 1.1*[i:=1..n]: drawsegment(i) «self» left : Bead Redisplay 1: displaypositions (window) window «parameter» : Controller window : Window wire wire :Wire i - 1 1.1.1a: r0 := position ( ) 1.1.1b: r1 := position () i right : Bead «local» line 1.1.2: create (r0, r1) 1.1.3: display (window) 1.1.3.1 add (self) contents {new} {new} : Line Renato Conte - UML: interazione - 33/40 - Renato Conte - UML: interazione - 34/40 - Cambia l itinerario di un volo: use case narrativo Actors: traveler, client account db, airline reservation system Preconditions: Traveler has logged in Basic course: Traveler selects change flight itinerary option System retrieves traveler s account and flight itinerary from client account database System asks traveler to select itinerary segment she wants to change; traveler selects itinerary segment. System asks traveler for new departure and destination information; traveler provides information. If flights are available then System displays transaction summary. Alternative course: If no flights are available then Renato Conte - UML: interazione - 35/40 - Cambia l itinerario di un volo: diag. di sequenza Traveler : Booking System Client Account DBMS Airline Reservation System change flight itinerary get customer account get itinerary present itinerary select segment present detailed info update information available flight Renato Conte - UML: interazione - 36/40 -
Cambia l itinerario di un volo: diag. di comunicazione Diagramma di sequenza con ruoli Traveler 1: change flight itinerary 5: select segment 7: update information 4: present itinerary 6: present detailed info : Booking System 2: get customer account 3: get itinerary Client Account DBMS 8: available flight Airline Reservation System Renato Conte - UML: interazione - 37/40 - Renato Conte - UML: interazione - 38/40 - Bibliografia Grady Booch, James Rumbaugh, Ivar Jacobson. The Unified ing Language User Guide, Addison Wesley, (1999). Grady Booch, James Rumbaugh, Ivar Jacobson The Unified ing Language Reference Manual, Addison Wesley, (1999). Ivar Jacobson, Grady Booch, James Rumbaugh The Unified Software Development Process, Addison Wesley, (1999). Riferimenti nel Web OMG UML - www.omg.org/uml/ - Reference manual UML 1.5 - UML 2.1 Superstructure Specifications UML: tool, demo, doc www.rational.com UML: Tutorial e link: www.kobryn.com Renato Conte - UML: interazione - 39/40 - Renato Conte - UML: interazione - 40/40 -