Cele
"4+1" Proiectii ale Arhitecturii Software
Arhitectura
software nu este ceva uni-dimensional, ci se compune dintr-un numar de
proieictii distincte, fiecare din ele modeland o anumita proiectia arhitecturala.
Figura de mai jos reprezitna diferitele proiectii ale arhitecturii software.
In aceasta lucrare vom puncta elementele centrale ale fiecarei perspective,
impreuna cu notatia UML utilizata pentru reprezentarea deciziilor arhitecturale
ce corespund fiecarei perspective.
-poza
Proiectia
Logica (Logical View)
Aceasta
perspectiva arhitecturala se refera la cerintele functionale ale
sistemului - adica ce anume trebuie sa contina sistemul in termenii serviciilor
oferite utilizatorilor. Perspectiva logica este redata prin intermediul
diagramelor de clasa, care contin clasele din care este format
sistemul impreuna cu relatiile care reprezinta abstractiiunile-cheie ale
sistemului aflat in procesul de dezvoltare. Majoritate notatiei UML este
folosita pentru acest tip de diagrame (ex. clase, pachete, relatii de asociere,
agregaere etc). Vom discuta toate aceste aspecte in ultima
lucrare.
Mecanisme-Cheie.
Proiectare Tactica.
Aceasta
perspectiva arhitecturala este abordata la inceputul fazei de elaborare
pentru definirea claselor si a pachetelor care reprezinta abtractiunile
fundamentale ale domeniului problemei. Pe masura ce proiectul evolueaza,
alte clase si pachete vor fi adaugate modelului pentru a reflecta deciziile
luate cu privire la mecanismele-cheie ale sistemului. Un mecanism-cheie
este o decizie cu privire la anumite standarde,
politci si practici uzuale. Selectia unui
mecanism-cheie pentru un sistem este adesea considerata o proiectare
tactica. "O proiectare tactica
deficitara poate ruina si cea mai profunda arhitectura, ceea ce inseamna
ca echipa de proiectare trebuie sa elimine acest risc prin identificarea
explicita a politicii cheie a proiectului".
Cateva dintre mecanismele-cheie cele mai uzuale sunt: alegerea unui limbaj
de implementare, stocarea persistenta a datelor, aliura interfetei cu utilizatorul,
tratarea erorilor, mecanisme de comunicare, mecanisme de distribuire si
migrare a obiectelor.
Astazi exista o multime de solutii consacrate - tipare (patterns) - ce pot fi folosite pentru a implementa deciziile mecanismelor-cheie pentru sistemele pe care le dezvoltam. Este extrem de recomandabil ca inainte de a ne "avanta" spre gasirea unor noi solutii, sa vedem daca nu am putea folosi una din aceste solutii consacrate.
Exemple
de Mecanisme-Cheie
-limbajul folosit pentru implementare
-GUI
-clasele persistente (shadow classes) - pachet DB pt shadow classes
- tratarea exceptiilor
- alegerea unei biblioteci de clase generale
Proiectia
Modulara (Compozitionala, Structurala) (Component View)
Aceasta
perspectiva arhitecturala se ocupa cu organizare pe module a software-ului
in cadrul unui mediu de dezvoltare dat. Proiectia modulara are in vedere
realizarea cerintelor legate de usurarea procesului de dezvoltare si a
administrarii software-ului, precum si facilitarea reutilizarii in contextul
constrangerilor impuse de un anumit limbaj de implementare sau un anumit
instrument de dezvoltare. Elementele de modelare corespunzatoare acestei
perspective sunt pachetele si componentele impreuna cu conexiunile
dintre acestea. Acestea sunt reprezentate in notatie UML dupa cum urmeaza:

Pachete.
Organizarea Ierarhica.
In
aceasta perspectiva arhitecturala, un pachet reprezinta o partitionare
fizica a sistemului. Pachetele in perspectiva compozitionala sunt adesea
numite subsisteme. Pachetele sunt origanizate intr-o ierarhie de nivele,
in care fiecare nivel are o interfata bine definita. Faptul ca un sistem
orientat pe obiecte tinde sa fie un sistem organizat pe mai multe nivele
este un lucru natural. Nivele cele mai des intalnite in majoritate
sistemelor sunt (de sus in jos):
Exemplul
Sistemului de Inregistrare
Proiectia
modulara se reprezinta prin intermediul unor diagrame de componente. Pentru
fiecare sistem exista o diagrama principala de componente in care de obicei
sunt redate pachetele (subsistemele) definite pentru acel sistem. Avand
in vedere si ierarhia de nivele amintita mai sus, aceasta diagrama arata
astfel pentru exemplul nostru:

Proiectia Run-Time (Procesuala, de Rulare) (Process View)
Aceasta perspectiva arhitecturala este focalizata asupra implementarii structurii sistemului la nivel run-time. Aceasta perspectiva ia in considerare cerinte cum ar fi performanta, fiabilitatea, scalabilitatea, integritatea, sincronizarea, management-ul sistemului. Pentru a vizualiza componentele run-time si executabile care compun sistemul care a fost dezvoltat sunt utilizate diagramele de componente. Componentele sunt legate intre ele prin relatii de dependenta. Componentele run-time arata maparea claselor in biblioteci cum sun applet-urile Java, componentele Active X, si bibliotecile dinamice (DLL). Componentele executabile indica interfetele si relatiile de dependenta intre executabile.
In Rational Rose informatia despre perspectiva procesuala este realizata prin intermediul diagramelor realizae in sectiunea Component View. Componentele (run-time sau executabile) sunt atasate pachetelor care reprezinta subsistemul de care ele apartin. Diagramele sunt create pentru reprezenta dependentele intre diferitele tipuri de componente din sistem.
Proiectia
Run-Time in Problema Inregistrarii Cursurilor
Decizia
proiectantilor sistemului de inregistrare a fost aceea de a utiliza doua
biblioteci run-time (DLL) - una legata de obtinerea informatiilor despre
cursuri si oferte de cursuri, si una pentru informatii legate de baza de
date. Aceasta decizie a fost luata avand in vedere faptul ca structura
cursurilor si strategia de alegere a bazei de date sunt cele mai predispuse
la schimbari. Facandu-le biblioteci, in versiunile ulterioare doar aceste
biblioteci vor trebui inlocuite pentru implementarea schimbarilor. Deasemenea
s-a decis crearea a trei fisiere executabile - Registrator.exe; Student.exe
si Profesor.exe. Intre executabile nu exista nici o legatura. Diagrama
de componente pentru executabilul Profesor.exe este redata mai jos:

Proiectia Logistica (Topologica, de Dispunere) (Deployment View)
Aceasta perspectiva arhitecturala implica maparea sistemului software pe nodurile de procesare. Perspectiva logistica arata configuratia elementelor de procesare run-time si procesele software care "vietuiesc" in ele. Aceasta perspectiva are in vedere cerinte cum ar fi scalabilitatea, performanta de timp sau fiabilitatea. Reprezentarea acestei perspective se realizeaza prin diagrame logistice care se compun din diferite noduri de procesare impreuna cu conexiunile lor in sistem. In UML un nod de procesare este reprezentat astfel:

Exemplul
In
figura de mai jos este prezentat exemplul unei astfel de diagrame logistice
pentru exemplul

Proiectia Use-Case (Comportamentala, Behaviorala, Functionala) (Use Case View)
Comportamentul unui sistem aflat in curs de dezvoltare, adica functionalitatea pe care sistemul trebuie sa o ofere, este documentata prin intermediul acestui model care ilustreaza functiile pe care sistemul trebuie sa le indeplineasca (use-cases), vecinatatea sistemului (actorii) si relatiile dintre aceste functii si actori (diagramele use-case). Cel mai important rol al modelului use-case este acela de comunicatie. Acest model ofera mijlocul de comunicare ce poate fi utilizat atat de catre beneficiarii sau utilizatorii sistemului cat si de catre dezolvatorii sai pentru a discuta comportarea si functionalitate sistemului.
Actorii
Actorii
nu sunt parte a sistemului - ei reprezinta orice sau pe oricine
care trebuie sa interactioneze cu sistemul.
Un actor poate sa introduca informatii in sistem, sa receptioneze informatii
din sistem, fie sa faca ambele operatii. In mod normal actorii sunt detectati
din enuntul problemei si pe baza discutiilor purtate cu beneficiarii sistemului
sau cu experti in domeniu. Urmatoarele intrebari pot fi utile pentru
identificarea actorilor dintr-un sistem:
Use-Cases
Un
use-case modeleaza un dialog intre un actor si sistem.
Use-case-urile reprezinta functionalitatea sistemului, adica facilitatile
oferite de sistem unui actor. Colectia use-case-urilor pentru un
sistem reprezinta totalitatea modalitatilor in care un sistem poate fi
utilizat. Definitia formala a unui use-case este: Un
use-case este o secventa de tranzactii efectuate de sistem care
produc rezultate masurabile pentru un anumit actor.
Urmatoarele intrebari ar putea fi utile in identificarea UseCase-urilor pentru un sistem:

Tipuri
de Relatii In Proiectia Use-Case
Intre
un actor si un use-case poate exista o relatie de asociere. Acest
tip de asociere este adesea referita ca fiind o asociere de comunicare
intrucat reprezinta comunicarea dintre un actor si un use-case. O
astfel de asociere poate fi navigabila in ambele directii (de la
actor la use-case si invers), sau poate fi navigabila numai intr-o directie.
Sensul de navigare pentru o astfel de asociere indica cine a initiat
comunicarea. In figura de mai jos, actorul comunica cu doua use-case-uri,
in ambele cazuri actorul initiind comunicarea.

In figura anterioara mai putem observa ca intre doua use-case-uri pot exista doua tipuri de relatii: uses si extends. Mai multe use-case-uri pot avea in comun anumite "blocuri" de functionalitate. Aceasta functionalitate comuna este prin urmare plasata in use-case-uri separate, pentru a se evita fi doumentarea repetata a acelei funcionalitati. Relatia de acest tip a fost denumita uses.
In contrast cu aceasta, relatia de tip extends este utilizata pentru a indica: un comportament optional sau un comportament care se va executa doar in anumite conditii.
Stereotipuri
Limbajul
de modelare UML are definit un conceput numit stereotip, care
permite extinderea elementelor fundamentale de modelarea ale limbajului
pentru a crea noi elemente de modelare. Prin urmare, stereotipurile permit
UML-ului sa aiba definite un set minimal de simboluri care pot fi extinse
acolo unde este necesar pentru a oferi un instrument adecvat si semnificativ
de comunicare pentru sistemul particular care se dezvolta. Numele unui
stereotip este inclus intre simbolurile "<<" si ">>" ca in figura
de mai sus. Mai sus, folosirea stereotipurile a fost necesar in contextul
relatiilor dintre use-case-uri pentru a face distinctie intre relatia
de tip uses si cea de tip extends, intrucat ambele sunt reprezentate
prin intermediul unei sageti de generalizare.
Use-Case
Diagrams
O
diagrama use-case este o reprezentare grafica a unora sau a tuturor actorilor
si use-case-urilor precum si a interactiunii dintre ele identificate pentru
sistemul aflat in curs de dezvoltare. Pentru fiecare sistem se defineste
in mod uzual o diagrama use-case principala (Main Use-Case Diagram) care
reprezinta o imagine a limitelor sistemului (indicate de actori) precum
si a functionalitatilor majore oferite de sistem (indicate prin use-case-uri).
Alte diagrame use-case pot fi create pe masura ce sunt necesare. Cateva
exemple ar putea fi:
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
[Quatr98]
T. Quatrani - "Visual Modeling with Rational Rose and UML", Addison-Wesley,
1998
[Booch95]
G. Booch - "Object Solutions", Addison-Wesley, 1995