Beruflich Dokumente
Kultur Dokumente
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.3. Operatii
In fig.5.4. se prezinta reprezentarea generala a unei clase, cu atributele si operatiile ei.
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.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.
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.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.
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.
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.
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.
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.