Sunteți pe pagina 1din 8

1. Construirea diagramelor de interaciune pentru un scenariu.

Exemplul utilizat: Problema liftului.


1a. Construirea diagramelor de secven
Punctul de plecare: scenariile din analiza OO
Scop: ilustrarea obiectelor i a mesajelor transmise ntre ele
Elementele constitutive ale diagramei
Actori
utilizatori umani
obiecte active n evenimentele scenariului (instane de clase din sistem)
- dreptunghiuri cu numele obiectului subliniat
Mesajele dintre obiecte - linii etichetate cu sgei pe orizontal - corespund
evenimentelor din scenariu
aciuni ale utilizatorilor
mesaje ntre obiecte
Timpul indic ordinea n care se desfoar aciunile (de sus n jos)
Scenariul normal
1. Utilizatorul A apas butonul Sus la etajul 3 pentru a cere un lift. El dorete s ajung la
etajul 7.
2. Butonul Sus de la etajul 3 informeaz controlerul liftului c a fost apsat
3. Controlerul liftului trimite un mesaj butonului Sus de la etajul 3 s se aprind.
4. Controlerul liftului trimite o serie de mesaje la lift s se deplaseze n sus spre etajul 3. n
lift se gsete utilizatorul B, care a intrat n lift la etajul I i a apsat butonul pentru etajul
9.
5. Controlerul liftului trimite un mesaj butonului Sus de la etajul 3 s se sting.
6. Controlerul liftului trimite un mesaj la uile liftului s se deschid.
7. Controlerul liftului pornete cronometrul.
Utilizatorul A intr n lift.
8. Utilizatorul A apas butonul din lift pentru etajul 7.
9. Butonul pentru etajul 7 din lift informeaz controlerul liftului c a fost apsat.
10. Controlerul liftului trimite un mesaj butonului pentru etajul 7 din lift s se aprind.
11. Controlerul liftului trimite un mesaj la uile liftului s se nchid dup un timp (timeout).
12. Controlerul liftului trimite o serie de mesaje la lift s se deplaseze n sus spre etajul 7.
13. Controlerul liftului trimite un mesaj butonului pentru etajul 7 din lift s se sting.
14. Controlerul liftului trimite un mesaj la uile liftului s se deschid pentru ca utilizatorul A
s poat iei din lift.
15. Controlerul liftului pornete cronometrul.
Utilizatorul A iese n lift.
16. Controlerul liftului trimite un mesaj la uile liftului s se nchid dup un timp (timeout).
17. Controlerul liftului trimite o serie de mesaje la lift s se deplaseze n sus spre etajul 9 cu
utilizatorul B n el.

Utilizator
A

buton
etaj

1. Apas buton
etaj

buton
lift

controler
lift

lift

u
lift

2. Informeaz controler lift


3. Aprinde buton
4*. Deplaseaz
un etaj n sus

5. Stinge buton

6. Deschide u
7. Start
cronometru
8. Apas buton lift
9. Informeaz
controler lift
10. Aprinde buton

11. nchide u
*

13. Stinge buton

12 . Deplaseaz
un etaj n sus
14. Deschide u
15. Start
cronometru
16. nchide u
17*. Deplaseaz
un etaj n sus

Diagrama de secven pentru scenariul de mai sus


Pai:

Se extrag actorii din scenariu i se deseneaz pe acelai nivel


numele actorului cu bold n caseta aferent (dac actorul este obiect)
se traseaz cte o linie vertical sub fiecare actor - indic timpul
Actorilor li se asociaz evenimente (lista actor - evenimente)
Utilizatorul A (evenimentele 1 i 8)
buton etaj (evenimentele 1, 2, 3 i 5)
buton lift (evenimentele 9, 10 i 13)
controler lift (evenimentele 2-7, 9-17)
lift (evenimentele 4, 12 i 17)
u lift (evenimentele 6, 11, 14 i 16)

Evenimentele se insereaz n diagram n ordinea n care ele apar n scenariu.

1b. Construirea diagramelor de colaborare


Punctul de plecare: scenariile din analiza OO
Scop: ilustrarea relaiilor de colaborare ntre obiecte
Elementele constitutive ale diagramei
Actori
utilizatori umani
obiecte active n evenimentele scenariului (instane de clase din sistem)
- dreptunghiuri cu numele obiectului subliniat
Relaiile de colaborare dintre actori - linii pe orizontal, vertical, oblice Evenimentele - linii scurte cu sgei i etichetate, paralele cu liniile
relaiilor
aciuni ale utilizatorilor
mesaje ntre obiecte
u lift
11. nchide ua

16. nchide ua

6. deschide ua

14. deschide ua

controler lift

3. aprinde buton

4. *deplaseaz un etaj n sus


12. *deplaseaz un etaj n sus
17. *deplaseaz un etaj n sus

7. start cronometru
15. start cronometru

10. aprinde buton

5. stinge buton

13. stinge buton

2. informeaz controler lift

buton etaj

1. apas
buton etaj

9. informeaz
controler lift
8. apas
buton lift

buton lift

Utiliz. A

Diagram de colaborare pentru scenariul de mai sus


Pai

Se extrag actorii din scenariu i se deseneaz n diagram


numele actorului cu bold n caseta aferent (dac actorul este obiect)

lift

casetele cu actori se poziioneaz astfel ca relaiile s nu se suprapun


se traseaz cte o linie (orizontal, vertical, oblic) ntre actorii care
colaboreaz (i trimit mesaje)
Relaiilor dintre actori li se asociaz evenimente (lista relaie - evenimente)
Utilizatorul A cu buton etaj (evenimentul 1)
Utilizatorul A cu buton lift (evenimentul 8)
buton etaj cu controler lift (evenimentele 2, 3 i 5)
buton lift cu controler lift (evenimentele 9, 10 i 13)
lift cu controler lift (evenimentele 4, 12 i 17)
u lift cu controler lift (evenimentele 6, 11, 14 i 16)
Evenimentele se insereaz n diagram n ordinea n care ele apar n scenariu.
Sgeile se pun de-a lungul liniilor ce reprezint relaia. Sensul sgeii indic
direcia n care se transmite mesajul.

Asemnri i deosebiri ntre diagrama de interaciune i diagrama de colaborare

Asemnri:
o apar aceiai actori
o apar aceleai evenimente
deosebiri:
o n diagrama de interaciune se ilustreaz ordinea evenimentelor
o n diagrama de colaborare se ilustreaz relaiile dintre actori;
evenimentele sunt ataate relaiilor i nu este evident ordinea lor

2. Construirea diagramei detaliate a claselor


Puncte de plecare:
Diagrama de clase din analiza OO
conine clasele, atributele acestora i relaiile dintre clase
Card-urile CRC
Scopuri:
identificarea metodelor claselor i inserarea lor n diagrama de clase
stabilirea drepturilor de acces (vizibilitii) pentru membri
adugarea de clase adiionale
modulul principal (aplicaia)
clase de serviciu (ajut implementarea)
Elementele definitorii ale unei clase
Membri: date, metode
Drepturi de acces pentru membri
public
private
protected
Reprezentarea claselor
numele clasei este un substantiv la singular, scris cu bold, cu iniiale
zona atribute conine specificaii Vnume atribut: tip de date
zona metode conine specificaii Vnume metod(parametri)[: tip rezultat]

indic vizibilitatea n afara clasei:


+ public - vizibil (accesibil) n afar
- private - invizibil (inaccesibil) n afar
# protected - public n clasele derivate, private n ceilali clieni
Ataarea de metode la clase - etape
Determinarea tuturor aciunilor pe care le realizeaz sistemul studiat
Ataarea aciunilor la clase sau la clieni - modaliti
folosind principiul ascunderii informaiei: aciunile efectuate asupra
variabilelor de stare ale unei clase trebuie s fie locale n clasa
respectiv (deoarece variabilele de stare sunt private, deci nu pot fi
accesate din afara clasei)
folosind principiul implementrii unice: orice aciune s fie
implementat o singur dat ca metod a unei clase (ntr-o singur
clas)
folosind principiul proiectrii dirijate de responsabiliti - mai jos
Ataarea de metode la clase - pai
Identificarea responsabilitilor directe i indirecte ale fiecrei clase (CRC)
Transformarea responsabilitilor n metode publice ale claselor
Refactorizarea claselor
Verificarea respectrii principiilor de proiectare
V

CLASS
ControlerLift
RESPONSIBILITY
1. Trimite mesaj la ButonLift s aprind butonul
2. Trimite mesaj la ButonLift s sting butonul
3. Trimite mesaj la ButonEtaj s aprind butonul
4. Trimite mesaj la ButonEtaj s sting butonul
5. Trimite mesaj la Lift s mute liftul un etaj n sus
6. Trimite mesaj la Lift s mute liftul un etaj n jos
7. Trimite mesaj la ULift s se deschid
8. Pornete cronometrul
9. Trimite mesaj la ULift s se nchid dup timeout
10. Verific cererile
11. Actualizeaz cererile
COLLABORATION
1. Subclasa ButonLift
2. Subclasa ButonEtaj
3. Clasa ULift
4. Clasa Lift
A doua iteraie a card-ului CRC pentru clasa ControlerLift

Buton
iluminat: Boolean

ButonLift

ButonEtaj

mn
controleaz
1

2m-2
controleaz
1
1
n
controleaz

ControlerLift
cereri: tipCerere
1
n

ULift
ui deschise: Boolean

controleaz

Lift

A treia iteraie pentru diagrama de clase


a. Identificarea responsabilitilor directe i indirecte ale fiecrei clase
Din card-ul CRC pentru clasa ControlerLift rezult c responsabilitile se pot
grupa n dou categorii
responsabiliti directe ale clasei ControlerLift:
8. Pornete cronometrul
10. Verific cererile
11. Actualizeaz cererile
responsabiliti indirecte ale clasei ControlerLift, exprimate prin trimitere
de mesaje spre alte clase C, de genul Trimite mesaj la C s fac ceva
responsabilitile 1-7, 9.
b. Transformarea responsabilitilor n metode publice
responsabilitile directe se transpun n metode ale clasei n cauz
clasa ControlerLift va avea metodele publice pornete cronometru, verific cereri
i actualizeaz cereri.
responsabilitile indirecte se transpun n metode ale clasei creia i este
destinat mesajul
clasa ButonLift va avea metodele publice stinge buton i aprinde buton.
clasa ButonEtaj va avea metodele publice stinge buton i aprinde buton.
clasa Lift va avea metodele publice deplaseaz un etaj n sus i deplaseaz un
etaj n jos.
clasa ULift va avea metodele publice nchide u i deschide u.
c. Refactorizarea claselor
se face n prezena motenirii - pentru clasele ntre care exist relaii de
motenire
clasele ButonLift i ButonEtaj motenesc de la clasa Buton.
principiul factorizrii: fiecare membru al unei clase se pune n ierarhia de clase
ct mai aproape de rdcin
modaliti concrete de realizare
6

datele comune claselor derivate se pun n clasa de baz


membrul dat iluminat este pus n clasa de baz Buton.
metodele comune claselor derivate se pun n clasa de baz
clasele ButonLift i ButonEtaj au metodele comune stinge buton i aprinde
buton.
metodele stinge buton i aprinde buton se pun i n clasa de baz Buton.
implementarea fiecrei metode se face ct mai aproape de rdcin
implementarea metodelor stinge buton i aprinde buton este proprie
fiecreia dintre clasele ButonLift i ButonEtaj, prin urmare
implementarea aparine respectivelor clase
acolo unde o metod nu se poate implementa, se declar abstract
metodele stinge buton i aprinde buton se declar abstracte n clasa Buton.
d. Verificarea respectrii principiilor de proiectare
principiul proiectrii dirijate de responsabiliti: fiecare clas trebuie s aib
controlul complet al comportamentului su
responsabilitile directe se transpun n metode ale clasei n cauz
responsabilitile indirecte se transpun n metode ale clasei creia i este
destinat mesajul
principiul ascunderii informaiei: membrii date sunt ascuni
se obin clase independente i refolosibile
clienii nu au acces la reprezentarea obiectelor - rezult obiecte mai sigure
exemple
clasa Buton: atributul iluminat este ascuns
clasa ULift: atributul ui deschise este ascuns
clasa ControlerLift: atributul cereri este ascuns
principiul factorizrii: fiecare membru este plasat ct mai aproape de rdcin
metodele unei clase C formeaz un protocol de comunicaie respectat de
toi descendenii clasei C
este favorizat polimorfismul: oriunde apare un obiect din clasa C se poate
folosi un obiect al unei clase derivate din C
se simplific scrierea codului (i nelegerea acestuia).

Aplicaia Lift

Buton

Utiliti Lift

-iluminat: Boolean
+stinge buton (abstract)
+aprinde buton (abstract)

ButonLift

ButonEtaj

+stinge buton
+aprinde buton

+stinge buton
+aprinde buton

mn

2m-2
controleaz
1

controleaz
1

ControlerLift

-cereri: tipCerere
+verific cereri
+actualizeaz cereri
+pornete cronometru

1
n

controleaz

ULift
-ui deschise: Boolean
+nchide u
+deschide u

controleaz

Lift
+deplaseaz un etaj n sus
+deplaseaz un etaj n jos

Figur - Diagrama de clase detaliat pentru problema liftului

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