February, 2009

Introducere în UML partea 2

Dacă în prima parte a acestui articol am vorbit despre diagrame şi modul de reprezentare al claselor, a venit acum rândul să vorbim despre modul în care se descriu relaţiile dintre clase.

În cadrul UML există 4 tipuri mari de relaţii: relaţii de generalizare, relaţii de asociere, relaţii de realizare şi relaţii de dependenţă.

1) Relaţii de generalizare

Acest tip de relaţii se referă la o structură ierarhică ce aplică principiul moştenirii. Cu alte cuvinte, moştenirea este o relaţie de generalizare care se reprezintă la modul următor: se trasează o linie cu săgeata îndreptată de la subclasă la clasa părinte, săgeata fiind închisă şi goală în interior.

relatie de moştenire

relatie de moştenire

2) Relaţii de asociere

Sunt relaţiile în care o clasă se află în relaţie cu o altă clasă pe o durată mare de timp. Aceste relaţii se nasc în momentul în care o proprietate a unei clase ţine o referinţă către o instanţă a altei clase. Din această cauză, acest tip de relaţie este cel mai răspândit.

relaţie de asociere

relaţie de asociere

Pentru descrierea relaţiei de asociere se folosete o linie simplă (figura 2-A). Pentru descrierea direcţiei de asociere se foloseşte o săgeată simplă, deschisă la bază. Dacă de exemplu, clasa Profesor conţine o instanţă a clasei Student, direcţia se trasează ca în figura 2-B. În cazul în care şi clasa Student ar fi avut o instanţă a clasei Profesor, ar fi rezultat o relaţie de asociere bidirecţională, linia de asociere având săgeţi la ambele capete.

În aceeaşi măsură se pot ţi specifica numărul de instanţe a unei clase având referinţe în cealaltă clasă, după cum se vede în figura 2-B. Numărul acestora se poate scrie ca un număr fix, se poate da ca un interval închis (ex. 1..10) sau ca asterisk (*), care înseamnă 0 sau mai multe.

În cadrul relaţiilor de asociere mai fac parte  şi 2 tipuri speciale, agregare şi compoziţie.

relaţie de agregare/compoziţie

relaţie de agregare/compoziţie

Asocierile de aregare descriu o situaţie în care o clasă păstrează o referinţă permanentă a altei clase. Însă unul din elemente poate exista şi în afara relaţiei respective – poate fi conţinut şi de alt obiect în acelaşi timp (figura 3-A). Relaţiile de agregare se reprezintă printr-o linie care începe cu un romb gol.

Asocierile de compoziţie sunt mai puternice decât cele de agregare. O parte nu poate exista în afara întregului. În cadrul unei astfel de relaţii obiectul conţinut poate avea referinţă doar în acea clasă. Relaţiile de acest tip sunt reprezentate de o linie care începe însă cu un romb umplut (figura 3-B).

3) Relaţii de realizare

Sunt relaţiile prin care unul dintre elemente „garantează” realizarea unor acţiuni prin intermediul celuilalt element. În cadrul UML, interfeţele sunt asociate acestui tip de relaţii. Reprezentarea se face prin trasarea unei săgeţi, asemănătoare celei din cadrul moştenirii, doar că linia este discontinuă (figura 4).

relatie de realizare - interfaţă

relatie de realizare - interfaţă

4) Relaţii de dependenţă

Relaţiile de dependenţă indică o relaţie semantică între două sau mai multe elemente, înă nu descriu o legătură permanentă între clase. O modificare într-unul din obiecte duce la ri semantice la celălalt obiect. Se reprezintă printr-o linie discontinuă având la capăt o săgeată deschisă (figura 5).

dependenta

relatie de dependenta

Cu acestea am încheiat discuţia referitoare la modul de reprezentare în UML al relaţiilor dintre clase. În ultima parte a acestui articol o să exemplific toate aceste noţiuni pe un exemplu concret, ca să vedem la ce ne ajută practic UML-ul.

Tags:
Posted in Articole No Comments »

Introducere în UML partea 1

UML, prescurtarea de la Unified Modeling Language, reprezintă un limbaj standard folosit pentru descrierea sistemelor orientate obiect.

Se foloseşte de elemente grafice pentru a reda cât mai bine relaţiile între obiecte, lucru foarte util în cazul exemplelor, unde nu se poate descrie prea bine acest lucru doar prin câteva linii de cod. Unul din aceste elemente este diagrama, cea mai folositoare în asemenea cazuri.

uml1

figura 1

Reprezentarea unei clase prin intermediul unei diagrame se face printr-un simplu dreptunghi divizat în 3 compartimente. În cel de sus este trecut numele clasei, la mijloc se specifică lista atributelor, iar în ultima căsuţă operaţiile (figura 1 – A) .

După cum spuneam, numele clasei se reprezintă în prima subdiviziune în mai multe forme. Pentru o clasă normală se scrie pur şi simplu numele său, pentru o clasă abstractă se poate scrie fie italic numele, fie se poate adăuga sub nume o etichetă la modul {abstract} pentru a marca faptul că respectiva clasă este abstractă (figura 1 – B ), iar pentru o interfaţă se adaugă o etichetă la modul « interface » (figura 1 – C).

Lista atributelor se referă la proprietăţile unei clase şi după cum spuneam, acestea sunt scrise în centru (figura 2).

figura 2

figura 2

După cum se vede şi în figura 2, pentru fiecare atribut se specifică:

  1. nivelul de acces : acesta poate fi + (public), – (private) sau # (protected)
  2. numele
  3. tipul de date
  4. valoarea default  dacă este cazul, dacă nu, se omite

Asemănător cu lista atributelor se specifică şi operaţiile clasei.Operaţiile unei clase reprezintă metodele sale. Lista acestora se specifică precum în figura 3.

figura 3

figura 3

Pentru fiecare metodă în parte se specifică următoarele:

  1. nivelul de acces : acesta poate fi + (public), – (private) sau # (protected)
  2. numele
  3. lista parametrilor, pentru fiecare specificându-se numele şi tipul (evident pot lipsi)
  4. tipul de date returnat (care de asemenea poate lipsi)

De precizat este faptul că atât în cazul atributelor, cât şi al proprietăţilor nu este necesară trecerea întregii liste, ci doar a acelora care sunt importante în contextul dat.

Acestea fiind spuse, am încheiat prima parte a acestei serii de articole pe tema UML. În următoarele voi vorbi despre modul de figurare a relaţiilor dintre obiecte şi la final voi exemplifica totul pe un exemplu practic :) .

Tags:
Posted in Articole No Comments »