Un obiect este o reprezentare a unei entităţi din lumea reală sau conceptuală. Un obiect este un concept, o abstracţie sau un lucru ce are un înţeles şi limite bine definite în cadrul unei aplicaţii.
Într-un
sistem informatic, obiectele au trei caracteristici:
- stare,
-
comportament,
-
identitate.
Starea unui obiect este una dintre condiţiile posibile în care un obiect poate exista. Starea obiectului se modifică în timp, şi este definită de o mulţime de proprietăţi (atribute), valorile acestor proprietăţilor şi relaţiile pe care obiectul le are cu alte obiecte din sistem.
Exemple:
- un obiect Sticlă se poate
afla în stările Goală – cantitatea de lichid continuta e 0,
PartialPlină – cantitatea de lichid este mai mică decât capacitatea
sticlei, sau Plină – cantitiatea de lichid este egală cu
capacitatea.
- un obiect CursOpţional se poate afla
în starea Activ – dacă numărul studenţilor înscrişi depăşeşte 10, sau
Anulat – numărul obiectelor Student aflate în relaţie cu obiectul
CursOpţional este mai mic decât 10.
Comportamentul determină modul în care un obiect răspunde la cererile altor obiecte din sistem. Comportamentul este implementat prin intermediul unei mulţimi de operaţii.
Exemple:
-
un obiect Sticlă poate
avea comportamentul umple şi goleşte.
-
un obiect
CursOpţional poate avea comportamentul : adaugă un student şi şterge
un student.
Indentitatea reprezintă faptul că fiecare obiect este unic (chiar şi atunci când starea unui obiect este identică cu starea altui obiect).
În UML obiectele sunt reprezentate printr-un dreptunghi, având numele obiectului subliniat şi centrat în cadrul dreptunghiului (figura 1).

Figura 1. Reprezentarea
grafica a obiectelor în UML
O clasă reprezintă descrierea unui grup de obiecte care
au:
-
proprietăţi
(atribute),
-
comportament,
-
relaţii cu alte
obiecte, si
-
semantică
comune. Clasele sunt şabloane de ceare a
obiectelor. Fiecare obiect este o
instanţă a unei clase (şi numai una).
Obiectele vor avea o valoare pentru atributele definite de clasă, şi
accesul la operaţiile sale se va realiza în maniera specificată de clasa pe care
o instanţiază.
Exemple:
- clasa
CursOpţional poate avea următoarele caracteristici:
-
Atribute:
Nume, Locaţie, Durată
-
Relaţii: cu
obiecte ale claselor Profesor şi Student
- Operaţii: interogarea numelui, locaţiei,
duratei, adăugarea/dealocarea unui student
- clasa
Sticla poate avea următoarele caracteristici:
-
Atribute:
capacitatea, cantitate lichid existenta
- Relaţii: cu obiecte ale claselor
Etichetă şi Capac
-
Operaţii: interogarea/modificarea capacităţii, adaugare/extragere a unei
cantităţi de lichid, adaugare/îndepărtare etichetă etc.
“Analiza şi Gestiunea Sistemelor Informatice Complexe” este un obiect ce aparţine clasei CursOpţional.
O bună definire a claselor presupune captarea de către acestea a unei singure tematici majore (spre exemplu o clasă ce conţine informaţii atât despre denumirea şi locaţia unui curs cât şi despre toţi studenţii care participă la curs nu este o clasă ‘bună’)
Numele claselor trebuie să fie alese utilizând vocabularul domeniului problemei modelate (de obicei un substantiv la singular care caracterizează cel mai bine abstracţia modelată).
Atunci când modelăm un sistem informatic este relativ dificil în a face diferenţa între obiecte şi clase. Capcana în care se poate cădea este accea de a determina un set lărgit de clase cu aceeaşi structură.
În UML clasele sunt reprezentate sub formă de dreptunghiuri cu trei compartimente (figura 2). Compartimentul superior conţine numele clasei, compartimentul din mijloc afişează atributele clasei, iar compartimentul inferior conţine operaţiile clasei (în Rational Rose sunt utilizate icon-uri sau simboluri specifice pentru atribute şi operaţii, precum şi pentru reprezentarea vizibilităţii acestora – o cheie/# implica faptul că atributele/metodele sunt protejate, iar un lacăt/- specifică faptul că acestea sunt private).

Figura 2. Reprezentarea grafica a claselor în
UML
Diagramele de clase fac parte din categoria diagramelor statice. Ele descriu structura internă a sistemului informatic prin identificarea claselor, a atributelor şi operaţiilor acestora şi a relaţiilor dintre clase.
Construcţia diagramelor de clase are loc în faza de elaborare a sistemului informatic fiind cele mai importante din aceasta faza.
Selectarea claselor necesită anumite deprinderi. O abordare metodică a determinării claselor ce modelează soluţia unei probleme informatice este aceea de a extrage substantivele esenţiale din documentul de specificaţie. O metodă mult mai rapidă este accea de a extrage toate substantivele care apar în diagrama de cazuri de utilizare (atât în denumirile actorilor cât şi a cazurilor de utilizare). După dobândirea unei anumite experienţe în domeniu, în acest proces de selectare a substantivelor intervine şi o filtrare a acelor substantive care nu vor reprezenta clase ‘bune’ (multe dintre acestea reprezintă de fapt atribute ale unor alte clase din domeniul problemei) – ex. cont bancar.
Odată completată lista iniţială de substantive se vor aplica o serie de 7 reguli de filtrare. Se vor elimina toate clasele-candidat care au una dintre următoarele caracteristici:
Objectory
introduce 3 tipuri de clase (marcate în UML ca stereotipuri) - figura
3:
- Clase entităţi (sau clase domeniu) –
reprezintă nucleul unei aplicaţii, reţin informaţii legate de entitătile
persistente şi capturează serviciile ce conduc majoritatea interacţiunilor în
aplicaţie. De obicei clasele entitate
trebuie să:
·
înmagazineze şi redea valori de atribute,
·
creeze şi ştergere entităţi,
·
furnizeze un comportament dependent de modificarea
starii entitatii.
- Clase de interfaţă –
reprezinta graniţa dintre actorii care doresc să interacţioneze cu
aplicaţia şi clasele entitate.
Majoritatea sunt componente ale interfeţei utilizator (fiecare cutie de
dialog este o clasă de interfaţă), modeleaza
comunicarea cu alte aplicaţii sau reprezinta
clase wrapper peste anumite componente soft. Se
determina studiind:
·
modul in care doresc actorii să ceeaze
entităţi,
·
interfaţa între aplicaţie şi alte sisteme,
·
modalitatea de vizualizare a informaţiilor
(rapoarte).
- Clase de control (controller)–
coordonează activitatea în interiorul aplicaţiei. Se crează câte o clasă
controller pentru fiecare caz de utilizare. Pot juca unul din următoarele
roluri:
·
modelarea unui comportament tranzacţional,
·
secvenţă de control specifică unuia sau mai multor cazuri de utilizare,
·
serviciu ce separă obiectele entitate de obiectele de
interfaţă.

Figura 3. Reprezentarea grafica in UML a tipurilor de
clase
Relaţii între clase -
asigură posibilitatea colaborării între obiectele unui sistem informatic. In UML
se pot modela trei tipuri de relatii intre clase:
- asociere - modul
în care obiectele unei clase sunt conectate cu obiectele altei clase. Asocierile
pot fi extrase din cazurile de utilizare sau din tabela de evenimente
('Clientul plasează Comenzi', 'Documentul conţine Cuprins'). Reprezentarea grafică (figura 4) este o
linie (sau segmente de dreapta) care uneste clasele asociate avand, optional, o
eticheta care sugereaza natura relatiei dintre acestea. Atunci cand
asocierea nu este bidirectionala, capetele liniei contin o sageata.
Multiplicitatea se poate specifica la ambele capete ale unei asocieri si poate
avea valori concrete (1,4), intervale de valori (0..5) sau poate fi nedefinita
(*). In zaul in care nu se specifica, multiplicitatea este considerata
implicit 1. De asemenea, apetel unei asocieri pot fi etichetate cu nume de
rol care definesc rolul jucat de obiectel unei clase in cadrul asocierii.
Atat multiplicitatea cat si numele de rol influenzeaza modalitatea de
implementarea (sau generare automata) a codului sursa pe baza
modelului.
·
agregare - modeleaza o relatie de tip
'parte/intreg' in care obiectul/obiectele parte pot face parte din mai multi
intregi (in momente de timp diferite). In reprezentarea grafica se adauga
un romb gol la capatul corespunzator clasei 'intreg'.
·
compunere - modeleaza o relatie de tip
'parte/intreg' in care obiectul/obiectele parte compun un singur intreg pe toata
perioada ciclului de viata si se distrug in momentul distrugerii intregului. In
reprezentarea grafica se adauga un romb plin la capatul corespunzator clasei
'intreg'.
·
legătură (clasă
asociere) - reprezinta o
colectie de atribute care caracterizeaza o asociere. Clasele asociere apar
atunci cand nu exista un mod logic de a plasa aceste atribute la nivelul unei
clase aflate in sistem.
·
asociere
reflexivă - asociere
intre obiecte ale aceleasi clase.

Figura 4. Reprezentarea grafica a relatiilor de tip
asociere in UML
- generalizare - modeleaza mostenirea proprietaţilor şi a operaţiilor între două clase (rafinarea, specializare a clasei). Clasa generala poarta numele de superclasă, iar clasa specializata de numeste subclasă. Generalizarea apare atunci când orice exemplu de obiect al unei clase este un exemplu valid de obiect al altei clase.

Figura 5. Reprezentarea grafica a relatiei de
generalizare/specializare in UML
- dependenţă - este utilizata atunci cand modificarea unei clase are impact asupra comportamentului/starii altei clase (de obicei atunci când o clasă utilizează o altă clasă ca argument pentru una din operaţiile sale).

Figura 6. Reprezentarea grafica a relatiei de
dependenta in UML