Introducere în UML
Introducere în UML
Introducere în UML
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