Sunteți pe pagina 1din 6

De ce UML?

Reprezentarea UML a claselor.


Mihai Gabroveanu

este un standard deschis n surprinde ntreg ciclul de via#% al dezvolt%rii software-ului n acoper% multe tipuri de aplica(ii
n

Reprezentarea UML a claselor

Ce este UML?
UML acronim pentru Unified Modeling Language n Este un limbaj vizual de modelare utilizat pentru specificarea, construirea i documentarea sistemelor de aplica#ii orientate obiect i nu numai.
n

Diagrame UML
n

O diagrama este o prezentare grafic% ale unui set de elemente, cel mai adesea exprimate ca un graf de noduri (elementele) si arce (relatiile). Tipuri de diagrame UML

Diagrame ale Cazurilor de Utilizare (Use Case) Diagrame de clase Diagrame de obiecte Diagrame de secven # Diagrame de stare Diagrame de colaborare Diagrame de activitate

Reprezentarea UML a claselor

Reprezentarea UML a claselor

Diagramele de Clase
n

Specificarea Atributelor
n

Diagramele de clase sunt folosite n modelarea orientat% obiect pentru a descrie structura static% a sistemului, modului n care este el structurat. Ofer% o nota#ie grafic% pentru reprezentarea: claselor - entit%#i ce au caracteristici comune rela&iilor - rela(iile dintre dou% sau mai multe clase

Sintaxa specific%rii atributelor din compartimentul atributelor este urmatoarea:


vizibilitate idAtribut : tip = valoare_implicitia

unde:

vizibilitate reprezint% protec(ia atributului )i poate s% aib% una din urm%toarele valori
+ = public, - = privat si # = protected (optional)

idAtribut este identificatorul atributului tip este tipul acestuia valoare_implicita reprezint% valoarea ini(ial% a atributului (optional%)

Reprezentarea UML a claselor

Reprezentarea UML a claselor

Reprezentarea unei clase


IdClasa
vizibilitate idAtribut vizibilitate idAtribut: tip vizibilitate idAtribut: tip=valoare_implicita vizibilitate idMetoda vizibilitate idMetoda(lista_param):tip_returnat

Specificarea Metodelor
n

Numele clasei

Atributele clasei (op(ional)

Sintaxa specificarii metodelor sau operatiilor din compartimentul metodelor este urmatoarea:
vizibilitate idMetoda(idP1:tip1, ..., idPn:tipn) : tip_returnat

Metodele clasei (op(ional)

sau IdClasa

unde: vizibilitate reprezint% protec(ia metodei. Poate s% aib% una din urm%toarele valori + = public, - = privat si # = protected (optional) idMetoda este identificatorul metodei idP1,..., idPn sunt parametri metodei tip1, ..., tipn sunt tipurile parametrilor tip_returant reprezint% tipul valorii returnate de metod%
6 Reprezentarea UML a claselor 8

Reprezentarea UML a claselor

Rela(iile
n

Toate rela#iile din cadrul diagramei de clase sunt reprezentate grafic printr-o succesiune de segmente orizontale sau verticale care leag% o clas% de alta. Rela iile pot fi:

Reutilizarea Codului

asocieri generalizari dependen#e rela#ii de rafinare.

Asocierea este o conexiune ntre clase, ceea ce nseamn% o leg%tur% semantic% ntre obiectele claselor implicate n rela#ie.

Reprezentarea UML a claselor

Diagrame de Clase. Exemplu


Carte
-titlu: char[100] -autor: char[100] -anAparitie: int

Reutilizarea Codului
n

+Carte(titlu: char*="", autor: char *="", anAparitie:int=2011) +afisare(): void +getTitlu(): char* +setTitlu(titlu: char):void

class Carte{ private: char titlu[100]; char autor[100]; int anAparitie; public: Carte(char *titlu="", char *autor="", int an=2011); void afisare(); char* getTitlu(); void setTitlu(char *titlu); };

n programarea orientat% obiect reutilizarea codului se poate realiza prin:


(Agregare) includerea de obiecte n cadrul altor obiecte Mo tenire posibilitatea de a defini o clas% extinznd o alt% clas% deja existent% Clase i func#ii template
Compunere

Reprezentarea UML a claselor

10

Reprezentarea UML a claselor

12

Agregarea
n

Agregare.Constructori(II)
n

Agregare = Definirea unei noi clase ce include una sau mai multe date membre care au ca tip clase deja definite. n Ne permite construirea de clase complexe pornind de la clase mai simple

Apelul constructorilor claselor C1, , Cn se poate face:

explicit la definirea constructorului clasei A class A{ C1 c1; Cn cn; A(lista de parametri); }; A::A(lista de parametri):c1(sub_lista_param1), . . ., cn(sub_lista_param1){ instructiuni } automat de c#tre compilator n acest caz se apelez% constructorul implicit al acelor clase

Reprezentarea UML a claselor

13

Reprezentarea UML a claselor

15

Agregare.Constructori (I)
n

Tipuri de agregare
n

Dac% o clas% A con(ine ca date membru obiecte ale altor clase (C1, , Cn) atunci constructorul clasei A va avea suficienti parametri pentru a ini#ializa datele membru ale claselor C1,, Cn. La crearea unui obiect al clasei A se vor apela mai nti constructori claselor C1, ,Cn pentru a se initializa obiectele incluse n obiectul clasei A )i apoi se vor executa intruc(iunile constructorului clasei A.

Exist% dou% variante de agregare diferen(iate de rela(ia dintre agregat )i subobiecte


Compozi&ia

subobiectele agregate apar(in exclusiv agregatului din care fac parte, iar durata de via(% coincide cu cea a agregatului Agregarea propriu-zis# - subobiectele au o existen(% independent% de agregatele ce le partajaz%. Mai mult, un obiect poate fi partajat de mai multe agregate.
Reprezentarea UML a claselor 16

Reprezentarea UML a claselor

14

Agregare.Destructori
n

Exemplu
Consider%m urm%torul enun(: Un parc auto este format dintr-o mul&ime de ma'ini. Pentru fiecare ma in" din parc se cunosc urm#toarele detalii: num#rul de nmatriculare, marca, seria motorului 'i tipul de caburant utilizat de acesta. n S% se modeleze utiliznd diagrame UML.
n
17 Reprezentarea UML a claselor 19

La distrugerea unui obiect al clasei A se va executa mai destructorul clasei A apoi se vor apela destructori claselor C1, ,Cn n ordinea inversa apelurilor constructorilor.

Reprezentarea UML a claselor

Agregarea. Reprezentare UML


n

Diagrama UML
ParcAuto -n:int Masina -numar:char [20] 0..* este compus din -marca:char [20] Motor -seria:char [20] 1 are 1 -carburant:Carburant

Compozitia
ClasaCeAgrega ClasaAgregata
-masini:Masina * +ParcAuto(n:int,masini:Masina []) -motor:Motor +afisare():void
Agregare

+Motor(seria:char *,carburant:Carburant +Masina(numar:char *,marca:char *,seria:char *,carburant:Carburant +setSeria(seria:char *):void +setNumar(numar:char *):void +getSeria():char * Compozitie +getNumar():char *

Agregarea propriu-zis%
ClasaCeAgrega ClasaAgregata

+setCarburant(carburant:Carburant):void +setMarca(marca:char *):void +getCarburant():Carburant +getMarca():char * +afisare():void +afisare():void

Reprezentarea UML a claselor

18

Reprezentarea UML a claselor

20

Clasa Motor
enum Carburant { benzina=0, motorina}; void Motor::setSeria(char *seria){ strcpy(this -> seria, seria); } char* Motor::getSeria(){ return seria; } Carburant Motor::getCarburant(){ return carburant; } void Motor::setCarburant(Carburant carburant){ this -> carburant = carburant; } void Motor::afisare(){ cout<<"Serie Motor:"<<seria<<endl; cout<<"Tip Combustibil:" << ((carburant==motorina)?"motorina":"benzina"); cout<<endl; } class Motor { private: char seria[20]; Carburant carburant; public: Motor(char *seria, Carburant carburant); void setSeria(char *seria); char* getSeria(); void setCarburant(Carburant carburant); Carburant getCarburant(); void afisare(); }; Motor::Motor(char *seria, Carburant carburant){ setSeria(seria); setCarburant(carburant); }

Clasa ParcAuto
class ParcAuto{ int n; Masina *masini; public: ParcAuto(int n, Masina masini[]); void afisare(); }; ParcAuto::ParcAuto(int n, Masina masini[]){ this->n = n; this -> masini = new Masina[n]; for(int i=0;i<n;i++) this->masini[i] = masini[i]; } void ParcAuto::afisare(){ for(int i=0;i<n;i++) masini[i].afisare(); } int main(){ Masina m[] ={Masina("DJ-01-UCV","Audi", "1234", motorina), Masina("DJ-02-UCV","Logan", "2121", benzina)}; ParcAuto parc(2,m); parc.afisare(); getch(); }

Reprezentarea UML a claselor

21

Reprezentarea UML a claselor

23

Clasa Masina
class Masina{ private: char numar[20]; char marca[20]; Motor motor; public: Masina(char *numar="", char *marca="", char *seria="", Carburant carburant=benzina); void setNumar(char *numar); char* getNumar(); void setMarca(char *marca); char* getMarca(); void afisare(); }; Masina::Masina(char *numar, char *marca, char *seria, Carburant carburant):motor(seria, carburant ){ setNumar(numar); setMarca(marca); } void Masina::setNumar(char *numar){ strcpy(this->numar, numar); } char* Masina::getNumar(){ return numar; } void Masina::setMarca(char *marca){ strcpy(this->marca,marca); } char* Masina::getMarca(){ return marca; } void Masina::afisare(){ cout<<"Numar:"<<numar<<endl; cout<<"Marca:"<<marca<<endl; motor.afisare(); }

Reprezentarea UML a claselor

22

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