17.04.2013 Views

Introducere în UML

Introducere în UML

Introducere în UML

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<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!