Sunteți pe pagina 1din 26

Diagrame de interacţiune

Introducere

Diagramele de interacţiune permit specificarea în detaliu a modului în care


obiectele interacţionează pentru a executa un task.

UML furnizează 2 tipuri de diagrame de interacţiune:


- diagrame de colaborare
- diagrame de secvenţă.

Principala utilizare a acestor diagrame este de a ilustra modul în care


sistemul realizează un caz de utilizare sau un anumit scenariu dintr-un caz
de utilizare.
Diagrame de colaborare
Obiectele care interacţionează pentru a executa un task împreună cu
legăturile dintre ele formează o colaborare.

Interacţiunea este reprezentată de secvenţă de mesaje care sunt


transmise între obiecte.
Diagrama de colaborare cuprinde următoarele elemente:
a) Obiecte: dreptunghi în care sunt scrise numele obiectului şi numele
clasei, separate prin “:”, toate subliniate. Dacă numele obiectului nu are o
anumită semnificaţie, poate fi omis (:NumeClasa); nu este indicată
această utilizare dacă există două obiecte din aceeaşi clasă.

b) Legături: se reprezintă la fel ca asocierile

c) Actori: se reprezintă la fel ca în diagramele use-case. În cazul în care


colaborarea descrie un caz de utilizare, actorii din colaborare vor
corespunde cu actorii din diagrama use-case corespunzătoare. Pot exista
mai mulţi actori, însă numai unul singur va iniţia cazul de utilizare.
d) Mesaje: pe o diagramă de colaborare, numele mesajelor se reprezintă
alături de liniile ce descriu legaturile dintre obiecte, iar direcţia de
transmitere a mesajului e indicată printr-o săgeată.
Dacă un mesaj este transmis de la un obiect a:A către obiectul b:B, obiectul
destinatar (b) trebuie să înţeleagă mesajul, adică este necesar ca în clasa
din care face parte obiectul (B) să existe o operaţie corespunzătoare
mesajului. Cu alte cuvinte, construirea unor diagrame de interacţiune
contribuie la identificarea asocierilor dintre clase şi a operaţiilor claselor. E
posibil ca prima soluţie să nu fie cea optimă.
Cum circulă mesajele? (în varianta procedurală)
Un obiect începe să lucreze atunci când primeşte un mesaj; se spune că în
acel moment obiectul este activat. În cele din urmă, el trebuie să trimită un
răspuns celui care a trimis mesajul, iar între timp el poate fie să lucreze, fie
poate trimite mesaje altor obiecte pentru a le face pe acestea să lucreze.
Dacă trimite un mesaj, el va fi în continuare activ, dar nu va putea să lucreze
până când nu va primi răspuns la acest mesaj. Cu alte cuvinte, mesajul este
sincron, adică la transmiterea unui mesaj se transmite controlul celui care
primeşte mesajul. În fiecare moment, totul poate fi imaginat ca o stivă de
activări, fiecare activare fiind asociată cu un obiect care a primit un mesaj la
care nu a răspuns încă. Obiectul asociat cu activarea aflată în vârful stivei
are controlul şi poate să lucreze; obiectele asociate cu celelalte activări
aşteaptă răspuns la mesajele pe care le-au trimis.
Dacă obiectul asociat activării din vârful stivei trimite un mesaj, obiectul
care primeşte mesajul primeşte şi controlul, iar activarea sa va fi
poziţionată în vârful stivei.
Pe de altă parte, obiectul asociat activării din vârful stivei poate să-şi
termine lucrul şi să răspundă la mesajul care l-a activat, fiind astfel înlăturat
din stivă. În acest caz, următoarea activare va deveni vârful stivei, iar
obiectul asociat acesteia va recăpăta controlul.
Obs. Nu este necesară reprezentarea mesajelor de răspuns într-o diagramă
de colaborare.

Pentru a ţine evidenţa numărului de stive de activare, mesajele sunt


numerotate, folosind următoarea regulă: primul mesaj transmis de la un
obiect la altul este numerotat cu 1 (nu este socotit primul mesaj de la
actorul care iniţiază interacţiunea la un obiect). Când un obiect a primeşte
un mesaj, numărul acelui mesaj va fi folosit ca prefix pentru toate mesajele
trimise până când a răspunde la acest mesaj.
Exemplu: dacă mesajul care îl activează pe a este numerotat cu 2.1, atunci
toate mesajele trimise între acest moment şi răspunsul la acest mesaj vor fi
numerotate cu 2.1.n.
Fig. Exemplu de numerotare a mesajelor
Diagrame de secvenţă
O astfel de diagramă pune în evidenţă transmiterea mesajelor de-a lungul
timpului.

Obiectele şi actorii sunt reprezentaţi la capătul de sus al unor linii punctate,


care reprezintă linia de viaţă a obiectelor, adică timpul aşa cum este
perceput el de obiecte.
Timpul cât este activat un obiect este reprezentat ca un dreptunghi subţire
ce acoperă linia de viaţă.
Opţional, părţi din acest dreptunghi pot fi haşurate, pentru a indica perioada
de timp cât acesta lucrează. Tot opţional pot fi reprezentate şi răspunsurile
la mesaje, printr-o linie punctată.
Facilităţi suplimentare ale diagramelor de interacţiune
Mesaje de la un obiect către el însuşi
Într-o diagramă de colaborare, se reprezintă printr-o legătură între obiectul
respectiv şi el însuşi. Într-o diagramă de secvenţă, se reprezintă printr-o
săgeată de la linia de viaţă a obiectului către ea însăşi. În acest caz,
dreptunghiul subţire reprezentând noua activare este puţin deplasat faţă de
cel reprezentând vechea activare.
Reprezentarea valorilor returnate de mesaje
În UML o valoare returnată este reprezentată pe săgeata reprezentând
mesajul iniţial ca o atribuire către o variabilă având un nume nou (vezi
figura de pe pagina următoare).

Crearea şi distrugerea obiectelor


a) Diagramele de colaborare arată care obiecte sunt create şi distruse în
timpul interacţiunii folosind stereotipurile «create» şi «destroy» înaintea
mesajelor corespunzătoare. Alternativ, faptul că un obiect a fost creat sau
distrus în cadrul interacţiunii se poate reprezenta prin constrângerile {new},
respectiv {destroyed} plasate în dreptunghiul care reprezintă obiectul (vezi
figura de pe pagina următoare). Dacă un obiect este atât creat cât şi distrus
în timpul interacţiunii, se poate folosi constrângerea {transient}.

b) Diagramele de secvenţă arată că un obiect este creat prin plasarea


acestuia în josul paginii. Distrugerea unui obiect este reprezentată printr-un
X la sfârşitul dreptunghiului reprezentând perioada de activare. Dacă un
obiect e distrus de alt obiect va exista un mesaj de la obiectul care
efectuează operaţia de distrugere către semnul X.
Reprezentarea constrângerilor de timp
La diagramele de secvenţă, e util de ştiut şi momentele efective la care apar
mesajele. Modalitatea eficientă furnizată de UML este scrierea unor
constrângeri de timp.
Reprezentarea la diferite nivele de abstracţie
Pentru ca interacţiunea să fie descrisă la un nivel mai înalt de abstracţie, se
poate folosi o subcolaborare, adică o submulţime de obiecte împreună cu
legăturile dintre ele. O subcolaborare poate fi privită ca un singur element şi
poate fi reprezentată ca un pachet.
Exprimarea condiţiilor

În UML transmiterea unui mesaj poate depinde de îndeplinirea unei condiţii.


În cadrul diagramei, condiţiile vor apărea în paranteze drepte şi vor fi
poziţionate în faţa mesajelor corespunzătoare.

Dintr-un punct pot pleca orice număr de mesaje, cu condiţia ca acestea să


aibă condiţii disjuncte. O diagramă de secvenţă cu mesaje alternative
însoţite de condiţii poate fi implementată folosind structuri “if-else” sau
“case”.

În cazul în care mai multe mesaje alternative sunt trimise aceluiaşi obiect,
pentru a scoate în evidenţă că una dintre alternativele respective nu poate fi
aleasă decât una şi ele nu pot exista simultan, în diagramele de secvenţă
linia de viaţă a obiectului destinatar va avea mai multe ramificaţii, fiecare
corespunzând unei alternative.
Exemplu. Să presupunem exemplu cu centrul de închirieri CD-uri şi casete,
adăugăm ipoteza că există 2 tipuri de CD-uri: obişnuite şi speciale. CD-urile
obişnuite pot fi împrumutate pentru o perioadă mai lungă (3 săptămâni), în
timp ce CD-urile speciale mai puţin (1 săptămână).
Iteraţii
Pentru a arăta că un mesaj poate fi trimis în mod repetat se foloseşte un
asterisc poziţionat după numărul mesajului. În plus, după asterisc se poate
indica o clauză de iteraţie (plasată între paranteze drepte), care determină
de câte ori va fi trimis mesajul.

Exemple:
• [n<10]: este echivalentul condiţiei while;
• [not x];
• [i:=1..10]: este echivalentul condiţiei for;
• [y in Y]: mesajul e trimis în mod repetat pentru fiecare y din colecţia Y
Figura de mai jos reprezintă diagrama de secvenţă pentru cazul unui client
care cumpără un număr de produse dintr-un magazin.
Dacă un mesaj care e transmis în mod repetat are ca rezultat transmiterea
unui alt mesaj, atunci transmiterea acestuia din urmă va fi repetată ori de
câte ori e transmis şi primul mesaj, dar acest lucru nu va fi arătat pe
diagramă.

Exemplul1. Ce rezultat va avea figura de mai jos?

Răspuns: xyxy.
Exemplul1. Ce rezultat va avea figura de mai jos?

Răspuns: xyyxyy.
Concurenţa

Până acum s-a considerat tipuri de interacţiune procedurală, în care, după


transmiterea unui mesaj, obiectul care trimite mesajul aşteaptă răspunsul
înainte de a-şi continua funcţionarea. Este cazul cel mai întâlnit în practică,
deoarece majoritatea sistemelor funcţionează pe un singur procesor.

În cadrul sistemelor concurente, există cazurile:


• un obiect trimite simultan mai multe mesaje: se reprezintă prin mai multe
săgeţi care pleacă din acelaşi loc, fără a avea asociate condiţii
• un actor sau un obiect activ trimite un mesaj la un anumit moment, deşi
obiectul care lucrează în acel moment este alt obiect din sistem
• un obiect trimite un mesaj asincron, adică un mesaj care poate face ca alt
obiect să lucreze fără ca obiectul care atrimis mesajul să-şi înceteze lucrul.

În primul caz, schema de numerotare îmbricată descrisă mai devreme va fi


extinsă, în sensul posibilităţii ca la numerotarea mesajelor să apară nume
sau litere care să diferenţieze mesajele trimise simultan. În ultimele 2
situaţii, schema de numerotare îmbricată îşi pierde sensul, putându-se
folosi numerotarea secevnţială.
Tipuri de mesaje

Există mai multe tipuri de mesaje în UML:

• mesaje sincrone : specifice funcţionării procedurale

• mesaje de răspuns : reprezentarea e opţională

• mesaje asincrone : nu aşteaptă răspuns, obiectul rămâne activ

• mesaje simple : nu aşteaptă răspuns, obiectul pierde controlul


Exemplul1. La centrul de închirieri se consideră că există şi o componentă
de statistică, responsabilă cu evidenţa CD-urilor care devin indisponibile la
un moment dat (toate copiile au fost împrumutate).

Figura arată folosirea unui mesaj asincron.


Exemplul2 (pentru folosirea mesajelor simple). Automat pentru băuturi:
cerinţe

• casa de bani va verifica dacă suma de bani introdusă de client corespunde


cu preţul băuturii selectate;
• dacă suma este egală cu preţul, containerul de băuturi va livra produsul;
• dacă suma este mai mare decât preţul, casa de bani va calcula restul şi va
verifica dacă acesta e disponibil în casă;
• în cazul în care restul e disponibil, casa de bani returnează acest rest, iar
magazia oferă produsul selectat;
• dacă restul nu e disponibil, casa de bani va returna banii clientului;
• dacă suma introdusă de client e mai mică decât preţul produsului, casa de
bani va aştepta mai mulţi bani şi nu va face nimic.

S-ar putea să vă placă și