Analiza si gestiunea sistemelor informatice  complexe
Curs 3

Obiecte si clase. Diagrame de clase

Back Up Next

 

Obiecte

        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

Clase

     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

Diagrame de clase

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:

  1. Este redundantă: două substantive care reprezintă acelasi lucru sunt redundante (ex. maşină – automobil)
  2. Este irelevantă: substantivul nu este relevant pentru sistemul modelat 
  3. Este atribut: substantivul reprezinta mai degraba un atribut al unei clase decat o clasa in sine (ex. cont bancar)
  4. Este operatie: substantivul exprima un calcul sau proces care trebuie realizat (ex. calcul discount)
  5. Este rol: substantiv exprima o stare a unui obiect (ex.asina buna)
  6. Este eveniment: (ex. listarea trebuia facuta o data pe spatamana - saptamana nu reprezinta un nume de clase)
  7. Este construcţie de implementare: denumeste un dispozitiv fizic imobil utilizat de sistem (ex. imprimanta). In aplicatiile in timp-real se utilizeaza modelarea prin clase a acestor dispozitive, proces care poarta numele de reificare.

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 studiin
d:
                        · 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

 

Back Up Next