Analiza si Proiectarea Obiect-Orientata - Lucrarea de Laborator Nr.

1

MODELARE UML
Un model este o abstractizare a unui sistem, într-un anumit context, pentru un scop bine precizat. Un model capteaza conceptele relevante ale acelui sistem (din punct de vedere al scopului pentru care a fost conceput), ignorând aspectele neesentiale. Conceptele definite se numesc abstractizari, iar tehnica de identificare a acestor concepte se numeste abstractizare . Asa cum un sistem complex poate fi descompus în multiple subsisteme si fiecare subsistem poate fi descompus în continuare, pâna la elemente primitive (nedecompozabile), un model al unui sistem poate fi, la rândul lui structurat pe mai multe niveluri, ca modele ale subansamblelor componente. Pentru modelarea sistemelor complexe (în special a sistemelor software) au fost concepute un numar mare de modalitati (tehnologii) si limbaje care sa sustina aceste metodologii, depasind (în anii 1990) o suta de astfel de limbaje. Unificarea acestora s-a impus din necesitatea de a facilita schimburile de idei si proiecte si a fost sustinuta de personalitati marcante din domeniul ingineriei software ( Software Engineering ), iar rezultatul l-a reprezentat limbajul UML (Unified Modeling Language).

1.1

INTRODUCERE ÎN UML

UML ( Unified Modeling Language) este un limbaj pentru construirea, specificarea, vizualizarea si documentarea modelelor. El a fost onceput si standardizat pentru modelarea sistemelor software, dar poate fi folosit si în alte domenii de proiectare (hardware, constructii etc.). UML este un limbaj care a evoluat din mai multe limbaje existente, preluând trasaturile cele mai valoaroase ale fiecaruia dintre ele. În principal, UML este fuziunea metodologiilor dezvoltate de Grady Booch, James Rumbauch (numita OMT – Object Modeling Technique) si Ivar Iacobsen (numita OOSE – Object-Oriented Software Engineering ). Unificarea a avut loc în anul 1995 când a fost emisa prima specificatie a limbajului (versiunea UML 0.9). Primul standard (UML 1.1) a fost stabilit în 1997 de catre asociatia OMG (Object Management Group) la care au aderat numeroase firme de soft (Microsoft, IMB, Sun, Oracle etc.) si personalitati din acest domeniu. Ulterior au avut loc mai multe revizii (UML 1.3 în 1999, UML 1.4 în 2002) si este în curs de elaborare o revizie majora (UML 2.0). UML este definit de specificatiile OMG care se poate obtine de la adresa www.omg.org. UML este un limbaj de modelare vizuala, elementele componente ale acestuia sunt elemente grafice 2D, iar constructia si specificarea modelului unui sistem (software sau din alt domeniu) se face în mod grafic. Modelarea vizuala este frecvent folosita în diferite domenii de activitate, dat fiind ca oamenii sunt capabili sa înteleaga mai bine si mai rapid o imagine decât un text. Scopul principal al modelarii vizuale îl constituie posibilitatea de comunicare între utilizatori, dezvoltatori, analisti, manageri, si acest lucru este posibil daca se foloseste un limbaj standardizat, unanim acceptat si cunoscut. Cele mai importante caracteristici ale limbajului UML sunt: • • UML încearca sa integreze cele mai bune practici de dezvoltare a sistemelor software complexe. Sistemele complexe nu pot fi reprezentate printr-o singura diagrama (organigrama – flow chart ), de aceea UML ofera posibilitatea de a dezvolta mai multe modele ale sistemului, reprezentate ca diagrame diferite, fiecare diagrama reprezentând o anumita vedere (view ) a sistemului (diagrama claselor, diagrama de colaborare, diagrama secventelor de mesaje etc.). UML permite modelarea pe diferite niveluri de detaliere, ceea ce faciliteaza utilizarea lui în toate etapele de dezvoltare a produselor software (analiza, proiectare, implmentare). UML foloseste, în general, elemente independente de limbajele de implementare, dar sunt admise si connstructii prelu ate din diferite limbaje concrete de implementare. UML se bazeaza pe modelul obiect, având posibilitatea de reprezentare a tuturor conceptelor de baza ale modelului obiect (abstractizarea, mostenirea, încapsularea datelor, modularitatea). Însa, UML are un grad de generalitate mai ridicat decât modelul obiect: pe de o parte extinde posibilitatile de modelare, permitând reprezentarea componentelor software si a sistemelor (noduri), si, pe de alta parte poate fi folosit si pentru modelarea sistemelor care nu se încadreaza în modelul obiect-orientat (de exemplu, bazele de date relationale).

• • •

O data cu utilizarea tot mai extinsa a limbajului UML s-au dezvoltat numeroase programe utilitare (toolset-uri) care permit modelarea sistemelor în limbajul UML. Dintre acestea, cel mai cunoscut este programul Rational Rose, produs de compania Rational Software Corporation, care necesita plata unei licente de utilizare (nu este gratuit). Pe lânga acesta exista si programe gratuite care se pot gasi în Internet si pot fi folosite pentru a studia limbajul UML si tehnica de modelare pe care o ofera (PoseidonUML, ArgoUML, Visio etc.).

1

View etc. care contin butoane de comenzi (icons) sau casete de selectie (combo-box). Daca exista un desen salvat din Visio (un fisier cu extensia . Flowchart. din care se poate selecta una anume. Ferestra din dreapta este împartita în doua panouri. majoritatea figurilor exemplificative date în continuare au fost dezvoltate în Visio2000. salvat etc. Databases. care contine mai multe comenzi (File. Pe foaia de lucru se poate activa o grila de orientare (cu comanda View->Grid) s i punctele de conectare între elemente (cu comanda View>Connection Points) (acestea nu sunt activate în imaginea din Fig. modificat. 1. … UML Model Diagram). Fereastra din stânga contine elementele modelului creat sub forma unui arbore. Panoul din dreapta contine o foaie de lucru în care se creaza modelul selectând fiecare simbol din panoul stânga si “tragându-l” cu mouse-ul în foaia de lucru. Daca se doreste crearea unui nou desen. 1. Others).1.) si mai multe bare de instrumente. La selectarea categoriei Software . atunci se selecteaza optiunea Creating new drawing si comanda Choose drawing type .1 Diagrama claselor reprezentata în Visio2000 În zona client a ferestrei cadru principal exista doua ferestre de afisare. Fig. 2 . Edit.vsd ) acesta poate fi deschis. 1.2 UTILIZAREA PROGRAMULUI VISIO2000 Elementele limbajului UML se înteleg si se însusesc mai rapid urmarind modul lor de folosire într-un program utilitar (toolset) de modelare În laborator este instalat programul Visio2000 pe care vor fi efectuate operatiile de modelare UML. Panoul din stânga contine lista diagramelor. La lansarea programului se poate selecta una din optiunile: Create new drawing si Open existing file. Se selecteaza tipul UML Model Diagram si se deschide fereastra principala de proiectare a modelelor UML. În fereastra principala a programului se recunosc elementele cunoscute de editare în sistemele de operare Windows: un meniu principal.1).1). în panoul din dreapta sunt reprezentate mai multe tipuri de desene (Booch OOD. Pentru setarea proprietatilor fiecarui element (simbol) se executa dublu click pe acel simbol si se completeaza datele dorite în paginile dialogului care se deschide.… Software. (Fig. De asemenea. dupa care se deschide o fereastra care contine în panoul din stânga o lista cu tipurile (categoriile) de desene posibile (Block Diagram. Pentru fiecare diagrama selectata sunt oferite toate simbolurile necesare creerii acelei diagrame. Jackobson Use Cases.

1. Ele se gasesc în pagina UML Static Structure din programul Visio. dreptunghiul de reprezentare contine trei sectiuni.3 ELEMENTELE LIMBAJULUI UML Elementele de baza ale limbajului UML se pot clasifica în mai multe categorii (elemente de documentare. optional stereotipul si proprietati ale clasei. În general. Trasaturile structurale sunt reprezentate prin atribute (proprietati).2 -b) Se poate remarca analogia acestui element UML cu notiunea de clasa în limbajele de programare obiect-orientate. (a) (b) (c) Fig. Pentru fiecare metoda se specifica numele si. comportamentale si semantice. a doua sectiune contine atributele. ”. 3 . Alte categorii de elemente (elemente de comportare. Un clasificator (classifier) este un concept care defineste trasaturi structurale si comportamentale ale unui element al modelului .1 Elemente de documentare Note (notes). printr-un dreptunghi. În reprezentarile simplificate (admise în UML) sectiunile de atribute si metode pot sa lipseasca. iar cea de-a treia contine metodele clasei. Un clasificator este o generalizare a mai multor elemente structurale (stereotipuri): clasa (class).2 Elemente structurale Elementele structurale reprezinta de cele mai multe ori partile statice ale modelului. Fiecare atribut sau metoda este precedata (optional) de un simbol de vizibilitate . structurale. optional. Pentru fiecare element al limbajului UML este dat numele simbolului. (b) Reprezentarea unei clase (c) Reprezentarea a trei obiecte. elemente structurale etc.1. sau poate fi un tip de date primitive dintr-un limbaj de programare cunoscut (C++. dar este accesibil dintr-o clasa specialitzata care mosteneste clasa respectiva).2 (a) Reprezentarea unei note. Acestea sunt: Clasificatori. prima sectiune contine numele clasei. 1. Real). Se reprezinta ca în Fig. nu se mai introduce numele stereotipului.). daca un clasificator reprezinta o clasa. În UML o clasa se reprezinta ca si un clasificator. folosite în mai multe tipuri de diagrame si vor fi prezentate în aceasta sectiune. limbajul UML permite specificarea atributelor sau a metodelor în pseudoocod sau într-un limbaj de programare concret.” pentru vizibilitate de tip private (ceea ce înseamna ca acel atribut sau metoda nu este accesibil din afara clasei si ”# ” pentru vizibilitate de tip protected (ceea ce înseamna ca acel atribut sau metoda este nu accesibil din afara clasei. De asemenea se poate specifica tipul prin numele unei alte clase definite în mode lul respectiv si se poate initializa atributul cu valoarea dorita. de grupare si de legatura sunt elemente de baza.3. si.2 -a si se plaseaza în vecinatatea acelui element pe care îl explica sau se pot conecta cu o linie de legatura la acesta. de natura conceptuala sau fizica. Pentru fiecare atribut se specifica numele si tipul de date (separate prin simbolul ”: ”). O nota este un comentariu care explica anumite parti ale modelului. Pentru clase. De asemenea. semantica se refera la semnificatia (întelesul) obiectelor. tipul valorii returnate si o lista de parametri. spectific UML (Integer. Acest simbol este ”+ ” pentru vizibilitate de tip public (ceea ce înseamna ca acel atribut sau metoda este accesibil din afara clasei). Tipul de date al unui atribut poate sa fie date ca tip generic. tip de date (type) sau interfata (interface).) vor fi prezentate în cadrul sectiunilor dedicate diagramelor care le folosesc. private. optional poate sa mai contina numele stereotipului (semnificatia clasificatorului) si proprietati.3. Dintre acestea elementele de documentare. trasaturile comportamentale sunt reprezentate de operatiile clasei (metodele). 1. care corespunde cu numele simbolului folosit în programul Visio. Java). (Fig. O clasa (Class) reprezinta un set de obiecte cu aceleasi trasaturi structurale. Vizibilitatea se poate specifica si prin cuvintele cheie cunoscute (public. 1. Se reprezinta printr-un dreptunghi care contine numele clasificatorului si. 1. Clase. elemente de context etc. protected ).

3. e – pachet.. 4 . În UML se definesc mai multe categorii de legaturi: generalizarea. Acest clasificator corespunde tipului de date interface din Java sau C#. Reprezentarea unei interfete este data în Fig. dependenta. (a) (b) (c) (d) (e) Fig. Noduri. 1.-c ). asocierea.) . Numele obiectului se subliniaza si poate fi urmat de numele clasei (despartite prin semnul “:”).Obiecte . putându-se folosi termenul de legatura (sau chiar asociere. Clase parametrizate O clasa parametrizata (Parametrized class . 1.componenta cu interfata. O linie de legatura poate avea un nume (optional) si are doua capete (end points) la care se pot adauga (optional) adnotar. Reprezentarea unui pachet este data în Fig. În UML un obiect se reprezinta printr-un dreptunghi împartit în doua compartimente: compartimentul de nume si compartimentul de atribute (Fig.3 – a. realizarea. Componente . achizitionata si reutilizata independent de alte parti ale sistemului (Fig.3. Un parametru este o variabila careia i se poate atribui o anumita valoare sau poate reprezenta un clasificator. legaturi (asocieri.3 – d).e. 1. utilizarea. o interfata se mai poate reprezenta simplificat printr-un cerc însotit de numele interfetei. (Fig. poate fi directionata sau nu . 1. în functie de contextul în care este folosita. În limbajul Java nu este definit un tip echivalent pentru template-uri. 1. O componenta (Component) este un clasificator care poate contine metode si poate realiza una sau mai multe interfete. În Fig.3 – b). Se poate remarca echivalenta dintre clasele si obiectele UML si clasele si obiectele din limbajele de programare obiect-orientate (C++. Interfete.4 Elemente de legatura O legatura (relationship) reprezinta o conexiune între concepte (elemente ale modelului). un obiect defineste valori concrete ale atributelor clasei instantiate. dar diferite biblioteci dezvoltate în C++ introduc acest tip de date (bibliotecile COM. În limbajul C++ nu este definit acest concept. Un obiect (Object) este o instanta a unei clase. Sunt admise si notatii simplificate (numai numele obiectului sau numai numele clasei precedat de semnul “:”). Pachetele permit organizarea modelelor pe diferite niveluri de abstractizare. un atribut etc .3 Elemente de grupare Pachetele. Clasele parametrizate corespund temp late-uilor C++.interfata. O interfata nu prevede nici o trasatura structurala si nici implementarea metodelor. O componenta corespunde unei parti a sistemului (în general. 1. O legatura se reprezinta grafic printr-o linie formata dintr-unul sau mai multe segmente de dreapta plasata între elementele între care exista conexiunea respectiva si poate avea mai multe proprietati. 1. dependente etc) cu alte obiecte (conform definitiei clasei) si partajeaza (cu alte obiecte instante ale aceleiasi clase) trasaturile comportamentale (metodele) definite de clasa instantiata. este recomandabil sa se evite traducerea termenului original “relationship” prin relatie . O interfata se reprezinta ca o clasa cu stereotipul <<interface>>. O interfata (Interface) este un clasificator care defineste un set de operatii publice reprezentând serviciile oferite de acea interfata (un “contract de servicii”). cod executabil) care are o numita functionalitate si poate fi dezvoltata. linia poate fi continua (de exemplu. În compartimentul de atribute se trec numele atributelor si valorile acestora.3 – c). 1. la asocieri) sau întrerupta (la dependente). c – clasa parametrizata. 1.2.3 Elemente ale limbajului UML. Java. Dat fiind ca limbajul UML se poate folosi si în proiectarea bazelor de date relationale si în acest domeniu termenul de relatie (relation ) are o semnificatie precisa (o multime de tupluri). Clasa defineste proprietatile structurale si comportamentale ale tuturor obiectelor pe care le reprezinta. d. C#). a. 1. b .3. Un nod (Node) reprezinta o resursa de calcul în care pot fi incluse una sau mai multe componente în cursul instalarii (deployment) (Fig. CORBA etc. În continuare sunt prezentate cele mai importante legaturi folosite în UML. Un pachet (Package) reprezinta o grupare conceptula (logica) a mai multor elemente ale modelului. în aceasta notatie nu se trec numele operatiilor interfetei.nod. Compartimentul de atribute poate fi omis.3 –b este reprezentata o interfata a unei componente în aceasta notatie simplificata. desi asocierea este o forma particulara de legatura). folosita pentru a stapâni complexitatea modelelor. De asemenea.template) este un clasifi cator care defineste o familie de elemente cu unul sau mai multi parametri.

Din punct de vedere al semnificatiei asocierilor. Fiind dati doi clasificatori E1 si E2 . în care o instanta a unui clasificator (“întregul”) este compus din mai multe instante ale altor clasificatori (“parti”). Legatura inversa. în care se impune o limita inferioara si o limita superioara fiecarei multiplicitati a asocierii. Raportul dintre valorile cardinalitatilor unei asocieri binare fata de cei doi clasificatori se numeste raport de cardinalitate (cardinality ratio ). dar în UML nu este definit un astfel de element. (b) cu o linie de legatura partajata.2 Asocieri O asociere (association) este o legatura între doi sau mai multi clasificatori si stabileste o corespondenta între instante ale clasificatorilor asociati. se noteaza cu 1:1. dintre clasificatorul parinte si clasificatorii fii este o specializare. Asocierile binare sunt. • Cardinalitatea (multiplicitatea) unei asocieri fata de un clasificator (cardinality. 1.3. • Asocierea „unul-la-multe” (one-to-many) este asocierea prin care unei instante a clasificatorului E1 îi corespund una sau mai multe instante ale clasificatorului E2 .4 sunt date cele doua reprezentari posibile ale generalizarii între clase. se poate recunoaste mecanismul de mostenire implementat de toate limbajele de programare obiect-orientate. care contin toate caracteristicile elementului parinte si adauga informatii noi la acestea . multiplicity ) este numarul maxim de instante ale acelui clasificator care pot fi asociate cu o instanta a celuilalt clasificator. (a) (b) Fig.4.4. Atunci când legatura de generalizare se defineste între clasificatori (clase). 1. între 2 clasificatori) sau multiple (între n clasificatori. Din punct de vedere al numarului de clasificatori asociati.1 Generalizari O generalizare (Generalization ) este o legatura între un element cu un grad mai ridicat de generalitate (parinte) si unul sau mai multe elemente specifice (mai putin generale) numite elemente fiu. în care instantele asociate sunt de sine statatoare si asocieri de tip întreg-parte. n > 2). 1. Se poate observa ca cele trei categorii de asocieri descrise mai sus difera între ele prin raportul de cardinalitate. În Fig. iar elemetul fiu se numeste clasa derivata (subclasa). asocierile pot fi binare (de gradul 2. Asocierile multiple (n -are.3.4. la rândul lor. dupa numarul de instante ale clasificatorilor care sunt puse în corespondenta de asocierea re spectiva. generalizarea fiind suficienta pentru reprezentarea ierarhiilor. Generalizarea se poate aplica în cazul claselor. Generalizarea se reprezinta printr-o linie continua care are o sageata ne-plina (numai conturul) îndreptata catre elementul parinte. Reprezentarea generalizarii între clase: (a) cu linii separate. si reciproc. se definesc urmatoarele categorii de asocieri binare: • Asocierea “unul-la-unul” (one-to-one ) este asocierea prin care unei instante a clasificatorului E1 îi corespunde o sigura instanta a clasificatorului E2 . acestea pot fi de doua tipuri: asocieri simple. se noteaza cu 1:N . se noteaza cu M:N . dar unei instante a clasificatorului E2 îi corespunde o singura instanta a clasificatorului E1 . pachetelor si a altor elemente ale limbajului si permite definirea ierarhiilor între elementele modelului. n > 2) prezinta câte un raport de cardinalitate pentru fiecare pereche de clasificatori pe care îi asociaza. de trei categorii. Asocierea „multe-la-multe” ( many-to-many) este asocierea prin care unei instante a clasificatorului E1 îi corespund una sau mai multe instante ale clasificatorului E2 si reciproc. În modelarea UML din aceste categorii de asocieri se pot detalia situatii mai precis restrictionate. 5 .1. În astfel de situatii elementul parinte se numeste clasa de baza (sau superclasa). Atunci când sunt mai multe elemente specializate (fii) se pot folosi linii separate sau o linie de legatura partajata de mai multe astfel de elemente.

1). iar într-o tara pot avea sedii 0 sau oricâte întreprinderi (multiplicitate 0. se pot afla toti angajatii acesteia. Asocierea TARA-INTREPRINDERE este o asociere cu raportul de cardinalitate M :N : o întreprindere poate avea sedii în (cel putin) o tara. Într-o asociere bidirectionala.. asocierea PERSOANA -INTREPRINDERE este o asociere bidirectionala: daca se da o “persoana” (obiect instanta a clasei PERSOANA ). În programele de modelare UML. Nu este necesar ca liniile de legatura care reprezinta o compozitie sa aiba nume. Acest lucru este admis în fazele de analiza si proiectare. Pe linia de legatura se poate înscrie (optional) numele asocierii.. Limbajul UML prevede reprezentarea a doua subtipuri de asocieri întreg-parte (compozitie si agregare).. De asemenea. prin care instante ale unui clasificator de tip parte (obiecte ) sunt înglobate într-un obiect . La fel. Navigabilitatea unei asocieri poate fi bidirectionala. M :N ).5-b). se pot gasi numai instantele clasificatorului de la capatul cu sageata al liniei de legatura atunci când se da o instanta a clasificatorului de la capatul fara sageata al liniei de legatura.4-a. sau poate sa nu fie angajata la nici o întreprindre (multiplicitatea 0. Asocierile multiple simple (N-ary Association ) se reprezinta printr-un numar de linii de legatura egal cu numarul de clasificatori asociati conectate cu un capat la clasificatorul corespunzator. 1. Asocierea INTREPRINDERE. chiar daca analize mai detaliate ale acestui tip de asociere au evidentiat sapte sau opt variante posibile. în mod frecvent se prescurteaza notatia 0. Compozitia (Composition ) este o asociere prin care se defineste o legatura puternica de tip întreg-parte. dat fiind ca navigabilitatea se refera la aspecte de implementare ale modelului. Asocierile simple pot acea orice raport de cardinalitate (1:1..5 (a) Trei asocieri binare între perechi de clase. iar semnul asterisc “*” reprezinta orice valoare..*). daca se da o “întreprindere” (obiect instanta a clasei INTREPRINDERE). multiplicitatea 1…1 se poate scrie cu o singura valoare (1). daca se da o tara..instanta a clasificatorului care reprezinta întregul. sau în oricâte tari (multiplicitate 1. iar cu celalalt capat un vârf al unui poligon cu un numar suficient de laturi (Fig. (a) (b) Fig..5-a este o asociere cu raportul de cardinalitate 1:N : o companie poate avea oricâti angajati (multiplicitate 0. situatia inversa nu se poate rezolva. care poate fi bidirectionala sau unidirectionala (într-unul din sensurile posibile). 1. În UML valoarea multiplicitatii se poate specifica prin doua limite (inferioara si superioara). sau unidirectionala si se reprezinta printr-o sageata plasata pe unul din capetele liniei de legatura. 1. multiplicitatea la acest capat al asocierii având în mod implicit valoarea 1. Într-o asociere unidirectionala.*). având capatul dinspre clasificatorul “întreg” marcat cu un simbol – un romb plin.. atunci se pot gasi toate obiectele instante ale celuilalt clasificator. Asocierea binara simpla (Binary Association) se reprezinta printr-o linie continua care leaga cei doi clasificatori (Fig. daca se da un obiect instanta al oricaruia din clasificatorii asociati.PERSOANA din Fig. 1. Asocierea PERSOANA-TARA permite navigarea numai în directia clasei TARA: daca se da o persoana. Asocieri întreg-parte. înseamna ca navigabilitatea nu este specificata. La fiecare capat al liniei de legatura se poate trece (optional) rolul clasificatorului în asociere si cardinalitatea (multiplicitatea) asocierii fata de clasificatorul respectiv. În schimb.. nu se pot afla toate persoanele care au rezidenta în acea tara. (b) Asociere ternara.5 -a).*). se poate afla întreprinderea unde este angajata si. capatul dispre 6 . iar o persoana poate sa fie angajat la o întreprindere. 1. se poate afla tara de rezidenta a acesteia. 1:N .Navigabilitatea unei asocieri în UML se refera la modul în care se poate deduce o instanta (obiect) al unei asocieri atunci când se cunoaste un obiect (in stanta) cu care acesta este asociat. Pe linia de legatura se mai poate specifica (optional) navigabilitatea asocierii. Compozitia se reprezinta grafic printr-o linie de legatura (continua) între doi clasificatori. si se reprezinta prin sageti plasate la ambele capete ale liniei de legatura.* cu un simplu asterisc (*). nu este necesar sa se înscrie rolul clasificatorului de tip “întreg” s i nici valoarea multiplicitatii acestuia. În Fig. Daca pe linia de legatura nu este plasata nici o sageata.

În exemplele de mai sus. Într-adevar. dar un copac nu poate face parte decât dintr-o padure. 1 caroserie. 1. Masina propulsie: Motor 1 suport: Caroserie 1 locomotie: Roata 4 (a) (b) • • Fig. La un moment dat. în care obiectele de tip “parte” sunt incluse în compartimentul de reprezentare a atributelor a clasificatorului “întreg” (Fig. PADURE-COPAC. Nu este necesar ca liniile de legatura care reprezinta o agregare sa aiba nume si nici sa se înscrie rolul clasificatorului de tip “grup”. având capatul dinspre clasificatorul “grup” marcat cu un simbol – un romb ne-plin. 1. un obiect (instanta a unui clasificator care reprezinta un membru al asocierii) poate fi membru a mai multor grupuri (obiecte agregat). Acest mod de reprezentare nu este implementat de toate programele de modelare UML. Într-o astfel de asociere un obiect (instanta) a clasificatorului care reprezinta grupul (“obiect agregat”) este pus în corespondenta cu 0. se pot considera agregarile PERSOANA-CLUB. Ca exemple. roti etc. este necesar (de regula) sa se încrie multiplicitatile asocierii la ambele capete ale liniei de legatura. în mod tipic.6 -a) Compozitia este un caz tipic de asociere 1:N . dar sensul cel mai general este ca obiectul “întreg” este compus din obiecte componente (“parti”). eventual cu un indicator de multiplicitate. Bineînteles ca pot exista diferite situatii diferentiate (de exemplu. Compozitia se caracterizeaza prin urmatoarele aspecte: • Obiectul compus (“întreg”) nu poate exista (în mod normal) fara componentele sale. heterogena.6-b). În aceasta privinta exista destul de multe situatii diferite. motor. o persoana poate face parte. club de înot etc).clasificatorul de tip “parte” se poate marca (optional) cu rolul acestuia în asociere si cu multiplicitatea corespunzaoare (o masina are 1 motor. 7 .7).7 Trei asocieri de agregare între perechi de clase. îi apartin) unul sau mai multe obiecte “parte”. definind faptul ca unui obiect (obiectul “întreg”) îi corespund (de fapt. STOL-PASARE. Compozitia este. Agregarea are urmatoarele caracteristici: • În general. 1. 1. în orice moment. unul sau mai multe instante ale clasificatorului care reprezinta un membru al asocierii. obiectul “întreg” se obtine din compunerea mai multor obiecte diferite (masina este compusa din caroserie. un obiect “parte” nu poate face parte decât dintr-un singur obiect “întreg”. din mai multe cluburi (club de tenis.6 Doua notatii ale asocierii de tip compozitie. cu semnificatii evidente (Fig. Fig. 4 roti etc) (Fig. În schimb. daca se elimina motorul unei masini aceasta nu mai functioneaza ca o masina.). o masina poate exista si chiar circula fara o portiera). Agregarea (Aggergation ) este o a sociere prin care se defineste o legatura între un grup si membrii acestuia. Agregarea se reprezinta grafic printr-o linie de legatura (continua) între doi clasificatori. 1. Pentru asocierea de tip compozitie limbajul UML mai prevede înca o posibilitate de reprezentare. în acelasi moment de timp.

8 . Granitele dintre cele trei tipuri de asocieri nu sunt foarte bine conturate. agregarea defineste o legatura mai puternica decât asocierea simpla. agerarea. dar exista si agregari cu raportul 1:N (de exemplu.4. Fig.3 Dependente O dependenta (dependency) este o legatura între doua elemente ale modelului indicând faptul ca un element (numit client) depinde sau utilizeaza un alt element (numit tinta sau furnizor – target. O dependenta de rafinare (<<refines>>) este o legatura între doua elemente care reprezinta diferite stadii de rafinare a unui concept. Realizarea se reprezinta printr-o linie de dependenta marcata cu stereotipul <<realizes>> . mult mai importante fiind aspectele de implementare a asocierilor. fie ale unei asocieri M :N . O dependenta de conexiune (<<bind>>) leaga un parametru al unei clase parametrizate (template) de valoarea actuala pentru a crea o clasa neparametrizata. în care toate valorile multiplicitatilor sunt egale cu 1.8 Diferite tipuri de dependente O dependenta de utilizare (<<uses>>) semnifica o situatie în care un element ( clientul ) necesita prezenta si utilizarea unui alt element (tinta ). În Visio2000 agregarea se poate defini selectând elementul Composition care se editeaza (prin comanda de dublu click) si se selecteaza modul shared (partajat).8).4 Realizari O realizare (realization) este o legatura între un element care ofera o implementare unei specificatii descrise de un alt element. 1. • Din aceste caracteristici se poate deduce ca agregarea este.4. Exista mai multe tipuri speciale de dependente care se diferentiaza printr-un stereotip (un cuvânt cheie) adaugat pe linia de legatura care reprezinta dependenta respectiva (Fig. iar compozitia defineste cea mai puternica legatura între clasificatori. dar aceste diferente nu sunt foarte importante. De exemplu. fiind posibile interpretari diferite. o modificare a elementului furnizor poate conduce la o modificare a elementului client. 1. agregarea PADURE-COPAC ). dar nu este clar daca o padure din care au fost taiati toti copacii mai poate fi considerata padure etc. 1. 1. o asociere cu raportul de cardinalitate M :N (de exemplu.3. în general.3. compozitia) definesc legaturi mai slabe sau mai puternice: asocierea simpla defineste cea mai slaba legatura între clasificatori.• Obiectul agregat poate exista (în general) si în lipsa membrilor sai.4). în functie de cerintele de utilizare a aplicatiei modelate. O dependenta se reprezinta printr-o linie întrerupta cu o sageata îndreptata catre elementul tinta. care trebuie sa asigure modul corect de folosire a acestora (raportul de cardinalitate. fie ale unei asocieri 1:N . Asocierile cu raportul de cardinalitate 1:1 pot fi considerate cazuri particulare. O dependenta de trasare (<<traces>> ) este o legatura între doua elemente care reprezinta acelasi concept pe diferite niveluri de dezvoltare (versiuni). în locul celui implicit (composite) al proprietatii Aggregation a capatului dinspre clasa agregat a liniei de asociere. Agregarea are (în general) un caracter omogen. Cele trei categorii importante de asocieri (asocierea simpla. Diferite aspecte de implementare vor fi prezentate în sectiunea urmatoare (1. Navigabilitatea poate fi specificata (si implementata) în orice directie. Aceasta înseamna ca membrii unui obiect agregat apartin aceleiasi clase (clasificator). poate exista un club de tenis care nu are nici un membru (nu s-au facut înca înscrieri). supplier). Implementarea acestor asocieri este însa destul de diferita de ale celorlalte asocieri si depinde mult de tipul aplicatiei si modelul de programare folosit. agregarea PERSOANA-CLUB). navigabilitatea).

. . Caroserie c. în functie de cerintele aplicatiei. . 1. // Variabila de asociere: vector de pointeri Profesor* lista_profesori[MAX]. în modelul relational de date. astfel încât unei clase UML îi corespunde o clasa din limbajul de programare obiect-orientat folosit. 1. . Caroserie {. . Fie asocierea simpla PROFESOR-STUDENT din Fig. .4. generalizarea se poate transpune printr-o asociere 1:1. platforma de lucru si modelul de programare folosit.}. }. Asocierile din modelul UML se pot implementa în mai multe moduri. Roata r[4]. . int nr_prof. . .}. . . . . . . al unei asocieri binare bidirectionale cu raportul de cardinalitate M :N.2. O astfel de implementare asigura navigabilitatea bidirectionala a asocierii si durata de viata a obiectului “întreg” egala cu duratele de viata ale obiectelor “parte”. . se implementeaza introducând în fiecare clasa asociata câte un vector de pointeri (referinte) la obiectele asociate din cealalta clasa. class Profesor. . în functie de navigabilitatea asocierii.4 se implementeaza în C++ astefel: class Vehicul {. numite clase de asociere. 9 . De exemplu. . . 1. implementarea C++ poate arata astfel: class class class class Motor {. .}. în functie de tipul. class Tractor : public Vehicul{. 1. // Variabila de asociere: vector de pointeri Student* lista_studenti[MAX].4. . De exemplu. . . în general prin înglobarea obiectelor instante ale claselor “parte” în clasa “întreg”. .1 Asocieri de compozitie Asocierile de compozitie se implementeaza. Roata{.}. }. class Student{ char* nume.6 – a.4 IMPLEMENTAREA CLASELOR SI A LEGATURILOR DINTRE ELE Clasele definite în UML corespund direct claselor definite în modelul obiect. .1. . generalizarile din Fig. . . . Masina{ Motor m.2 Asocieri simple si de agregare Asocierile simple si asocierile de agregare se pot transpune în programe în doua moduri diferite: prin variabile în clasele asociate (variabile de asociere) sau prin clase suplimentare. . . Pentru compozitia din Fig. . }. class Profesor{ char *nume. Cele doua clase asociate se pot defini în limbajul C++ folosind doua variabile de asociere în modul urmator: const MAX = 100. class Automobil : public Vehicul {.4.1 Variabile de asociere Asocierile simple sau de agregare între doua clase se pot realiza folosind una sau doua variabile de asociere. . 1. Legaturile între clase se pot implementa în mai multe moduri. . Aplicatiile care nu sunt dezvoltate în modelul obiect folosesc alte modatitati de transpunere în program a generalizarii. Generalizarea se transpune direct într-o ierarhie de clase prin mecanismul de mostenire în aplicatiile dezvoltate în modelul obiect. Cazul cel mai frecvent întâlnit. raportul de cardinalitate si navigabilitatea acestora. . . . int nr_stud.9 –a. . .}. . . 1. . .}.

class Persoana. 1. daca se defineste asocierea PROFESOR-STUDENT cu directia de navigare de la clasa Profesor la clasa Student. Acest mod de implrmrntare poate fi definit înca din faza de modelare UML. class Intreprindere{ char* nume. Pentru asocieri simple binare cu raportul de cardinalitate 1:1. 1. }. .4. variabila de asociere din clasa cu multiplicitatea N nu mai este un vector de pointeri ci un simplu pointer la clasa cu multiplicitatea 1 a asocierii. . cele doua variabile ale unei asocieri bidirectionale sunt simpli pointeri la clasa asociata. . . (a) (b) Fig.9 (a) Asocierea PROFESOR-STUDENT. . . .4 –a. . 10 . a carei implementare în C++ este urmatoarea: const MAX = 100. }. 1. . . Pentru asocieri simple sau de agregare binare cu raportul de cardinalitate 1:N . . .2 Clase de asociere O asociere între doua sau mai multe clase se poate defini printr-o noua clasa (clasa de asociere) care contine legaturile necesare catre fiecare din clasele asociate.Variabila lista_profesori din clasa Student permite ca fiecare obiect instanta a clasei Student sa memoreze lista tururor profesorilor cu care acesta este asociat (ca vector de pointeri la clasa Profersor . // Variabila de asociere: pointer Intreprindere* intreprindere. . . . solutiile mai elaborate pot folosi vectori cu alocare dinamica sau liste înlantuite de pointeri. (b) Reprezentarea asocierii printr-o clasa de asociere. Programul complet se gaseste în directorul îndrumarului si poate fi studiat si extins (proiectul MSVC VariabileAsociere). . }. int nr_pers. . . avînd nr_prof elemente din dimensiunea maxima admisa MAX). în fiecare clasa se introduce un numar de variabile de asociere egal cu numarul de clase cu care ace asta este asociata si catre care se doreste navigarea. De exemplu. 1. . class Student{ char* nume. asigurând navigarea dinspre clasa Student spre clasa Profersor . atunci se poate renunta la variabila lista_profesori din clasa Student. . Variabila lista_studenti din clasa Profesor permite ca fiecare obiect instanta a clasei Profesor sa memoreze lista tururor studentilor cu care acesta este asociat (ca vector de pointeri la clasa Student. . . . în asocierea INTREPRINDERE-PERSOANA din Fig.2. . care prevede specificarea asocierii printr-o clasa de asociere (simbolul Association Class). .9 b asocierea PROFESOR-STUDENT se defineste prin clasa de asociere SE. Pentru asocieri multiple. . . Pentru asocieri unidirectionale se poate renunta la variabila de asociere din clasa destinatie a navigarii. . . . În exemplul din Fig. Acesta solutie este cea mai simpla. . avînd nr_stud elemente din dimensiunea maxima admisa MAX). . class Profesor. class Persoana{ char *nume. . . . . variabila de asociere din clasa cu multiplicitatea N (clasa Persoana) este un simplu pointer la clasa Intreprindere (nu un vector de pointeri): const MAX = 100. . asigurând navigarea dinspre clasa Profersor spre clasa Student. // Variabila de asociere: vector de pointeri Persoana* lista_Persoane[MAX]. exemplificata ca idee de implementare. De exemplu.

Mostenirea asocierilor În modelul obiect. De aceea. .) folosind diagrame de diferite tipuri. }. O asociere simpla (sau o asociere de agregare) definita ître doua clase de baza se mostenesc între clasele derivate din acestea. }. . . deci legatura de compozitie dintre clasa “întreg” si clasa ”parte” se mosteneste ca legatura de compozitie între clasa derivata si clasa ”parte” (Fig. 1. . 1.10 – b este prezentat un exemplu t ipic în care o asociere definita între clasele CDocument si CView din biblioteca MFC se mosteneste între clasele aplicatiei CMyDoc si MyView. . . .10 (a) Mostenirea unei asocieri de compozitie. asocierile definite între doua clase de baza (superclase) se mostenesc la clasele derivate din Asociere definita Compozitie definita Bibliotec a MFC Program aplicatie Compozitie mostenita (a) Asociere mostenita (b) Fig.class Profesor{ char *nume. Programul complet se gaseste în directorul îndrumarului si poate fi studiat si extins (proiectul MSVC ClaseAsociere).4. . În Fig. având acelasi mod de implementare si diferind doar ca interpretare (asociere între obiecte sau apartenenta unor obiecte la un obiect care reprezinta un grup) si se deosebesc destul de mult de asocierile de compozitie (atât ca interpretare cât si ca mod de implementare). . 1.5 DIAGRAME UML În limbajul UML se pot reprezenta mai multe aspecte ale modelarii sistemelor (modelarea structurala. . modelarea comportamentala. în unele documentatii asocierile simple si agregarile sunt denumite simplu asocieri (sau asocieri slabe).3 acestea. 11 . clasa derivata va contine aceleasi obiecte (prin mostenire).-10 a). Din cele prezentate în ultimele sectiuni se poate observa ca asocierile simple si agregarile sunt destul de asemanatoare. Atunci când se creaza o clasa derivata dintr-o clasa ”întreg” care are ca atribute obiecte instante ale unor clase componente (“parte”). iar asocierea de compozitie este denumita simplu compozitie (sau asociere puternica ). . (b) Mostenirea unei asocieri simple. }. int nr. . 1. 1. Mostenrea asocierilor si functiile polimorfice permit dezvoltarea aplicatiilor complexe prin reutilizarea (mostenirea claselor) din biblioteci. struct PS{ Profesor* prof. modelarea componentelor etc. Câteva dintre aceste tipuri de diagrame sunt prezentate în continuare. Student* stud. // Clasa de asociere class Asociere{ PS vect[MAX]. .

Un mesaj (Message) este o specificare a unei comunicatii între obiecte care au o anumita legatura (relationship). si legaturile între aceste clase (generalizari.1. compozitii. cu valori crescatoare în josul paginii. În diagrama secventelor pe axa verticala se reprezinta timpul. care se concentreaza asupra aspectelor dinamice ale sistemului. ale carui noduri (vârfuri) reprezinta clasele. S-au definit clase pentru culori. Mesajele sunt marcate prin numele functiei apelate.5. ceea ce ofera o buna întelegere a comportarii sistemului. În plus. Interactiunile între obiecte se pot modela prin diagrame de colaborare si diagrame ale secventelor de mesaje. în schimb este continuta implicit în diagramele secventelor. În Fig 1. care capteaza aspectele statice ale sistemului.1 se poate urmari diagrama claselor pentru un model de grafica 2D. O diagrama a secventelor (Sequence Diagram) este o diagrama de interactiune în care se pune accentul pe ordinea temporala a mesajelor schimbate între obiecte. puncte. O diagrama a de colaborare (Collaboration Diagram) reprezinta obiectele instantiate la un moment dat în cursul executiei si mesajele prin care acestea comunica între ele. specificând elementele componente si legaturile dintre acestea. poligoane etc. Mesajele pot fi numerotate în ordinea în care sunt transmise.11). 1. de aceea. diagrame ale secventelor. diagrame de stare). care. 1. pâna la care ajung mesajele destinate obiectului respectiv (Fig. Aceasta ordonare nu este foarte simplu de realizat în diagrama de colaborare. În UML un mesaj se reprezinta printr-o sageata însotita de num ele mesajului (functia apelata pentru comunicare). de asemenea. care sunt mai utile în proiectarea sistemelor (diagrame de colaborare. agregari). reprezentând modul în care obiectele (instante ale claselor) interactioneaza între ele pentru a asigura functionalitatea acestuia. exista si alte diagrame care reprezinta interactiuni sau evolutii ale obiectelor. folosind.11 Exemplu de diagrama a secventelor. iar arcele reprezinta legaturile dintre clase. Apelul unei metode a unui obiect (server) de catre un obiect (client ) reprezinta transmiterea unui mesaj de la client la server. 12 . sunt mai frecvent utilizate decât diagramele de colaborare. Diagrama claselor defineste modelul structural al unui sistem prin intermediul unui graf. folosind instante ale claselor (obiecte) si instante ale legaturilor dintre clase existente în acel moment. Fiecare obiect din lista de obiecte ale diagramei marcheaza o linie verticala de timp de viata (Object Lifeline ). 1. un graf. iar pe axa orizontala se reprezinta o lista de obiecte între care au loc transferuri de mesaje. O diagrama a obiectelor reprezinta structura statica a sistemului la un moment particular de timp.5. Timp Fig. Diagrama obiectelor este mai putin generala decât diagrama claselor si de aceea este mai putin utilizata.1 Diagramele claselor si ale obiectelor Diagramele claselor si ale obiectelor se folosesc pentru modelarea structurala. În astfel de diagrame se reprezinta obiecte si mesajele dintre acestea. iar obiectele sunt identificate prin numele folosit în functia de apel si clasa careia apartin. pentru a usura întelegerea modului de interactiune între obiecte.2 Diagrame de interactiune ale obiectelor Diagramele de interactiune ale obiectelor specifica modelarea comportamentala a sistemelor.

Asigurati legaturile corecte dintre clase folosind variabile de asociere si clase de asociere.2 Implementati clasele care sunt modelate în exemplele din figurile 1. Starea initiala (Initial State) se reprezinta printr-un cerc plin. generalizari). Lânga o linie de reprezentare a unei tranzitii se poate înscrie numele metodei care provoaca tranzitia sau conditiile (în functie de valori ale atributelor) care produc tranzitia respectiva. În punctul de sosire al unui mesaj (intersectia dintre linia orizontala de reprezentare a mesajului si linia verticala corespunzatoare obiectului respectiv) se plaseaza un simbol de activare (Activation). plasate la ordonate (pe axa verticala) care semnifica secventa de executie în timp a mesajelor (apeluri de functii). 1.12). O tranzitie între doua doua stari se reprezinta printro linie continua care are o sageata la capatul dinspre starea finala a tranzitiei. asocieri. Statechart) a unei clase reprezinta starile pe care obiectele (instante) ale clasei le pot avea si tranzitiile între aceste stari.5. 1.1 Lansati programul Visio2000 si creati mai multe modele UML care sa contina elementele din figurile: 1. 1.5 a si b.2. 13 . 1.În corpul diagramei secventelor mesajele se reprezinta prin sageti orizontale. Diagrama de stare foloseste mai multe elemente (simboluri) ale limbajului UML (Fig. 1.3 Diagrama de stare Diagrama de stare (State Diagram. O stare a unui obiect se reprezinta printr-un dreptunghi cu colturile rotunjite în care se înscrie denumirea starii obiectului. care este un dreptunghi a carui înaltime (pe verticala) aproximeaza durata de executie a functiei apelate de mesajul respectiv. Implementati clasele si mostenirile între acestea în C++. Diagrama de stare este utila pentru descrierea claselor care au unul sau mai multe atribute ale carui valori au semnificatii precise si modificarea acestor valori implica diferente de comportare a obiectelor.12 Diagrama de stare a unei clase care modeleaza functionarea unei masini. Fig.1.9 (clase.3 Fie urmatoarea ierarhie de clase: Animal Caine Pisica Setter Tekel Angora Siameza Creati diagrama claselor UML în Visio2000. Pe linia de reprezentare a unui mesaj se înscrie numele acestuia. EXERCITII 1.

1 si implementati aceste clase si legaturile dintre ele în limbajul C++. fiecare sectiune fiind compusa din mai multe paragrafe si figuri. un paragraf contine câteva propozitii si fiecare propozitie contine câteva cuvinte.1. Implementati aceste clase si legaturile dintre ele în limbajul C++ 1. Se poate ignora punctuatia. 1. 14 .5 Creati diagrama claselor din Fig.4 Creati diagrama claselor pentru un model de capitol de carte cu urmatoarele specificatii: un capitol contine câteva sectiuni.

Sign up to vote on this title
UsefulNot useful