17.04.2013 Views

Introducere în UML

Introducere în UML

Introducere în UML

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Introducere</strong> in <strong>UML</strong> 1<br />

1. Aparitie si evolutie<br />

<strong>Introducere</strong> <strong>în</strong> <strong>UML</strong><br />

<strong>UML</strong> este un limbaj vizual de modelare, el nu este <strong>în</strong>că un limbaj vizual de programare,<br />

deoarece nu dispune de <strong>în</strong>treg sprijinul semantic şi vizual pentru a <strong>în</strong>locui limbajele de<br />

programare. Limbajul este destinat vizualizării, specificării, construirii şi documentării<br />

sistemelor de aplicaţii, dar are limitări <strong>în</strong> ceea ce priveşte generarea codului. <strong>UML</strong> reuneşte<br />

cele mai bune tehnici şi practici din domeniul ingineriei programării, care şi-au dovedit<br />

eficienţa <strong>în</strong> construirea sistemelor complexe.<br />

Câteva date semnificative referitoare la apariţie şi evoluţie:<br />

În octombrie 1994, Grady Booch lider stiinţific la Rational Corporation, autor<br />

al metodei ce-i poartă numele şi a unor cărţi de referintă <strong>în</strong> domeniu face echipă<br />

cu James Rumbaugh, autorul principal al metodei OMT, pe care-l determină să-si<br />

părăsească (cel puţin temporar) vechiul loc de muncă (General Electric) şi să<br />

treacă la firma Rational. După un an de activitate Booch şi Rumbaugh, prezintă <strong>în</strong><br />

octombrie 1995 cu ocazia conferinţei OOPSLA, caracteristicile de bază ale unei<br />

noi metode de analiză şi proiectare, rezultată prin unificarea Metodei lui Booch<br />

(OOD) cu OMT, metodă denumită Metoda unificată (Unified Method). Prima<br />

documentaţie a metodei menţionată anterior a fost făcută publică <strong>în</strong> decembrie<br />

1995, având numărul de versiune 0.8. La sfârsitul aceluiaşi an celor doi li se<br />

alatură şi Ivar Jacobson.<br />

In iunie 1996 apare versiunea 0.9, urmată la scurt timp, octombrie 1996, de<br />

apariţia versiunii 0.91. Versiunea 0.9 aduce şi schimbarea denumirii din Metoda<br />

unificată (Unified Method) <strong>în</strong> Limbajul unificat de modelare (Unified Modeling<br />

Language). Cooptarea lui Jacobson <strong>în</strong> echipă se concretizează printre altele <strong>în</strong><br />

detalierea conceptului de cazuri de utilizare (use case) şi prezentarea unei descrieri<br />

mai amănunţite pentru diagramele cazurilor de utilizare. Conceptul de stereotip<br />

este mai bine explicitat, se modifică denumirile unor diagrame.<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com


<strong>Introducere</strong> in <strong>UML</strong> 2<br />

La 11 ianuarie 1997 este prezentată versiunea 1.0 care, <strong>în</strong>soţită de o<br />

documentaţie mult mai detaliată decât versiunile precedente, este trimisă către<br />

OMG pentru standardizare.<br />

1 septembrie 1997, a reprezentat un alt moment deosebit de important.<br />

Rational şi alte firme care spijina <strong>UML</strong>, printre care şi doi fosti competitori,<br />

IBM/ObjectTime şi Taskon/Reich, a propus OMG o nouă versiune 1.1. Noutatea<br />

semnificativă pentru această versiune o reprezintă introducerea limbajului OCL,<br />

un limbaj folosit pentru descrierea regulilor de corectitudine ale metamodelului<br />

<strong>UML</strong>.<br />

La 17 noiembrie 1997, OMG a anuntat adoptarea specificaţiei <strong>UML</strong> ca limbaj<br />

standard de modelare<br />

Schimbarea denumirii din Metoda Unificată <strong>în</strong> Limbaj de Modelare Unificat a fost<br />

justificată prin:<br />

reacţiile primite din partea utilizatorilor care au sugerat că este mult mai<br />

important să se acorde o atenţie sporită conceptelor utilizate <strong>în</strong> dezvoltarea<br />

aplicaţiilor. Recomandările referitoare la desfăşurarea etapelor de realizare şi<br />

<strong>în</strong>lăntuirea lor au fost lăsate <strong>în</strong> planul secund,<br />

faptul că eforturile de unificare au fost concentrate asupra limbajului grafic de<br />

modelare, asupra semanticii lui şi abia după aceea asupra modului de utilizare a<br />

conceptelor,<br />

<strong>UML</strong> a fost conceput ca un limbaj universal care să fie utilizat la modelarea<br />

sistemelor (indiferent de tipul şi scopul pentru care au fost construite), la fel cum<br />

limbajele de programare sunt folosite <strong>în</strong> diverse domenii.<br />

Sublinierea aspectelor de limbaj nu semnifică nicidecum ignorarea modului de folosire<br />

a lor. <strong>UML</strong> presupune că metodologia este “ghidată” de cazurile de utilizare, că ea se bazează<br />

pe arhitectura sistemului, iar procesul de aplicare a metodologiei este iterativ şi incremental.<br />

Detaliile acestui proces trebuie adaptate la domeniul aplicaţiei, la modul de organizare al<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com


<strong>Introducere</strong> in <strong>UML</strong> 3<br />

echipei de realizatori, la experienţa echipei. <strong>UML</strong> nu tratează aspecte de metodologie,<br />

permitând astfel separarea limbajului de modelare de procesul aplicării metodologiei.<br />

2. Principalele părţi ale <strong>UML</strong><br />

Principalele parti ale <strong>UML</strong> sunt:<br />

Vederile (View) – surprind aspecte particulare ale sistemului de modelat. Un<br />

view este o abstractizare a sistemului, iar pentru construirea lui se folosesc un număr<br />

de diagrame.<br />

Diagramele – sunt grafuri care descriu conţinutul unui view. <strong>UML</strong> are nouă<br />

tipuri de diagrame, care pot fi combinate pentru a forma toate view-urile sistemului.<br />

Elementele de modelare – sunt conceptele folosite <strong>în</strong> diagrame care au<br />

corespondenţă <strong>în</strong> programarea orientată-obiect, cum ar fi: clase, obiecte, mesaje şi<br />

relaţii <strong>în</strong>tre acestea: asocierea, dependenţa, generalizarea. Un element de modelare<br />

poate fi folosit <strong>în</strong> mai multe diagrame diferite şi va avea acelaşi <strong>în</strong>teles şi acelaşi mod<br />

de reprezentare.<br />

Mecanismele generale – permit introducerea de comentarii şi alte informaţii<br />

despre un anumit element.<br />

2.1 View-uri<br />

Modelarea unui sistem poate fi o muncă foarte dificilă. Ideal ar fi ca pentru descrierea<br />

sistemului să se folosească un singur graf, <strong>în</strong>să de cele mai multe ori acesta nu poate să<br />

surprindă toate informaţiile necesare descrierii sistemului. Un sistem poate fi descris luând <strong>în</strong><br />

considerare diferite aspecte:<br />

Funcţional: este descrisă structura statică şi comportamentul dinamic al<br />

sistemului;<br />

cod;<br />

Non-funcţional: necesarul de timp pentru dezvoltarea sistemului<br />

Din punct de vedere organizatoric: organizarea lucrului, maparea modulelor de<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com


<strong>Introducere</strong> in <strong>UML</strong> 4<br />

Aşadar pentru descrierea unui sistem sunt necesare un număr de view-uri, fiecare<br />

reprezentând o proiecţie a descrierii intregului sistem şi care reflectă un anumuit aspect al sau.<br />

Fiecare view este descris folosind un număr de diagrame care conţin informaţii relative<br />

la un anumit aspect particular al sistemului. Aceste view-uri se acoperă unele pe altele, deci<br />

este posibil ca o anumită diagramă să facă parte din mai multe view-uri.<br />

Figura 1: View-urile din <strong>UML</strong><br />

View-ul cazurilor de utilizare (Use-case View)<br />

Acest view surprinde funcţionalitatea sistemului, aşa cum este ea percepută de actorii<br />

externi care interacţionează cu sistemul, de exemplu utilizatorii acestuia sau alte sisteme. În<br />

componenţa lui intră diagrame ale cazurilor de utilizare şi ocazional, diagrame de activitate.<br />

Cei interesaţi de acest view sunt deopotrivă clienţii, designerii, dezvoltatorii dar şi cei<br />

care vor realiza testarea şi validarea sistemului.<br />

View-ul logic (Logic View)<br />

Spre deosebire de view-ul cazurilor de utilizare, un view logic “priveşte” <strong>în</strong>ăuntrul<br />

sistemului şi descrie atât structura internă a acestuia (clase, obiecte şi relaţii) cât şi<br />

colaborările care apar când obiectele trimit unul altuia mesaje pentru a realiza funcţionalitatea<br />

dorită.<br />

Structura statică este descrisă <strong>în</strong> diagrame de clasă, <strong>în</strong> timp ce pentru modelarea<br />

dinamicii sistemului se vor folosi diagramele de stare, de secventă, de colaborare sau de<br />

activitate. Prin urmare, cei care sunt interesaţi de acest tip de vizualizare a sistemului sunt<br />

designerii şi dezvoltatorii.<br />

View-ul<br />

Componentelor<br />

nt<br />

View-ul<br />

de<br />

desfaşurare<br />

View-ul<br />

Cazurilor<br />

de Utilizare<br />

View-ul<br />

Logic<br />

View-ul<br />

de concurenţă<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com


<strong>Introducere</strong> in <strong>UML</strong> 5<br />

View-ul componentelor (Component View)<br />

Componentele sunt module de cod de diferite tipuri. În funcţie de conţinutul lor acestea<br />

pot fi: componente care conţin cod sursă, componente binare sau excutabile.<br />

View-ul componentelor are rolul de a descrie componentele implementate de sistem şi<br />

dependenţele ce există <strong>în</strong>tre ele, precum şi resursele alocate acestora şi eventual alte<br />

informaţii administrative, cum ar fi de exemplu un desfaşurător al muncii de dezvoltare. Este<br />

folosit <strong>în</strong> special de dezvoltatorii sistemului, iar <strong>în</strong> componenţa sa intră diagrame ale<br />

componentelor.<br />

View-ul de concurenţă (Concurent View)<br />

Sistemul poate fi construit astfel <strong>în</strong>cât să ruleze pe mai multe procesoare. Acest aspect,<br />

care este unul nonfuncţional, este util pentru o gestionare eficientă a resurselor, execuţii<br />

paralele şi tratări asincrone ale unor evenimente din sistem, precum şi pentru rezolvarea unor<br />

probleme legate de comunicarea şi sincronizarea theadu-urilor.<br />

Cei care sunt interesaţi de o astfel de vizualizare a sistemului sunt dezvoltatorii şi<br />

integratorii de sistem, iar pentru construirea lui se folosesc diagrame dinamice (stare,<br />

secventă, colaborare şi activitate) şi diagrame de implementare (ale componentelor sau de<br />

desfăşurare).<br />

View-ul de desfăsurare (Deployment View)<br />

Desfăşurarea fizică a sistemului, ce calculatoare şi ce device-uri (numite şi noduri) vor<br />

fi folosite pentru realizarea efectivă a implementării, cum sunt acestea conectate, precum şi ce<br />

componente se vor executa pe fiecare nod (de exemplu ce program sau obiect este executat pe<br />

fiecare calculator), toate sunt surprinse <strong>în</strong> view-ul de desfăşurare.<br />

Aceast tip de vizualizare a sistemului prezintă interes sunt dezvoltatori, integratorii de<br />

sistem şi cei care realizează testarea sistemului, iar pentru construirea view-ului este folosită<br />

diagrama de desfăşurare.<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com


<strong>Introducere</strong> in <strong>UML</strong> 6<br />

2.2 Diagrame<br />

Diagramele sunt grafuri care prezintă simboluri ale elementelor de modelare (model<br />

element) aranjate astfel <strong>în</strong>cât să ilustreze o anumită parte sau un anumit aspect al sistemului.<br />

Un model are de obicei mai multe diagrame de acelaşi tip. O diagramă este o parte a unui<br />

view specific, dar există posibilitatea ca o diagramă să facă parte din mai multe view-uri, <strong>în</strong><br />

funcţie de conţinutul ei. În <strong>UML</strong> sunt nouă tipuri de diagrame pe care le vom prezenta <strong>în</strong> cele<br />

ce urmează.<br />

Diagrama cazurilor de utilizare (Use Case Diagram)<br />

Un caz de utilizare este o descriere a unei funcţionalităţi (o utilizare specifică a<br />

sistemului) pe care o oferă sistemul. Diagrama prezintă actorii externi şi cazurile de utilizare<br />

identificate, numai din punctul de vedere al actorilor (care este comportamentul sistemului,<br />

aşa cum este el perceput de utilizatorii lui?) nu şi din interior, precum şi conexiunile<br />

identificate <strong>în</strong>tre actori şi cazurile de utilizare. Un exemplu de diagramă a cazurilor de<br />

utilizare este prezentată <strong>în</strong> figura 2.<br />

Client<br />

Figura 2: O diagramă a cazurilor de utilizare dintr-un sistem de asigurări.<br />

Diagrama claselor (Class Diagram)<br />

Semnarea unei<br />

poliţe de asigurare<br />

Situaţia<br />

vânzărilor<br />

Situaţia<br />

clienţilor<br />

Societate<br />

de asigurări<br />

O diagramă a claselor prezintă structura fizică a claselor identificate <strong>în</strong> sistem. Clasele<br />

reprezintă “lucruri” gestionate de sistem; clasele pot fi legate <strong>în</strong> mai multe moduri: asociate<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com


<strong>Introducere</strong> in <strong>UML</strong> 7<br />

(conectate <strong>în</strong>tre ele), dependente (o clasa depinde/foloseşte o altă clasă), specializate (o clasă<br />

este specializarea altei clase) sau împachetate (grupate împreună <strong>în</strong> cadrul unei unitaţi). Toate<br />

aceste relaţii se materializează <strong>în</strong> structura internă a claselor <strong>în</strong> atribute şi operaţii.<br />

Diagrama este considerată statică, <strong>în</strong> sensul că este validă <strong>în</strong> orice moment din ciclul de<br />

viaţă al sistemului. Un exemplu de diagramă a claselor este prezentat <strong>în</strong> figura 3.<br />

Companie<br />

de asigurări<br />

Figura 3: O diagramă a claselor pentru un sistem de asigurări.<br />

Diagrama obiectelor (Object Diagram)<br />

Acest tip de diagramă este un variant al diagramei claselor care <strong>în</strong> locul unei clase<br />

prezintă mai multe instanţe ale ei. Diagrama obiectelor foloseşte aproape aceleaşi notaţii ca şi<br />

diagrama claselor cu două mici diferenţe: obiectele sunt scrise subliniat şi sunt vizualizate<br />

toate instantele relaţiei (vezi figura 4).<br />

Deşi nu este la fel de importantă ca diagrama claselor, cea o obiectelor este folosită<br />

pentru exemplificarea unei diagrame a claselor de complexitate mare, permiţând vizualizari<br />

ale instanţelor actuale şi a relaţiilor exact aşa cum sunt ele realizate. Mai poate fi folosită ca o<br />

parte a diagramelor de colaborare, <strong>în</strong> care sunt vizualizate colaborările dinamice existente <strong>în</strong><br />

cadrul unui set de obiecte.<br />

1 are 0..*<br />

apartine<br />

Poliţa de<br />

asigurare<br />

expimă<br />

Contract de<br />

asigurare<br />

0..*<br />

refera<br />

0..1<br />

are<br />

Persoana<br />

este expimat prin<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com<br />

1..*<br />

1


<strong>Introducere</strong> in <strong>UML</strong> 8<br />

Figura 4: O diagramă a claselor şi o diagramă a obiectelor (instanţele claselor).<br />

Diagrama de stare (State Diagram)<br />

O stare este de obicei un complement al descrierii unei clase. O diagramă de stare<br />

prezintă toate stările prin care trece un obiect al clasei precum şi evenimentele care-i cauzează<br />

modificările de stare. Modificarea stării se numeşte tranziţie. Un exemplu de diagramă de<br />

stare este prezentat <strong>în</strong> figura 5.<br />

M<br />

ută la<br />

Angajat<br />

nume:String<br />

virsta:Integer<br />

Popescu:Angajat<br />

nume=”Popescu Ion”<br />

virsta=30<br />

La parter<br />

soseste la parter<br />

Mută jos<br />

foloseste<br />

0..1 1..*<br />

do/ schimba nivelul<br />

Time-out<br />

urca (etaj)<br />

soseste<br />

Calculator<br />

nume:String<br />

memorie:Integer<br />

PC Servici:Calculator<br />

nume=”Dell 466”<br />

memorie=64<br />

PC Acasa:Calculator<br />

nume=”Compaq<br />

Pentium MMX”<br />

Mută sus<br />

do/ schimbă nivelul<br />

soseste<br />

Staţionează<br />

timp=0<br />

do/creşte timp<br />

Figura 5: O diagramă de stare pentru un ascensor<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com<br />

Diagrama claselor<br />

Diagrama obiectelor<br />

urcă (etaj)


<strong>Introducere</strong> in <strong>UML</strong> 9<br />

Nu vom construi diagrame de stare pentru toate clasele din sistem ci numai pentru<br />

acelea care au un număr de stări bine definit iar comportamentul clasei este afectat şi<br />

modificat de acestea.<br />

Diagrama de secvenţă (Sequence Diagram)<br />

O diagramă de secvenţă prezintă colaborarea dinamică <strong>în</strong>tre un număr de obiecte (vezi<br />

figura 6), mai precis secvenţele de mesaje trimise <strong>în</strong>tre acestea pe măsura scurgerii timpului.<br />

Obiectele sunt văzute ca linii verticale distribuite pe orizontală, iar timpul este<br />

reprezentat pe axa verticală de sus <strong>în</strong> jos. Mesajele sunt reprezentate prin săgeţi <strong>în</strong>tre linile<br />

verticale ce corespund obiectelor implicate <strong>în</strong> mesaj.<br />

:Calculator :Server de imprimanta :Imprimanta :Coada<br />

Print (fisier) [imprimanta liberă]<br />

Print (fişier)<br />

[imprimanta ocupată]<br />

Stochează (fişier)<br />

Figura 6: Diagrama de secvenţă pentru un server de imprimantă<br />

Diagrama de colaborare (Collaboration Diagram)<br />

Această diagramă surprinde colaborarea dinamică <strong>în</strong>tre obiecte, <strong>în</strong>tr-o manieră similară<br />

cu a diagramei de secvenţă, dar pe lângă schimbul de mesaje (numit şi interacţiune) prezintă<br />

obiectele şi relaţiile dintre ele (câteodată referite ca şi context).<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com


<strong>Introducere</strong> in <strong>UML</strong> 10<br />

Cum decidem ce tip de diagramă să folosim? Dacă cel mai important aspect este timpul<br />

sau secvenţa de mesaje vom folosi diagrama de secvenţă, dar dacă trebuie scos <strong>în</strong> evidentă<br />

contextul, vom apela la o diagramă de colaborare.<br />

Desenarea unei diagrame de colaborare se face similar cu a unei diagrame a obiectelor.<br />

Mesajele vor fi reprezentate prin săgeţi <strong>în</strong>tre obiectele implicate <strong>în</strong> mesaj şi pot fi <strong>în</strong>soţite de<br />

etichete care specifică ordinea <strong>în</strong> care acestea vor fi transmise. De asemenea se pot vizualiza<br />

condiţii, iteraţii, valori returnate, precum şi obiectele active care se execută concurent cu alte<br />

obiecte active (vezi figura 7).<br />

:Calculator<br />

Figura 7: O diagramă de colaborare pentru un server de imprimantă.<br />

Diagrama de activitate (Activity Diagram)<br />

O diagramă de activitate prezintă fluxul secvenţelor de activitaţi, ca <strong>în</strong> figura 8, şi este<br />

de obicei folosită pentru a descrie activitaţile realizate <strong>în</strong> cadrul unei operaţii, folosind dacă<br />

este cazul decizii şi condiţii.<br />

1: Print (fisier)<br />

[imprimanta liberă]<br />

1.1: Print(fişier)<br />

:ServerImprimantă :Imprimanta<br />

Diagrama conţine stări de acţiune (action states), şi mesaje care vor fi trimise sau<br />

recepţionate ca parte a acţiunii realizate.<br />

[imprimanta ocupată]<br />

1.2: Stochează(fişier)<br />

:Coada de aşteptare<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com


<strong>Introducere</strong> in <strong>UML</strong> 11<br />

FereastraClient.AfiseazaTotiClientii() Afişează pe ecran<br />

fereastra de mesaj<br />

“Printing”<br />

Figura 8: O diagramă de activitate pentru un server de imprimantă.<br />

Diagrama componentelor (Component Diagram)<br />

O diagramă a componentelor prezintă structura fizică a codului <strong>în</strong> termenii<br />

componentelor de cod, realizând o mapare de la view-ul logic la view-ul componentelor. O<br />

componentă poate să conţină un cod sursă sau poate să fie <strong>în</strong>tr-o forma binară sau executabilă.<br />

În cadrul diagramei vor fi ilustrate şi dependenţele dintre componente, ceea ce permite o<br />

vizualizare simplă a componentelor care vor fi afectate de modificarea uneia dintre ele.<br />

Main<br />

Class<br />

(main.cpp)<br />

Window<br />

Hander<br />

(whnd.cpp)<br />

Command<br />

Hander<br />

(comhnd.cpp)<br />

Şterge<br />

fereastra de<br />

mesaj<br />

[disc full]<br />

[spaţiu liber pe disc]<br />

^Printer.Print(fisier)<br />

Window<br />

Hander<br />

(whnd.obj)<br />

Command<br />

Hander<br />

(comhnd.obj)<br />

Main<br />

Class<br />

(main.obj)<br />

Figura 8: O diagramă a componentelor<br />

Afişează mesajul<br />

“Disc Full”<br />

pe ecran<br />

Afişeaza mesajul<br />

“Printing”<br />

pe ecran<br />

Creaza<br />

fişierul<br />

postscript<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com<br />

Graphic<br />

Lib<br />

(graphic.dll)<br />

Program<br />

Client<br />

(client.exe)


<strong>Introducere</strong> in <strong>UML</strong> 12<br />

Diagrama de desfăşurare (Deployment View)<br />

Arhitectura fizică pe care va fi implementat sistemul, calculatoarele, device-urile<br />

(referite ca nodurile sistemului), împreună cu conexiunile dintre ele, vor putea fi prezentate <strong>în</strong><br />

cadrul unei diagrame de desfaşurare. Componentele şi obiectele executabile sunt alocate <strong>în</strong><br />

interiorul nodurilor, ceea ce ne va permite o vizualizare a unitaţilor care se vor executa pe<br />

fiecare nod.<br />

Client A:<br />

Compaq<br />

Pro PC<br />

Client B:<br />

Compaq<br />

Pro PC<br />

<br />

<br />

Application<br />

Server:<br />

Silicon<br />

Graphics O2<br />

<br />

Database<br />

Server:<br />

Oracle<br />

Figura 9: O diagramă de desfaşurare care prezintă structura fizică a sistemului.<br />

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!