Sunteți pe pagina 1din 22

CAPITOLUL 5

ANALIZA SI MODELAREA SISTEMELOR SOFTWARE


5.1. Elementele metodologiei de modelare OMT
5.1.1. Tipuri de modele
5.1.2. Tipuri de blocuri OMT
5.2. Modelul obiectelor
5.2.1. Concepte de baza folosite in modelarea obiectelor
5.2.2. Concepte avansate folosite in modelarea obiectelor
5.3. Modelul dinamic
5.3.1. Concepte de baza
5.3.2. Concepte avansate
5.4. Modelul functional
5.4.1. Rolul modelului functional
5.4.2. Diagrame de flux de date
5.4.3. Specificarea operatiilor
5.4.4. Constrangeri

5.1. Elementele metodologiei de modelare OMT


5.1.1. Tipuri de modele
Un model este o notiune abstracta si este construit pentru a intelege problema inainte de a
implementa solutia. Metodologia orientata pe obiecte, sau OMT (Object Modelling
Technique), foloseste trei modele de baza:
Modelul obiectelor, care:
o descrie structura statica a obiectelor si sistem si relatiile dintre acestea;
o descrie ce se modifica in sistem (adica obiectele);
o este reprezentat cu ajutorul diagramelor de obiecte. O diagrama de
obiecte este un graf ale carui noduri sunt obiectele si ale carui arce sunt
relatiile dintre obiecte.
Modelul dinamic, care:
o descrie acele aspecte ale sistemului care se schimba in timp;
o specifica si implementeaza partea de control a sistemului;
o descrie cand se modifica sistemul;
o este reprezentat cu ajutorul diagramelor de stare. O diagrama de stare
este un graf ale carui noduri sunt starile si ale carui arce sunt tranzitiile
intre stari, cauzate de evenimente externe.
Modelul functional, care:
o descrie transformarile valorilor datelor in cadrul sistemului;
o descrie cum se modifica sistemul;
o este reprezentat cu ajutorul diagramelor de flux de date. O diagrama de
flux de date este un graf ale carui noduri sunt procesele si ale carui arce
sunt fluxurile de date.
5.1.2. Tipuri de blocuri
Modelarea prin tehnologia orientata pe obiecte (OO) utilizeaza reprezentarea elementelor
pe baza schemelor bloc. Blocurile corespund claselor si obiectelor, iar legaturile dintre ele
asociatiilor dintre clase.
In continuare se prezinta aceste blocuri.
Notatii de baza folosite in modelul obiect:

Notatii evoluate folosite in modelul obiect:

5.2. Modelul obiectelor


5.2.1. Concepte de baza folosite in modelarea obiectelor
Construirea modelului obiectelor este etapa cea mai importanta a tehnologiei OO si
inseamna scoaterea in evidenta atat a obiectelor, cu atributele si operatiile proprii, cat si a
relatiilor dintre ele.
Obiecte si clase
Un obiect este o entitate care se poate distinge dintre alte entitati si care are o semnificatie
in contextul aplicatiei modelate. Entitatile fereastra de lucru, triunghi, lista de date sunt cateva
exemple de obiecte.
Fiecare obiect isi are propria identitate, chiar daca seamana cu alte obiecte; doua cercuri
cu aceeasi raza, aceeasi culoare de contur si de umplere sunt, totusi, doua obiecte diferite.
O clasa de obiecte descrie o multime de obiecte cu proprietati (atribute) similare,
comportament (operatii) similar si relatii similare fata de alte obiecte. Exemple de clase
pentru obiectele de mai sus sunt: Fereastra, Poligon, Lista. Nu trebuie sa se confunde clasa cu
obiectul. De exemplu, daca exista clasa Poligon, atunci Triunghi si Patrat ar putea fi doua
obiecte din aceasta clasa.
Obiectele care apartin unei clase se mai numesc instante ale unei clase. Obiectele din
aceeasi clasa au o serie de proprietati (atribute) comune si un comportament (operatii) comun.
In plus, se poate spune ca fiecare obiect stie carei clase ii apartine, adica fiecare obiect contine
un pointer la clasa din care provine, deci are acces la toate caracteristicile clasei sale. Altfel
spus, obiectul mosteneste toate caracteristicile clasei din care face parte.
Pentru o descriere cat mai usoara a claselor si obiectelor se folosesc diverse diagrame de
reprezentare. Desi exista mai multe tipuri de diagrame de reprezentare, in continuare vom
folosi metoda OMT.
In fig.5.1. se prezinta notatiile pentru o clasa si pentru obiectele care apartin clasei. Se
observa ca poate exista si o instanta fara nume a clasei Persoana.

Fig.5.1. Clasa si obiecte


Un atribut reprezinta o caracteristica a unei clase. De exemplu, nume si varsta pot fi
considerate atribute ale clasei Persoana. Fiecare atribut are un tip si poate lua valori
compatibile cu tipul atributului. Pentru fiecare instanta a clasei putem avea diferite valori
pentru atribute. De exemplu, toate persoanele au atributul nume si varsta, iar, in particular,

persoana Mircea are numele Mircea si varsta 44, iar persoana Gabriela are numele
Gabriela si varsta 33.
In fig.5.2. se prezinta modul de specificare pe diagrame a atributelor si valorilor acestora.
Denumirea si tipul atributelor se specifica in diagrama clasei, iar pentru fiecare instanta se
specifica valorile particulare ale atributelor.

Fig.5.2. Atribute si valori


O operatie care face parte dintr-o clasa este o functie care se aplica obiectelor din acea
clasa. De exemplu, schimbat_domiciliu sau schimbat_telefon sunt operatii care se poat aplica
obiectelor de tip Persoana. Toate obiectele dintr-o clasa suporta aceleasi operatii (Mircea si
Gabriela pot sa-si schimbe domiciliul sau telefonul). Fiecare operatie are ca argument implicit
clasa din care face parte.
Aceeasi denumire de operatie poate apare in mai multe clase diferite, deoarece operatia
poate fi polimorfica. Implementarea concreta a unei operatii pentru o anumita clasa se
numeste metoda. Numarul si tipul argumentelor, impreuna cu tipul valorii returnate se
numeste signatura unei operatii. Atunci cand o operatie are implementate metode in mai
multe clase (este polimorfica) este foarte important ca acestea sa aiba aceeasi signatura.
In fig.5.3. se prezinta modul de reprezentare pe diagrame a operatiilor, cu signaturile lor.

Fig.5.3. Operatii
In fig.5.4. se prezinta reprezentarea generala a unei clase, cu atributele si operatiile ei.

Fig.5.4. Reprezentarea generala a unei clase


O legatura este o conexiune fizica sau conceptuala intre obiecte. De exemplu, Marea
Britanie are capitala la Londra este o legatura intre doua obiecte diferite.
Pe de alta parte, o legatura este o instanta a unei asocieri. O asociere descrie un grup de
legaturi cu aceeasi structura si aceeasi semantica. In exemplul anterior, are capitala este o
asociere intre clasa Tara si clasa Oras. O tara are o singura capitala, iar un oras, care este
capitala, corespunde unei singure tari. Aceasta legatura este unu la unu (fig.5.5.).

In limbajele de programare, asocierile sunt implementate adesea ca pointer-i de la un


obiect la celalalt. De exemplu, clasa Tara poate avea un atribut capitala, care sa puncteze
spre clasa Oras, iar clasa Oras poate avea un atribut se afla, care sa puncteze spre o tara.

Fig.5.5. Model de asociere si legatura unu la unu


Aceasta relatie nu este intotdeauna unu la unu. De exemplu, in fig.5.6. se prezinta relatia
scrie poezii intre un Poet si o Poezie. Aceasta relatie este unu la multi, pentru ca un poet
poate sa scrie mai multe poezii, dar o poezie are un singur autor.

Fig.5.6. Model de asociere si legatura unu la multi


Daca se utilizeaza relatia scrie articole intre clasa Autor si clasa Articol, atunci aceasta
relatie este multi la multi, pentru ca un autor poate scrie mai multe articole, iar un articol
poate sa aiba mai multi autori.
Asocierile sunt binare daca contin doua clase, tenare daca contin trei clase, etc.

Fig.5.7. Asociere ternara

In fig.5.7. se prezinta un exemplu de asociere ternara, si anume situatia in care studentii


pot sa aiba proiecte la mai multe discipline. Pentru fiecare instanta a asocierii trebuie
specificat studentul, proiectul si disciplina. Un student poate lucra la mai multe proiecte
pentru mai multe discipline in paralel, sau poate lucra la acelasi proiect pentru discipline
diferite.
Multiplicitatea precizeaza cate instante ale unei clase pot fi legate de o singura instanta a
unei alte clase. Multiplicitatea poate fi unu, caz in care linia de legatura nu se termina cu
nimic, sau multi, caz in care linia de legatura se termina cu un cerc negru, dar se poate preciza
in dreptul liniei numarul exact de instante care intervin in legatura (ca in fig.5.6.).
In fig.5.8. se prezinta un exemplu de multiplicitate zero sau unu (reprezentata printr-un
cerc gol) care modeleaza exemplul: pe un server poate sa existe sau nu o fereastra proiectata
sa indeplineasca rol de monitorizare a retelei.
Fig.5.8. Multiplicitate zero sau unu
La fel ca obiectele, si asocierilor pot avea atribute. Fig.5.9. modeleaza situatia in care un
utilizator are anumite drepturi atunci cand accesseaza o statie de lucru dintr-o retea. In acest
exemplu Drepturi este un atribut al asocierii Acceseaza.

Fig.5.9. Atributele unei asocieri


Exista cazuri in care este utila modelarea asocierii ca o clasa, fiecare legatura fiind o
instanta a clasei respective. In fig.5.10. se reia exemplul din fig.5.9., modeland atributul
Drepturi al legaturii Acceseaza prin clasa Autorizatie. Aceasta clasa are, pe langa atributul
Drepturi, si atributul Prioritate si in plus operatia Incepe sesiune de lucru, care contine
initializarile care se fac la inceperea sesiunii de lucru in retea.

Fig.5.10. Modelarea atributelor unei asocieri printr-o clasa


Noua clasa Autorizatie exista doar atunci cand exista si clasele Utilizator si Server, adica
nu este o clasa de sine statatoare, fiind dependenta de celelalte clase ale relatiei.
Un rol reprezinta capatul unei asocieri. O asociatie binara are doua capete, fiecare avand
cate un nume, care reprezinta un rol in cadrul aplicatiei. Numele unui rol identifica in mod
unic capatul respectiv al asocierii. In exemplul din fig.5.8, Monitorizare este rolul pe care il
joaca Fereastra fata de Server.
In general, obiectele din partea multi a unei asocieri nu sunt ordonate si pot fi considerate
ca o multime. Daca ordinea acesta este importanta se va specifica {ordered} in dreptul

asocierii. In fig.5.11. se modeleaza ferestrele de pe ecran. Acestea sunt ordonate, una dintre
ele fiind fereastra activa. Ordonarea este un caz particular de constrangere asupra asocierii.

Fig.5.11. O asociere multi la unu ordonata


O asociere calificata leaga doua clase de obiecte si un calificator. Calificatorul este un
atribut special care reduce efectul multiplicitatii unei asocieri. Daca avem o asociere de tip
unu la multi sau multi la unu, atunci folosirea unui calificator in partea multi identifica in mod
unic din multimea de obiecte acel obiect care se doreste.
In fig.5.12.a. se modeleaza relatia: un director poate contine zero sau mai multe fisiere,
dar un fisier se gaseste intr-un singur director. In fig.5.12.b. folosirea calificatorului
nume_fisier a redus asocierea unu la multi la o asociere unu la unu, deoarece un director si un
nume de fisier identifica unic un fisier.

Fig.5.12. Folosirea calificatorilor


Agregarea este o relatie speciala, de tip parte-intreg (part-whole) sau parte-din (apart-of), in care obiectele care reprezinta componentele unui intreg sunt asociate cu obiectul
care reprezinta intregul.
Agregarea este o asociere speciala, care are proprietatile:
tranzitivitate: daca A este o parte a lui B si B este o parte a lui C, atunci A este o
parte a lui C;
antisimetrica: daca A este o parte a lui B, atunci B nu este o parte a lui A.
In fig.5.13. se prezinta componentele unui Calculator: Unitatea sistem, Monitorul,
Tastatura si Mouse-ul. La randul ei, Unitatea sistem este compusa din Memorie si Unitate
centrala. Monitorul, Tastatura si Mouse-ul pot fi descrise si ele in termenii componentelor lor,
dar acest lucru nu mai are importanta in acest punct pentru exemplificare modelarii. In
general, agregarea depinde de gradul de detaliere al problemei.

Fig.5.13. Agregarea pe mai multe nivele

Generalizarea si mostenirea sunt folosite pentru transmiterea similaritatilor de la o clasa


la alta, pastrand totusi diferentele dintre acestea.
Generalizarea este relatia dintre o clasa de baza si una sau mai multe clase derivate.
Clasa care se rafineaza se numeste superclasa, iar fiecare versiune mai rafinata se numeste
subclasa. Atributele si operatiile comune sunt grupate in superclasa si se spune ca sunt
mostenite de subclase.
In fig.5.14. se prezinta clasele figurilor geometrice: clasa de baza (Figura), din care deriva
trei clase: clasa figurilor 0-dimensionale, cea a figurilor 1-dimensionale si cea a figurilor 2dimensionale. In clasa de baza sunt definite anumite atribute comune, cum ar fi: culoare,
pozitia centrului, grosimea de linie si stilul de linie. La fel si anumite operatii, cum ar fi:
deseneaza, muta, roteste. Aceste caracteristici vor fi mostenite de toate clasele derivate din
Figura.

Fig.5.14. Generalizare
Clasa 0-dimensional generalizeaza clasa Punct, care redefineste operatia Deseneaza.
Clasa 1-dimensional generalizeaza clasele Linie si Arc. De asemenea, isi defineste un nou
atribut, Orientare, si o noua operatie, Scaleaza. Fiecare dintre clasele Linie si Arc redefinesc
operatia Deseneaza.
Clasa 2-dimensional generalizeaza clasele Poligon si Elipsa. Adauga atributele Orientare
si Tip umplere, si operatiile, Scaleaza si Umple. Fiecare dintre clasele Linie si Arc redefinesc
operatiile Deseneaza si Roteste.
Nu se recomanda un nivel prea mare de rafinare. Un nivel de 2 sau 3 este rezonabil, dar
nivele de peste 10 devin prea mari si greu de urmarit.
Generalizarea este utila atat in modelarea conceptuala, cat si in implementare, datorita
avantajelor evidente pentru reutilizarea codului. Caracteristicile reutilizabile sunt grupate in
superclase, fiecare programator putand sa implementeze subclase proprii care adauga noi
caracteristici specifice aplicatiei.

O subclasa poate sa supraincarce anumite caracteristici ale superclasei, definind


caracteristici cu acelasi nume. In exemplul din fig.5.14., clasele Punct, Linie, Arc, Poligon si
Elipsa supaincarca operatia Deseneaza, definita in superclasa Figura. La supraincarcarea
operatiilor este obligatoriu sa se pastreze aceeasi signatura.
Se recomanda ca acele clase care au caracteristici comune sa fie grupate in acelasi modul.
5.2.2. Concepte avansate folosite in modelarea obiectelor
Agregarea este o forma speciala de asociere. Daca doua obiecte sunt puternic legate
printr-o relatie parte-intreg, atunci aceasta relatie este de agregare. Daca cele doua obiecte
sunt independente, atunci relatia este de asociere.
In fig.5.15. se prezinta diferenta dintre relatia de agregare, cum este intre o Carte si un
Capitol si intre un Capitol si un Paragraf, si relatia de asociere, cum este cea dintre un Autor si
o Carte.

Fig.2.15. Agregare si asociere


Agregarea nu este acelasi lucru ca si generalizarea. Agregarea se refera la partile
componente ale unui obiect. Generalizarea este legata de gradul de detaliere si rafinare a unei
probleme, si se refera la clase. Ambele se reprezinta sub forma de arbori: un arbore de
agregare este format din acele obiecte care sunt parti ale obiectului compus; un arbore de
generalizare este format din clasele care descriu acelasi obiect, dar la nivele de detaliere
diferite.
In fig.5.16. clasa Termen este o generalizare a claselor Expresie, Variabila si Constanta,
iar, la randul ei, clasa Expresie este formata recursiv din Termeni ca prim operand si din
Termeni ca operanzi secunzi.

Fig.5.16. Agregare si generalizare


Agregarea poate:
fixa, atunci cand are o structura fixa (ca in exemplul din fig.5.13, in care un
Calculator are o singura Tastatura, un singur Mouse etc);

variabila, atunci cand are un numar fix de nivele, dar numarul de parti pe fiecare
nivel poate sa varieze (ca in exemplul din fig.5.15, in care o Carte poate avea un
numar variabil de Capitole);
recursiva, atunci cand contine, direct sau indirect, o instanta a aceluiasi tip de
agregare. Numarul de nivele este nelimitat (ca in exemplul din fig.5.16, in care o
Expresie poate sa contina un numar nelimitat de Termeni, care la randul lor pot
insemna Expresii. Recursivitatea se incheie in momentul in care ultimul Termen al
Expresiei se inlocuieste printr-o Variabila sau o Constanta).

Se spune ca o clasa este abstracta daca nu are instante directe, dar descendentii clasei au
instante directe.
Se spune ca o clasa este concreta, daca are instante directe. O clasa concreta poate avea si
descendente abstracte. O clasa abstracta poate sa-si defineasca niste operatii, dar fara sa le
implementeze. Acestea se vor numi operatii abstracte.
In exemplul din fig.5.14. Figura este o clasa abstracta. Ea defineste operatia Deseneaza,
dar nu o poate implementa, pentru ca nu se cunoaste ce fel de figura sa se deseneze. De aceea,
Deseneaza este o operatie abstracta.
O instanta a unei clase este o instanta a tuturor stramosilor clasei, conform definitiei
mostenirii. O subclasa mosteneste toate atributele superclasei si cu eventualele valori
implicite. Subclasa poate, in schimb, sa mai adauge alte atribute particulare. Aceasta operatie
se numeste extensie.
In fig.5.14. clasa 1-dimensional extinde atributele clasei Figura, pe care le mosteneste, cu
atributul Orientare. Clasa Linie mai adauga atributul Punct final, mostenind atributul Pozitia
centrului, care va fi de fapt pozitia punctului initial.
O subclasa poate sa contina si restrictii, care sunt constrangeri asupra atributelor. De
exemplu, un cerc este o elipsa asupra careia se pune conditia ca ambele semiaxe sa fie egale.
O subclasa poate sa redefineasca si o operatie a unei superclase, aceasta numindu-se
redefinire (overriding). Redefinirea se poate face pentru urmatoarele motive:
Redefinire pentru extensie. Noua operatie este la fel ca cea mostenita, dar
adauga un comportament nou, care poate afecta atributele noi din subclasa. De
exemplu, o clasa Fereastra poate avea operatia Deseneaza. O clasa derivata
Fereastra cu titlu va apela Deseneaza pentru a se desena pe ecran si apoi isi va
desena in plus si titlul.
Redefinire pentru restrictie. Noua operatie restrange domeniul vechii operatii,
spre exemplu ingustand domeniul de valori pentru tipul argumentelor. De
exemplu, o clasa Multime poate avea operatia Adauga. O clasa derivata Multime
de intregi trebuie sa restrictioneze tipul argumentului lui Adauga la un intreg.
Redefinire pentru optimizare. O implementare poate sa tina seama de
constrangerile pe care le adauga subclasa unor atribute in scopul optimizarii
codului pentru operatia respectiva. Noua metoda poate sa aiba acelasi rezultat
extern ca si vechea metoda, dar cu alta implementare din punctul de vedere al
algoritmilor folositi. De exemplu, clasa Multime de intregi poate avea
implementat un algoritm de gasire a elementului maxim. Pentru o clasa Multime
sortata de intregi, acest algoritm devine banal.
Mostenirea multipla permite unei clase sa aiba mai mult decat o superclasa de la care sa
mosteneasca atribute si operatii. Acest lucru permite amestecul informatiei din mai multe
surse, dar complica descrierea problemei.

In fig.5.17., Hovercraft este atat un vehicul terestru, cat si un vehicul acvatic (se
deplaseaza atat pe uscat, cat si pe apa), deci mosteneste caracteristici de la doua clase. Vehicul
este o clasa abstracta.

Fig.5.17. Mostenire multipla


Metadatele sunt date care descriu alte date. De exemplu, definitia unei clase este o
metadata. Multe aplicatii din lumea reala sunt metadate: cataloagele, dictionarele etc.
Constrangerile sunt legaturi functionale intre entitati din cadrul unui model al obiectelor.
Termenul entitate inseamna obiect, clasa, atribut, legatura sau asociere. O constrangere
restrictioneaza valorile pe care le poate lua entitatea.
De exemplu, raportul dintre lungimea si latime unei ferestre trebuie sa respecte anumite
valori. Constrangerile se specifica la fel ca in fig.5.18., unde raportul intre lungime si latimea
unei ferestre trebuie sa fie intre 0.8 si 1.5. Constragerile constituie un bun criteriu de masurare
a calitatii modelului obiectelor, si anume, un model bun contine multe constrangeri in
structura sa.

Fig.5.18. Constrangeri
Constrangerile pot sa se exercite si asupra legaturilor. In acest caz, este restrictionata
multiplicitatea. Se reprezinta pe diagrame prin numere si eventual semnul plus alaturate
capetelor legaturii. De exemplu, in fig.5.6., un Poet, pentru a fi poet, trebuie sa scrie neaparat
o Poezie. El poate, insa, sa scrie mai multe Poezii.
Notatia {ordered} constituie tot o constrangere asupra unei legaturi. In fig.5.11.,
Ferestrele vizibile pe Ecran sunt intr-o anumita ordine, ele nu pot fi accesate la intamplare.
Alte notiuni folosite ca un fel de constrangeri sunt acelea de obiecte, legaturi sau atribute
derivate. Un obiect derivat este definit in termenii altor obiecte, care la randul lor pot fi
derivate. El este complet definit de celelalte obiecte, deci este redundant.
Daca, de exemplu, pentru o clasa Persoana (fig.5.20) avem atributele Data nasterii si
Varsta, atunci Varsta este un atribut derivat, deoarece poate fi dedus din Data nasterii si data
curenta. Atributele derivate se noteaza cu un / in fata numelui.

Fig.5.20. Atribute derivate


Ultima notiune importanta este aceea de homomorfism. Un homomorfism reprezinta o
mapare (o asociere, o functie) intre doua asociatii (fig.5.21.). De exemplu, se pot considera
produsele realizate de o anumita fabrica, avand un numar de serie. Aceste produse sunt
prezentate intr-un catalog, in care fiecarui produs concret ii corespunde un articol de catalog,
avand si acesta un numar de catalog. Intre aceste doua asociatii, denumite amandoua Contine,
exista un homomorfism, denumit Corespunde. Fiecare Articol de catalog Descrie cate un
Articol real.

Fig.5.21. Homomorfism al partilor unui catalog.


In general, un homorfism implica patru relatii intre patru clase, asa cum se arata in
fig.5.22. Homomorfismul mapeaza multi la unu legaturile unei asocieri generale, u, in legaturi
ale altei asocieri generale, t. Doua relatii de instantiere mapeaza elementele unei clase in
cealalta: r este o mapare multi la unu de la B la A, iar s este o mapare multi la unu de la D la
C. In cazul particular in care t si u sunt asocieri de la o clasa la ea insasi, A=C, B=D si r=s, ca
in fig.5.22.

Fig.5.22. Homomorfism general


5.3. Modelul dinamic
5.3.1. Concepte de baza
Modelul obiectelor unei aplicatii descrie obiectele ce intervin in problema si relatiile
statice intre acestea. Partea dinamica, dependenta de timp, a unei aplicatii este mai greu de
modelat. Modelul dinamic descrie starea in care se poate afla un obiect si tranzitiile sale in
alte stari, tranzitii cauzate de stimuli externi, numiti evenimente.
Starea unui obiect reprezinta multimea valorilor tuturor atributelor si legaturilor acestui
obiect. Starea unui obiect se modifica in timp, ca urmare a unor evenimente. Pentru fiecare
obiect, aceasta modificare este reflectata de diagrama diamica a obiectului respectiv.

Un eveniment este o modificare a contextului la un anumit moment de timp. Un


eveniment poate fi, de exemplu: utilizatorul apasa butonul stanga al mouse-ului.
Un eveniment poate sa fie conditionat de un altul, dar pot exista si evenimente succesiva
care nu sunt conditionate reciproc. De exemplu, utilizatorul face click pe un buton inainte de
a-l elibera. Aceste doua evenimente sunt conditionate unul de altul. Utilizatorul face click pe
un buton inainte sau dupa ce face click pe un alt buton. Aceste doua evenimente nu sunt
continionate unul de altul.
Se spune ca doua evenimente sunt concurente daca sunt evenimente neconditionte, pot sa
apara simultan si nu se pot influenta unul pe altul.
Un eveniment este o transmisie unidirectionala de informatie de la un obiect la altul.
Fiecare eveniment are o aparitie unica, dar se pot grupa diferite evenimente in clase de
evenimente. De exemplu, utilizatorul face click pe butonul1 si utilizatorul face click pe
butonul2 sunt amandoua evenimente din clasa utilizatorul face click pe un buton. Anumite
clase de evenimente pot avea atribute care sa descrie mai precis informatia continuta. De
exemplu, clasa utilizatorul face click pe un buton poate avea atributele: click stanga, click
dreapta, tip buton etc. De asemena momentul aparitiei este un atribut implicit important al
fiecarui eveniment.
Un scenariu este o secventa de evenimente care apar succesiv de-a lungul unei executii a
sistemului cu date de intrare particulare. In fig.5.23. se prezinta un asemenea scenariu pentru
automatul bancar (ATM sau bancomat), corespunzator obiectului Bancomat, pentru cazul in
care parola introdusa de Client este corecta, iar suma ceruta e admisibila.

Fig.5.23. Un scenariu pentru automatul bancar


Fiecare eveniment transmite informatie de la un obiect la altul. Transmiterea de informatii
poate fi reprezentat pe diagrama succesiunii de evenimente, ca cea din fig.5.24. In acesta
diagrama apar toate obiectele care intervin in problema (si anume: Bancomat, Banca si
Client).

Fig.5.24. Diagrama succesiunii evenimentelor pentru un automat bancar

O stare este o abstractizare a valorilor atributelor si legaturilor unui obiect. Intr-o stare
sunt grupate multimi de valori in functie de comportamentul global al obiectului. De exemplu,
starea unei banci poate fi solvabila sau insolvabila. O stare specifica raspunsul unui obiect la
un eveniment.
Astfel, un obiect ramane intr-o stare atata timp cat nu apar evenimente externe. De
exemplu, bancomatul este in stare Idle pana cand un client introduce o parola. Apoi trece in
starea Verifica parola. Cand clientul introduce o parola gresita, bancomatul trece din nou in
starea Idle. Trecerea dintr-o stare in alta, cauzata de un eveniment extern, se numeste
tranzitie.
O diagrama de stare leaga evenimentele de stari, pentru un singur obiect. Cand aceasta
receptioneaza un eveniment, starea sa urmatoare depinde atat de starea curenta cat si de
evenimentul receptionat.
O diagrama de stare este un graf ale carui noduri sunt starile si ale carui arce sunt
tranzitiile intre stari. Pe fiecare arc se scrie evenimentul care a cauzat tranzitia. Toate
tranzitiile din aceeasi stare trebuie sa corespunda unor evenimente diferite.
In fig.5.25. se prezinta starile si evenimentele bancomatului. Din starea Idle, la aparitia
unui eveniment constand in introducerea unei parole, bancomatul trece in starea Verificare
parola. Daca apare evenimentul parola incorecta, atunci bancomatul revine in starea Idle
asteptand o noua parola. Daca evenimentul este parola corecta, atunci bancomatul trece in
starea Introduce suma. Cu suma incorecta revine in Idle, iar cu suma corecta trece in starea
Actualizare cont, apoi Eliberare bani si, dupa ce clientul ia banii, revine in starea Idle.

Fig.5.25. Diagrama de stari pentru bancomat


Diagramele de stare pot reprezenta obiecte cu ciclu de viata finit sau infinit.
Diagrama pentru bancomat are un ciclu infinit, deoarece intotdeauna bancomatul se
intoarce in starea Idle, de unde poate sa inceapa un nou ciclu.
O diagrama pentru un obiect cu ciclu de viata finita are o stare de pornire, sau stare
initiala, si una de sosire, sau stare finala.
O diagrama de stare descrie comportamentul unei singure clase. Modelul dinamic este o
colectie de diagrame de stare, care interactioneaza unele cu altele prin evenimente partajate.
O conditie este o functie booleana cu parametrii obiecte. De exemplu, parola este corecta.
Conditiile pot fi folosite pentru a stabili momentul cand va avea loc o anumita tranzitie. O
tranzitie conditionata se executa doar atunci cand evenimentul si conditia corespunzatoare
sunt indeplinite. De exemplu, Cand utilizatorul face click pe un buton (evenimentul), daca
acel buton este butonul Exit (conditia), atunci se incheie executia programului (starea
urmatoare).

Conditiile se specifica pe diagrama printr-un text intre paranteze patrate, plasat dupa
numele evenimentului.
Diagrama din fig.5.25. poate fi refacuta folosind conditii si se obtine diagrama din
fig.5.26. Se observa ca s-a eliminat starea de verificare a parolei.

Fig.5.26. Diagrama de stari cu conditii.


Diagramele de stare trebuie sa specifice pe langa evenimente si raspunsul la acestea.
Raspunsul obiectelor este descris de operatii, care pot fi de doua feluri: activitati si actiuni.
O activitate este o operatie care are durata in timp. Ea este asociata unei stari si se
executa in starea respectiva. O activitate implica o operatie continua, ca de exemplu
mentinerea unei ferestre pe ecran. Reprezentarea unei activitati se face, in diagrama starii,
prin cuvantul-cheie do:, urmat de activitatea ce se realizeaza.
O actiune este o operatie instantanee. Ea este asociata cu un eveniment. Notatia pentru o
actiune este semnul / urmat de numele actiunii care succede evenimentului ce a produs-o.
In fig.5.27. se prezinta diagrama de stari pentru un meniu pop-up (meniu vertical care
devine activ doar la pasarea butonului dreapta al mouse-ului). Meniul are doua stari: Inactiv
(atunci cand e invizibil) si Activ (atunci cand e vizibil, iar optiunile sale pot fi selectate). Din
starea Inactiv, cu butonul dreapta al mouse-ului apasat in fereastra corecta, meniul apare pe
ecran, trecand in starea Activ. Atata timp cat cursorul este deplasat se evidenteaza articolul de
meniu corespunzator. Cand butonul din dreapta al mouse-ului este eliberat, meniul pop-up
este sters, devenind Inactiv. Se observa activitatea Mentine meniul pe ecran, care se realizeaza
pe toata durata starii Activ si actiunile care se realizeaza la aparitia evenimentelor.

Fig.5.27. Actiuni si activitati.

In fig.5.28. se prezinta pe scurt notatiile utilizate in acest paragraf pentru diagrame de


stare nestructurate.

Fig.5.28. Rezumatul notatiilor pentru diagrame de stari nestructurate


Diagramele de stari pot fi structurate pentru a permite sistemelor complexe. Modul in care
se pot stractura starile este asemanator cu modul in care se structureaza obiectele, si anume
prin generalizare si agregare. Generalizarea este echivalenta cu expandarea activitatilor
imbricate: o activitate este descrisa la un nivel inalt, dupa care este expandata la un nivel mai
scazut, adaugant detalii. Agregarea permite unei stari sa fie descompusa in stari ortogonale, cu
actiuni limitate intre ele.
In fig.5.29. se prezinta diagrama de stari la nivel inalt a unei masini de vandut bauturi
racoritoare.
Din starea Idle, in momentul in care un cumparator incepe sa introduca monede de o
anumita valoare, automatul trece in starea Colectare monede, in acelasi timp resetand la zero
valoarea sumei platite. Atata timp cat se colecteaza monede, automatul ramane in aceasta
stare, adaugand la suma platita valoarea monedelor introduse. Daca se selecteaza o bautura,
atunci automatul trece in starea in care testeaza felul bauturii si calculeaza restul. Daca felul
bauturii este vid, adica nu s-a selectat nimic, atunci se revine in starea Colectare monede, de
unde, cu o apasare pe un buton de Anulare, automatul revine in starea Idle, asteptand un nou
cumparator.

Fig.5.29. Diagrama globala a automatului de bauturi racoritoare


Daca, in starea in care se calculeaza restul, acesta este negativ, atunci se revine in starea
de Colectare monede, deoarece nu a fost introdusa toata suma ceruta. Daca restul eset zero,
atunci se elibereaza bautura, iar daca restul este pozitiv, se da restul cumparatorului si apoi se
elibereaza bautura. Dupa eliberarea bauturii se revine in starea Idle.
Starea in care se elibereaza o bautura este o stare mai generala, care se poate detalia in
substarile din fig.5.30.

Fig.5.30. Detalierea activitatii Elibereaza bautura


Pentru selectarea unei bauturi, automatul prezinta cumparatorului o seri de coduri(siruri
de cifre), fiecare cod corespunzand unui fel de bautura. Clientul va introduce codul bauturii
dorite, cifra cu cifra. In fig.5.31. Se prezinta tranzitia detaliata Selecteaza bautura.

Fig.5.21. Detalierea tranzitiei Selecteaza (bautura)


5.3.2. Concepte avansate
Actiunile nu sunt legate numai de tranzitia dintr-o stare in alta, ele pot fi realizate si la
intrarea sau iesirea dintr-o stare. Astfel de actiuni se realizeaza atunci cand toate tranzitiile
intr-o stare (sau dintr-o stare) realizeaza aceeasi actiune.
Actiunile de intrare si iesire dintr-o stare se reprezinta in diagrama starii dupa cuvintelecheie entry, respectiv exit, urmate de un /, dupa cum se poate vedea in fig.5.32.

Fig.5.32. Notatii evoluate pentru diagramele de stare


Un eveniment poate cauza o actiune fara ca starea obiectului in cauza sa se modifice.
Numele evenimentului este scris in interiorul diagramei starii, urmat de / si de actiunea
respectiva (fig.5.32.). Un exemplu de actiune interna se poate vedea in fig.5.29, in starea
Colectare monede, in care atata timp cat se introduce o anumita cantitate de bani, aceasta se
adauga la suma platita, bancomatul ramanand in starea Colectare monede.
Adesea, scopul unei stari este sa realizeze o activitate. Cand activitatea s-a incheiat,
obiectul trebuie sa treaca intr-o alta stare, far a raspunde unui eveniment exterior. Deci, exista
situatii cand tranzitia intr-o alta stare se realizeaza datorita unor situatii interne ale starii
curente. Acestea sunt tranzitiile automate, sau lambda-tranzitiile. Fiecare tranzitie poate fi
conditionata. Cand activitatea starii s-a terminat, iar conditia e valida, atunci se trece intr-o
alta stare.
De exemplu, in fig.5.29. trecerea din starea in care se Elibereaza bautura racoritoare in
starea Idle se face atunci cand s-a terminat activitatea de Eliberare a bauturii.
In concluzie, modelul dinamic specifica secvente permise de transformari ale obiectelor
din modelul obiectelor. O diagrama de stare descrie toata sau o parte din comportarea unui
obiect al unei clase date. Starile sunt clase de echivalenta ale valorilor atributelor si
legaturilor unui obiect. Evenimentele pot fi reprezentate ca operatii in modelul obiectelor.
Modelul dinamic al unei clase este mostenit de subclasele sale, acestea mostenind atat starile,
cat si tranzitiile superclasei.

5.4. Modelul functional


5.4.1. Rolul modelului functional
Modelul functional arata ce se intampla in sistem, mai exact descrie calculele care au loc
in cadrul sistemului. Modelul functional descrie cum se calculeaza valorile de iesire din
cadrul unui sistem in functie de valorile de intrare, independent de timp. Modelul functional
contine diagrame de flux de date (data flow diagrams.)
Modelul functional precizeaza intelesul operatiilor din modelul obiectelor, al actiunilor
si activitatilor din modelul dinamic si al constrangerilor din modelul obiectelor.
Intotdeauna modelul de baza este modelul obiectelor si, in plus, in functie de tipul
sistemului, predomina fie modelul dinamic, fie modelul functional. In continuare se prezinta
cateva exemple de sisteme, cu modelele corespunzatoare:
Compilatoarele, care sunt sisteme neinteractive, au un model dinamic foarte
simplu, scopul lor fiind doar cel de a genera codul obiect. Ele functioneaza in
acelasi fel de fiecare data cand au de compilat un program sursa. Pentru aceste
sisteme, de baza este modelul functional (modul in care genereaza codul obiect).
Bazele de date au un model functional foarte simplu; ele nu realizeaza calcule
complexe, ci doar stocheaza datele. Scopul lor este inmagazinarea si organizarea
datelor, si nu transformarea lor, dec modelul functional are putina importanta.
Spreadsheet-urile se bazeaza pe modele functionale. In general, valorile dintr-un
spreadsheet (foaie de calcul) sunt elementare, singurele obiecte interesante fiind
celulele.
O aplicatie de calcul numeric are un model functional foarte complicat cu multe
restrictii si constrangeri. Modelul obiectelor este foarte simplu, pentru ca se
lucreaza cu scalari reali, cu vectori sau cu matrici. Foarte importanti in acest caz
sunt algoritmii folositi.
5.4.2. Diagrame de flux de date
Diagramele de flux de date specifica operatiile si constrangerile din modelul functional. O
diagrama de flux de date este un graf care arata sensul de transfomare a datelor si procesele
care le transforma. Intr-o diagrama se poate include si fluxul de control, care arata daca
anumite procese se executa sau nu, in functie de alte valori calculate. Partea de control, insa,
este inclusa in diagramele dinamice. O diagrama de flux de date contine procese (care
transforma datele), fluxuri de date (care muta datele de la un proces la altul), actori (care
produc sau consuma date) si structuri de memorare a datelor (care inmagazineaza pasiv
niste date).

Fig.5.33. Diagrama de flux de date pentru afisarea icon-urilor pe ecran

In fig.5.33. se prezinta o diagrama de flux de date pentru afisarea unor icon-uri intr-o
fereastra. Sistemul de afisare a unui icon intr-o anumita fereastra primeste de la o sursa
oarecare numele icon-ului, precum si pozitia in care va fi afisat.
Pe baza numelui, icon-ul este cautat intr-un vector de icon-uri. Pe baza definitiei acestuia,
gasita in vector, si a pozitiei se calculeaza vectorul pozitiei icon-ului. Acesta, conform
marimii si pozitiei ferestrei de desenare, este decupat si translatat, astfel incat sa incapa in
fereastra. Vectorul, devenit un vector de coordonate logice, este convertit in pixeli
(coordonate fizice) si trimis in memoria ecran, pentru afisare.
Un proces transforma datele. Procesele pot fi:
fara efecte laterale; acestea sunt functii pure, care realizeaza doar calcule. De
exemplu, o functie care calculeaza radacinile unei ecuatii de gradul doi.
cu efecte laterale; acestea contin componente nefunctionale, cum sunt structurile
de memorare a datelor sau a obiectelor externe. De exemplu, citirea sau scrierea
unui fisier, recunoasterea vorbirii.
Un proces se reprezinta printr-o elipsa cu numele procesului in interior. Fiecare proces are
un numar fix de intrari si de iesiri. In fig.5.34.a. se prezinta procesul Rezolvare ecuatie de
gradul 2, care primeste la intrare coeficientii A, B si C ai ecuatiei de gradul doi si calculeaza
radacinile X1 si X2. In fig.5.34.b. se prezinta procesul Afisare icon, care primeste numele si
pozitia icon-ului si executa la iesire operatii cu pixeli.

Fig.5.34. Exemple de procese


Un flux de date conecteaza iesirea unui obiect sau proces cu intrarea altui obiect sau
proces. Altfel spus, reprezinta o valoarea intermediara dintr-un calcul.
Un flux de date se reprezinta ca o sageata de la producator la consumator. Cateodata o
valoarea poate fi descompusa in componentele sale de baza, care se trimit la procese diferite.
In fig.5.35. adresa este descompusa in tara, oras, cod postal, strada, bloc.

Fig.5.35. Descompunere unui flux


Un actor (numit si terminator) este un obiect activ, care genereaza sau consuma date. De
exemplu, un utilizator care introduce date. Actorii se deseneaza ca dreptunghiuri. In fig.5.33.,
Fereastra si Memorie ecran sunt actori.
O structura de memorare a datelor este un obiect pasiv din cadrul unei diagrame de
flux de date, care doar inmagazineaza datele pentru o utilizare ulterioara. De exemplu,
vectorii, listele, tabelele etc.
O structura de memorare a datelor raspunde la cereri de depozitare, respectiv de accesare
de date. O structura de memorare a datelor se reprezinta ca o pereche de linii paralele.

Definitiile icon-urilor pot fi o structura de memorare a datelor (poate fi un vector sau o lista)
care contine descrierile tuturor icon-urilor existente. In fig.5.36. pentru un element dat,
procesul Gaseste masa cauta in Tabelul periodic, care este o structura de memorare a datelor,
pentru a gasi masele elementelor si returna masa elementului considerat.

Fig.5.36. Structuri de memorare a datelor


O diagrama de flux de date este utila pentru a arata functionalitatea la nivel inalt a unui
sistem si descompunerea acestuia in subsisteme. Un proces poate fi expandat in alte diagrame
de flux de date. Fiecare intrare si iesire a noului proces este intrare sau iesire in noua
diagrama. De exemplu, procesul general Afisare icon, din fig.5.34.b. este detaliat intr-o alta
diagrama de flux de date in fig.5.33.
O diagrama de flux de date arata toate caile posibile de calcul pentru valori, dar nu arata
ordinea de executie a lor si nici momentul in care se executa o anumita cale.
De aceea, pe o diagrama se pot introduce fluxuri de control. Un flux de control este o
variabila booleana care afecteaza executia unui proces.
In fig.5.37. se prezinta exemplul bancomatului, pe baza fluxurilor de control. Procesul
Actualizeaza (contul) nu se realizeaza decat daca fluxul de control Parola e corecta este
adevarat. Diagrama nu precizeaza, insa, ce se intampla daca parola nu este corecta.

Fig.5.37. Fluxuri de control


5.4.3. Specificarea operatiilor
Procesele din diagrama fluxului de date vor fi implementate ca operatii ale obiectelor
considerate in modelul obiectelor. Fiecare operatie poate fi descrisa in mai multe feluri, si
anume:
ca functie matematica;
ca o tabela de valori de intrare si iesire (in cazul unor multimi finite si mici);
ca o ecuatie care specifica iesirile in raport cu intrarile;
ca pre si postconditii (definitii axiomatice);
in pseudocod;
in limbaj natural.

Specificarea unei operatii include o signatura si o transformare. Signatura defineste


interfata cu utilizatorul: numarul, ordinea si tipul parametrilor de intrare, precum si numarul,
ordinea si tipul valorilor returnate. Signatura tuturor metodelor care implementeaza o operatie
trebuie sa corespunda cu signatura operatiei. Fiecare operatie are un parametru implicit si
acesta reprezinta chiar o referinta la clasa care contine operatia.
Transformarea defineste efectul operatiei, altfel spus ce face operatia. Pentru o operatie
se definesc niste specificatii externe, dar in timpul implementarii vor aparea si multe variabile
interne locale. Starea unui obiect trebuie impartita in informatii vizibile din exterior si
informatii care sunt specifice si proprii obiectului respectiv. Aceste informatii proprii nu
trebuie sa fi vizibile si nici accesibile din exterior.
De aceea, majoritatea limbajelor orientate spre obiecte fac distinctie intre atributele si
operatiile publice si cele private.
Operatiile triviale sunt operatiile de acces, care doar citesc sau scriu valori de atribute
sau legaturi. Acestea sunt evidente in partea de analiza. In timpul proiectarii va trebui
specificat care dintre acestea vor fi publice si care private. Pentru incapsularea datelor se
restrictioneaza accesul la anumite atribute.
Operatiile netriviale sunt mai complicate si pot fi impartite in trei categorii, si anume:
interogari, actiuni si activitati.
Interogarile sunt functii pure, care doar calculeaza valori si nu afecteaza starile vizibile
ale unui obiect. O interogare fara parametrii este de fapt un atribut derivat. De exemplu, daca
un punct este specificat in coordonate carteziene, atunci coordonatele polare sunt atribute
derivate. Se poate scrie o functie care le calculeaza, functie care este de fapt o interogare.
O actiune este o transformare care afecteaza obiectul sursa sau alte obiecte accesibile, dar
fara durata in timp. Este o operatie instantanee din punct de vedere logic. O actiune poate fi,
de exemplu, scalarea dimensiunilor unei ferestre cu un anumit factor.
O actiune poate fi descrisa in limbaj natural, pseudocod sau chiar intr-un limbaj de
programare, dar este recomandabil sa se respecte sablonul din fig.5.38.

Fig.5.38. Descrierea unei actiuni


O activitate este o operatie care are durata in timp, spre deosebire de interogari si actiuni,
care sunt instantanee. Activitatile afecteaza obiectele si au sens pentru actori obiecte care
genereaza operatii.
5.4.4. Constrangeri
O constrangere arata fie relatiile intre doua obiecte la acelasi moment de timp (de
exemplu, frecventa si lungimea de unda), fie intre valori ale aceluiasi obiect la momente de
timp diferite.
O constrangere intre doua valori poate fi exprimata ca o functie totala, adica o valoarea
este complet specificata de cealalta, sau ca o functie partiala, adica o valoarea este
restrictionata, dar nu complet specificata de cealalta.

De exemplu, o transformare de coordonate care specifica faptul ca factorul de scalare pe


abscisa trebuie sa fie egal cu factorul de scalare pe ordonata este o constrangere totala. Legea
a doua a termodinamicii, care spune ca entropia Universului nu poate sa descreasca, este o
constrangere partiala.
Constrangerile pot fi asupra obiectelor, aratand dependenta totala sau partiala intre
obiecte; pot fi asupra starilor din modelul dinamic sau pot specifica restrictii asupra obiectelor
din modelul functional.
O constrangere intre valorile unui obiect de-a lungul timpului se numeste invariant.
5.4.5. Legatura intre cele trei modele functionale
Modelul functional arata ce face sistemul. Modelul obiectelor arata cine face. Modelul
dinamic prezinta succesiunea in timp a operatiilor.
Modelul functional este un ghid al metodelor: procesele din modelul functional corespund
operatiilor din modelul obiectelor.
Procesele sunt implementate ca metode. In general, una dintre intrarile unui proces
provine de la un obiect tinta, restul fiind parametrii ai operatiei. Obiectul tinta este denumit
clientul celorlalte obiecte, numite furnizori. Obiectul tinta foloseste furnizarii ca parametrii
in calculul operatiei respective. Clientul isi cunoaste intotdeauna furnizorii, dar acestia nu
trebuie sa cunoasca neaparat clientul.
Actorii sunt obiecte explicite din modelul obiectelor, care produc date. Modelul
functional nu ii poate descrie complet, fiind nevoie si de modelul dinamic. Fluxurile care intra
sau ies dintr-un actor corespund operatiilor.
Structurile de memorare a datelor sunt obiecte sau atribute. Fiecare flux de intrare intro structura de memorare a datelor este o operatie de actualizare. Fiecare flux de iesire este o
interogare, care nu afecteaza structura.
Fluxurile de date sunt valori din modelul obiectelor.
Din acestea se desprind urmatoarele concluzii:
Relativ la modelul functional. Modelul obiectelor arata structura actorilor, a
zonelor de memorare a datelor si a fluxurilor de date. Modelul dinamic arata
succesiune operatiilor.
Relativ la modelul obiectelor. Modelul functional arata operatiile claselor si
argumentele acestora. Modelul dinamic arata starile claselor, respectiv schimbarea
acestora, precum si operatiile care se executa la primirea cate unui eveniment.
Relativ la modelul dinamic. Modelul functional descrie activitatile si actiunile.
Modelul obiectelor arata cine isi schimba starile, respectiv cine realizeaza
operatiile.