Construirea Diagramelor Pentru Un Scenariu

download Construirea Diagramelor Pentru Un Scenariu

of 8

description

kjhhuigf

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