Construirea Diagramelor Pentru Un Scenariu
-
Upload
mithrilfang -
Category
Documents
-
view
2 -
download
0
description
Transcript of Construirea Diagramelor Pentru Un Scenariu
Curs 5: OOA
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.
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
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)
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: apar aceiai actori
apar aceleai evenimente
deosebiri: n diagrama de interaciune se ilustreaz ordinea evenimentelor
n diagrama de colaborare se ilustreaz relaiile dintre actori; evenimentele sunt ataate relaiilor i nu este evident ordinea lor2. 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]
V 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
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 ButonLift2. Subclasa ButonEtaj3. Clasa ULift4. Clasa Lift
A doua iteraie a card-ului CRC pentru clasa ControlerLiftA 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
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).
Figur - Diagrama de clase detaliat pentru problema liftului
4*. Deplaseaz
un etaj n sus
controler lift
buton lift
buton etaj
Utilizator
A
3. Aprinde buton
2. Informeaz controler lift
1. Apas buton
etaj
u
lift
lift
cereri: tipCerere
ControlerLift
controleaz
n
1
Lift
ui deschise: Boolean
ULift
controleaz
1
controleaz
controleaz
ButonEtaj
ButonLift
iluminat: Boolean
Buton
mn
1
+deplaseaz un etaj n sus
+deplaseaz un etaj n jos
Lift
+verific cereri
+actualizeaz cereri
+pornete cronometru
-cereri: tipCerere
ControlerLift
+nchide u
+deschide u
-ui deschise: Boolean
ULift
Utiliti Lift
Aplicaia Lift
+stinge buton
+aprinde buton
ButonEtaj
2m-2
1
+stinge buton
+aprinde buton
ButonLift
controleaz
n
1
controleaz
n
1
controleaz
controleaz
+stinge buton (abstract)
+aprinde buton (abstract)
-iluminat: Boolean
Buton
mn
1
6. Deschide u
5. Stinge buton
2m-2
1
n
8. apas
buton lift
1. apas
buton etaj
Utiliz. A
9. informeaz
controler lift
2. informeaz controler lift
5. stinge buton
3. aprinde buton
15. start cronometru
7. start cronometru
13. stinge buton
10. aprinde buton
17. *deplaseaz un etaj n sus
12. *deplaseaz un etaj n sus
4. *deplaseaz un etaj n sus
6. deschide ua
11. nchide ua
14. deschide ua
16. nchide ua
buton lift
buton etaj
lift
controler lift
u lift
7. Start
cronometru
8. Apas buton lift
9. Informeaz
controler lift
10. Aprinde buton
11. nchide u
12*. Deplaseaz
un etaj n sus
13. Stinge buton
14. Deschide u
15. Start
cronometru
16. nchide u
17*. Deplaseaz
un etaj n sus
PAGE 1