Arhitectura unei aplicatii orientate pe obiecte







Elementele arhitecturii

Vizualizarea, specificarea, construirea si documentarea unui sistem software necesita ca sistemul sa fie analizat din mai multe perspective, si anume sa se ia in considerare modurile in care sistemul este perceput de catre diversele persoane care participa la dezvoltarea si apoi la utilizarea sistemului.

Astfel, fiecarei persoane care are tangenta cu sistemul software intr-un fel sau altul (in constructie sau in utilizare), sistemul i se infatiseaza sub o anume fateta (view). Se poate spune ca totalitatea acestor fatete compun arhitectura sistemului. Fiecare dintre fatete poate constitui o descriere de sine statatoare a sistemului (mai precis a unui aspect al lui), dar intre ele exista si interferente deoarece impreuna ele compun un intreg.

In cazul sistemelor orientate pe obiecte au fost identificate 5 coordonate principale ale arhitecturii (fig.11.1):


 

Aceasta viziune asupra arhitecturii unui sistem se mai numeste si abordarea din cele "4+1" perspective.

Cazurile de utilizare (Use Cases view)

Descriu comportarea sistemului asa cum este ea perceputa de utilizatori, de analistii care urmaresc captarea cerintelor si de cei ce realizeaza testarea sistemului. Cazurile de utilizare reflecta "ce face" sistemul la "suprafata", fara a intra in dedesubturile legate de "cum face" sistemul acele functii. Ele nu specifica propriu-zis organizarea sistemului, ci mai degraba reprezinta elementul care imprima forma sistemului.

Planul logic (Logical view) sau proiectul (Design view)

Cuprinde clasele, interfetele si relatiile care formeaza vocabularul problemei si al solutiei. Proiectul constituie suportul cerintelor functionale ale sistemului, adica al serviciilor oferite catre utilizatori.

Implementarea (Implementation view) sau planul componentelor (Component view)

Se refera la modulele (subsistemele) software utilizate pentru a asambla fizic sistemul dorit. Un modul este un ansamblu de componente care, la randul lor, sunt fisiere software (de ex: cod sursa, unitati de program precompilate).

In cazul sistemelor orientate pe obiecte modulele sunt organizate stratificat, fiecare strat avand o interfata clar definita. Straturile sunt dispuse ierarhic. Aceasta stratificare ierarhica este pana la urma o consecinta a insasi definitiei unui obiect (o abstractizare a unei entitati din lumea reala sau a unui concept, care realizeaza o singura functie in cadrul aplicatiei).

Un sistem va include in mod tipic urmatoarele straturi:

Planul proceselor (Process view)

Cuprinde totalitatea componentelor care participa pe durata executiei sistemului (de ex: programe executabile, biblioteci cu legare dinamica, mecanisme de sincronizare si executie concurenta) si a relatiilor de dependenta dintre ele.

Planul repartizarii (Deployment view)

Se refera la topologia hardware utilizata ca suport de procesare pentru sistemul dezvoltat. Modelul corespunzator acestei fatete va reda nodurile utilizate si conexiunile dintre ele. Prin nod se intelege in general o resursa dotata cu o anumita capacitate de memorare si, cel mai adesea, cu o anumita capacitate de procesare.

Fiecare dintre fatetele arhitecturale enumerate mai sus poate da o imagine de sine statatoare asupra sistemului, astfel incat diferitele persoane implicate in dezvoltarea si utilizarea sistemului sa-si poata concentra atentia asupra acelor aspecte care le privesc cel mai mult. Pe de alta parte, intre cele 5 fatete exista interactiuni. Astfel, nodurile topologiei hardware sunt masinile care vor executa componentele implementarii, care, la randul lor, constituie realizarea fizica a elementelor planului logic (clase, obiecte, intefete, relatii).
 
 

Notatia UML ca suport de modelare a arhitecturii

Notatia UML nu este obligatoriu legata de un anumit mod de abordare a dezvoltarii unui sistem software. Autorii notatiei afirma insa ca: "pentru a obtine maximum de beneficii din utilizarea ei, se recomanda ca ea sa se aplice in contextul unui proces de dezvoltare software care sa fie:

Un proces de dezvoltare dirijat de cazurile de utilizare presupune ca stabilirea cerintelor (adica ce comportament se doreste de la sistem) se bazeaza in principal pe cazurile de utilizare.

Un proces centrat pe arhitectura este acela care utilizeaza arhitectura sistemului ca baza pentru conceptualizarea, constructia si managementul sistemului aflat in dezvoltare.

Ce este un proces iterativ si incremental am vazut in lucrarea precedenta.

In ceea ce priveste legatura dintre arhitectura unui sistem si notatia UML, trebuie spus ca fiecare dintre fatetele arhitecturii prezentate in paragraful anterior pot fi modelate si puse in corespondenta unele cu altele folosind notatia UML, si anume cu ajutorul diagramelor UML.

Fiecare fateta arhitecturala poate fi modelata sub 2 aspecte:

Modelele corespunzatoare diferitelor fatete arhitecturale vor fi elaborate si detaliate pe parcursul diferitelor faze ale procesului de dezvoltare. De exemplu: diagramele cazurilor de utilizare sunt incepute in faza de Initiere si completate in faza de Elaborare; diagramele corespunzatoare proiectului sunt incepute in faza de Elaborare.

In cele ce urmeaza vom prezenta elementele de baza ale limbajului UML, pentru a putea trece la descrierea modelelor corespunzatoare fatetelor arhitecturale.

Vocabularul notatiei UML cuprinde 3 categorii de elemente primare:


Entitatile
Sunt de 4 feluri:

Entitatile structurale

Sunt echivalentele substantivelor din vocabularul unui limbaj natural. Ele au un caracter preponderent static si pot corespunde unor obiecte fizice sau unor concepte. In UML exista 7 tipuri de entitati structurale:

Entitatile comportamentale

Reprezinta partea dinamica a modelelor UML, fiind echivalentele verbelor dintr-un vocabular. Ele modeleaza comportamentul ca functie de timp si spatiu. In UML exista 2 tipuri de entitati comportamentale:

Gruparile

Reprezinta aspectul organizatoric al modelelor UML. In UML exista un singur tip de entitati de grupare, si anume pachetele.

Un pachet este un mecanism general care serveste la organizarea diferitelor elemente in grupuri. Intr-un pachet pot fi plasate entitati de orice fel. Spre deosebire de componente (care exista in timpul executiei), pachetele sunt o notiune pur conceptuala, ele existand doar pe durata dezvoltarii. Simbolul grafic utilizat pentru reprezentarea unui pachet este:

Adnotarile

Reprezinta partea explicativa a modelelor UML. Adnotarile sunt comentarii care se pot atasa oricarui element din model. In UML exista un singur tip de adnotari, si anume notele. Simbolul grafic utilizat pentru reprezentarea unei note este:
 

Relatiile
Sunt de 4 feluri:

Dependenta

Este o relatie semantica intre 2 entitati al carei sens este urmatorul: o modificare adusa uneia dintre entitati (cea independenta) poate afecta semantica celeilalte entitati (cea dependenta). Simbolul grafic utilizat pentru reprezentarea unei dependente este:

- - - - - - - - - - - - - - - - >


Asocierea

Este o relatie structurala care descrie un set de legaturi, o legatura fiind o conexiune intre obiecte. Un caz particular de asociere este agregarea, care reprezinta o relatie structurala stabilita intre un intreg si partile care il compun. Simbolul grafic utilizat pentru reprezentarea unei asocieri este un segment de dreapta pe care se inscriu, dupa caz, ordine de multiplicitate si nume de roluri.

Generalizarea

Este o relatie de tip specializare/generalizare intre 2 obiecte, al carei sens este urmatorul: unul dintre obiecte este obiectul specializat (sau fiul) si el poate substitui obiectul celalalt, care este obiectuil generalizat (sau parintele).Simbolul grafic utilizat pentru reprezentarea unei generalizari este:

Realizarea

Este o relatie semantica intre 2 entitati, al carei sens este urmatorul: una dintre entitati specifica un contract pe care cealalta entitate se angajeaza sa-l indeplineasca. Relatiile de realizare se intalnesc in 2 cazuri:

Simbolul grafic utilizat pentru reprezentarea unei realizari este asemanator cu cel pentru generalizare, dar segmentul de dreapta este cu linie punctata.
 

Diagramele
O diagrama este o prezentare grafica a unui set de elemente, cel mai adesea de forma unui graf, posibil orientat. Nodurile grafului corespund de regula entitatilor, iar arcele - relatiilor. Diagramele permit vizualizari ale unui sistem din diferite perspective. De aceea, se poate spune ca o diagrama reprezinta o proiectie asupra sistemului.
Teoretic, o diagrama poate contine orice combinatie de entitati dimpreuna cu relatiile dintre ele. Practic insa, un numar mic de diagrame sunt cu adevarat utile si prezinta consistenta in raport cu cele 5 fatete ale arhitecturii unui sistem.
Notatia UML propune 9 tipuri de diagrame:

Mediul Rational Rose ca suport pentru procesele de dezvoltare centrate pe arhitectura

Modul de operare in cadrul mediului de dezvoltare Rational Rose precum si organizarea interfetei utilizator a mediului sunt favorabile abordarii unui sistem software prin prisma celor "4+1" fatete.

Mediul Rational Rose a fost conceput sa functioneze sub sistemele MSWindows. Spatiul de lucru al ferestrei principale este divizat in 3 regiuni de baza:

Fereastra de browsing

Ca mod de functionare, aceasta fereastra se comporta similar cu omoloaga ei din programul Windows Explorer. Daca in Explorer fereastra de browsing este dedicata vizualizarii structurii de directoare si fisiere, in Rational Rose aceeasi fereastra vizualizeaza o structura arborescenta a arhitecturii sistemului de dezvoltat. Nodurile de pe primul nivel sunt predefinite si ele desemneaza fatetele:

Planul proceselor nu apare pentru ca, practic, procesele pot fi considerate tot componente si, deci, vor fi modelate tot cu diagrame de componente.

Nodurile de pe nivelele inferioare vor fi adaugate pe masura elaborarii modelelor sistemului si ele vor corespunde elementelor ce compun modelele respective: entitati si diagrame. Unele dintre aceste noduri sunt predefinite, acestea corespunzand elementelor obligatorii din componenta modelelor. Numele acestor noduri este Main. De exemplu, fiecare sistem are un caz principal de utilizare, o diagrama principala a claselor etc.
Adaugarea de elemente noi in fereastra de browsing se face in principiu astfel: se da un clic cu butonul drept pe nodul "parinte" => un meniu de comenzi rapide din care se selecteaza optiunea New, apoi din submeniul afisat se selecteaza tipul elementului dorit (de ex: Actor, Use Case etc).

Fereastra de documentare

Este o simpla fereastra de editare de text cu ajutorul careia se pot atasa comentarii explicative elementelor din fereastra de browsing. Pentru aceasta este suficient sa se selecteze elementul dorit in fereastra de browsing, apoi sa se pozitioneze cursorul in fereastra de documentare si sa se tasteze textul necesar.

Ferestrele de diagrame

Reprezinta spatiul in care se realizeaza editarea diagramelor. Totalitatea diagramelor, impreuna cu legaturile dintre ele compun modelul unui sistem. Modelul poate fi salvat intr-un fisier care primeste extensia implicita .mdl.
Principiul de desenare a unei diagrame consta in a trage cu mouse-ul elementele ce constituie nodurile grafului din fereastra de browsing spre fereastra diagramei. Arcele (legaturile) vor fi create cu ajutorul butoanelor de pe bara de intrumente atasata ferestrelor de diagrame (aflata in stanga acestora).
 

Studiu de caz

In cele ce urmeaza vom incepe prezentarea modului de elaborare a unui model de sistem software cu ajutorul mediului Rational Rose, bazandu-ne pe un exemplu concret. In lucrarea de fata va fi prezentata partea de elaborare a diagramelor cazurilor de utilizare, urmand ca in lucrarile urmatoare sa fie abordate si alte diagrame.
Inainte de a da enuntul problemei vom detalia putin notiunile legate de cazurile de utilizare.

Rolul cazurilor de utilizare
Cazurile de utilizare documenteaza, prin intermediul unor modele de cazuri de utilizare, comportarea unui sistem, asa cum este ea perceputa din exterior. Rolul cel mai important al unui asemenea model este acela de comunicare, el fiind un mijloc prin care utilizatorii si proiectantii isi transmit unii altora ideile legate de functionalitatea sistemului dorit.
Un model de caz de utilizare include:

Elaborarea modelului cazurilor de utilizare incepe in faza de Initiere, prin identificarea actorilor si a principalelor functii dorite de la sistem. Modelul este apoi dezvoltat, in faza de Elaborare, prin detalierea cazurilor existente si/sau prin adaugarea de cazuri noi, daca este necesar.

Actorii
Actorul este orice persoana sau obiect care nu face parte din sistem, dar interactioneaza cu acesta.
Un actor poate sa introduca si/sau sa obtina informatii in/din sistem.
De obicei actorii sunt mentionati in enuntul problemei, respectiv pot fi identificati din conversatiile cu beneficiarii sistemului si cu expertii in domeniu.
Pentru identificarea actorilor pot fi folosite urmatoarele intrebari ajutatoare:

De fapt, un actor corespunde unui rol pe care o persoana sau sistem extern il joaca in raport cu sistemul de analizat.
Simbolul utilizat in UML pentru reprezentarea actorilor este:

Cazurile de utilizare

Un caz de utilizare modeleaza un dialog intre un actor si sistem, reprezentand functionalitatea oferita de sistem acelui actor. Colectia tuturor cazurilor de utilizare ale unui sistem constituie multimea tuturor cailor definite in care sistemul poate fi utilizat.
Definitia formala a unui caz de utilizare: o secventa de tranzactii efectuate de sistem, prin care se genereaza un rezultat masurabil pentru un anumit actor.
Pentru identificarea cazurilor de utilizare pot fi folosite urmatoarele intrebari ajutatoare:

Regula de baza aplicata la determinarea unui caz de utilizare este: un caz de utilizare reprezinta o secventa de functionare completa de la inceput la sfarsit, care trebuie sa se finalizeze prin furnizarea unui rezultat semnificativ spre un actor.

Fluxul de evenimente al unui caz de utilizare

Este o descriere a evenimentelor necesare pentru ca functiunile cerute printr-un caz de utilizare sa fie indeplinite. Descrierea este formulata in termenii a ceea ce sistemul trebuie sa faca si nu cum ar trebui sa faca. Cu alte cuvinte, fluxul evenimentelor este exprimat in limbajul domeniului problemei si nu al implementarii.
Fluxul de evenimente trebuie sa includa:

Documentatia fluxurilor de evenimente este creata de regula in faza de Elaborare, intr-o maniera iterativa. La inceput se prevede o descriere a secventei normale de evenimente care se detaliaza pe masura inaintarii analizei, apoi se adauga fluxurile de exceptie (partile de genul "ce se intampla daca...").
Se recomanda ca la crearea documentatiei fluxurilor de evenimente sa se aplice urmatorul sablon [Qua98]: "n" fiind numarul de ordine al cazului de utilizare.

Relatiile cazurilor de utilizare

Relatiile in care sunt implicate cazurile de utilizare pot fi:

Obs: adaugarea stereotipului <<communicates>> la relatia dintre un actor si un caz de utilizare este optionala, deoarece aceste relatii nu pot fi decat de comunicare.

Diagramele cazurilor de utilizare

Cuprind o parte sau toti actorii, cazurile de utilizare si relatiile lor, pentru un sistem dat.
Orice sistem are de obicei o diagrama a cazului principal, care ofera o imagine a frontierelor sistemului (adica actorii) si a functionalitatii de baza oferite de sistem. Alte diagrame pot fi create dupa necesitati si pot include:


Enuntarea problemei

Problema analizata se refera la dezvoltarea unui sistem de evidenta a inscrierii la cursuri a studentilor unei universitati.
La inceputul fiecarui semestru studentii pot solicita un catalog continand ofertele de cursuri. Pentru fiecare curs catalogul va include informatii referitoare la titular, departament si cunostintele necesare pentru a urma cursul. Studentii trebuie sa selecteze cate 4 cursuri, indicand la fiecare cate 2 alternative, pentru cazurile in care la unele cursuri nu mai sunt locuri sau cursurile au fost anulate. Se precizeaza ca pentru un curs se pot inscrie max. 10 studenti si min. 3 studenti. Daca la un curs se inscriu mai putin de 3 studenti, cursul respectiv se anuleaza.
Pe de alta parte, profesorii trebuie sa aiba acces on-line la sistem pentru a indica ce cursuri ofera spre predare, respectiv pentru a vedea ce studenti s-au inscris la cursurile lor.
Studentii vor beneficia de o anumita perioada "de razgandire", timp in care vor putea sa-si modifice optiunile.
Dupa incheierea perioadei de inscriere, sistemul de evidenta a inscrierilor trebuie sa trimita spre un alt sistem, insarcinat cu taxarea studentilor, informatii necesare intocmirii notelor de plata.
Gestionarea bazei de date cuprinzand informatiile despre profesorii din universitate, studentii inmatriculati si planul de invatamant + orar va fi efectuata de catre un registrator.
 

Pentru a crea acesti actori intr-un model Rational Rose, se realizeaza o operatie de adaugare in fereastra de browsing, considerand ca nod "parinte" nodul Use Case view si selectand optiunea Actor, apoi tastand numele actorului (in mod implicit un actor nou primeste numele New Class). Fiecarui actor se recomanda sa i se ataseze o scurta descriere in fereastra de documentare din care sa reiasa rolul jucat de actor la interactiunea cu sistemul. Exemplu: Profesor = persoana abilitata sa predea cursuri. Pentru a adauga aceste cazuri de utilizare la modelul nostru, se procedeaza ca si la actori, dar selectand din ultimul meniu optiunea Use Case. Fiecarui caz de utilizare se recomanda sa i se ataseze o scurta descriere in fereastra de documentare din care sa reiasa scopul cazului si care sa reprezinte o definitie generala a functionalitatii oferite de caz.
Exemplu: Inscriere la cursuri este un caz de utilizare initiat de actorul Student; el presupune posibilitatea de a crea/sterge/modifica/consulta orarul dintr-un semestru.
Pentru a crea legaturile intre cazurile de utilizare si fisierele cu documentatia fluxurilor se procedeaza astfel: in fereastra de browsing se da clic cu butonul drept pe cazul de utilizare dorit, apoi din meniul afisat se selecteaza optiunea Specification => o fereastra cu regiuni etichetate, din care se selecteaza eticheta Files; se da din nou clic cu butonul drept in fereastra afisata si se selecteaza comanda Insert File, apoi se selecteaza fisierul cu documentatia. Astfel, pentru relatiile de comunicare se foloseste butonul Association (pentru comunicare bidirectionala) sau Unidirectional Association (pentru comunicare unidirectionala). Pentru relatiile de tip "utilizeaza" sau "extinde" se foloseste butonul Generalization. Simbolurile acestor butoane sunt cele date in figura de mai jos:


Obs: daca pe bara de instrumente a ferestrei de diagrame lipseste vreunul din butoanele necesare, se da clic cu butonul drept pe bara si din meniul afisat se selecteaza optiunea Customize, care permite adaugarea butoanelor dorite.

Adaugarea de stereotipuri la relatii, acolo unde e necesar, se face astfel: se da dublu clic pe segmentul corespunzator relatiei si in fereastra afisata, in campul Stereotype se tasteaza (sau se selecteaza dintr-o lista drop-down) numele stereotipului.

In figura 11.2 este ilustrata diagrama principala a cazurilor de utilizare pentru exemplul analizat:

In figura 11.3 este prezentat un exemplu de diagrama auxiliara a cazurilor de utilizare, in care apare o relatie de tip "utilizeaza". Din analiza cazurilor Selectie cursuri de predat si Cerere lista de cursuri s-a dedus ca in ambele apare cate o operatie de validare a identificatorului profesorului. Ca urmare, aceasta operatie s-a constituit intr-un caz de utilizare aparte (cu alte cuvinte, s-a efectuat o "factorizare" a cazurilor).

Probleme

Se cere sa se identifice si apoi sa se modeleze in Rational Rose actorii, cazurile de utilizare si relatiile aferente, pentru un sistem de rezervare a biletelor CFR care are urmatoarele cerinte:
Calatorii vor avea acces on-line la sistem, pentru a consulta mersul trenurilor, in speta oferta de trenuri intre 2 statii date.
Casierii vor accesa sistemul pentru a realiza, daca este posibil, rezervari la un anumit tren, pentru o anumita destinatie si un anumit numar de locuri. In cazul efectuarii rezervarii, sistemul va calcula costul, pe baza unor tabele de tarife. Casierul va confirma plata, iar sistemul va tipari biletele de calatorie.
Gestionarea bazei de date cu informatii legate de mersul trenurilor si tabelele de tarife va fi efectuata de un operator central.
Calatorii, prin intermediul casierilor, vor avea posibilitatea sa renunte la rezervari, caz in care sistemul va trebui sa calculeze suma de rambursat; aceasta va depinde de momentul renuntarii (inainte sau dupa plecarea trenului).
Se lasa la latitudinea proiectantilor alegerea informatiilor care trebuie introduse/extrase in cazul fiecarui caz de utilizare, precum si identificarea unor cazuri de exceptie posibile.

Bibliografie

[BoRuJa99] Grady Booch, James Rumbaugh, Ivar Jacobson  - "The Unified Modeling Language User Guide", Addison-Wesley, 1999
[Qua98] Terry Quatrani - "Visual Modeling with Rational Rose and UML", Addison-Wesley, 1998

Hosted by www.Geocities.ws

1