Documente Academic
Documente Profesional
Documente Cultură
1 /58
CAPITOLUL 8.
Proiectarea orientat pe obiecte i
Unified Modelling Language
(UML)
ABLOANE DE PROIECTARE
2 /58
3 /58
4 /58
Ce este UML ?
UML este o notaie standard internaional pentru analiza i proiectarea orientate
pe obiecte. Este definit de Object Management Group (www.omg.org)
UML = Unified Modelling Language
UML furnizeaz elemente de notaie descrise n detaliu n
Ian Graham, Object-Oriented Methods (Addison-Wesley, 2001);
UML permite dezvoltare bazat pe componente.
Dar UML nu nseamn numai notaii ci i un anumit principiu de gndire i
modelare. Astfel, un inginer software trebuie s tie i proceduri de utilizare a
notaiilor respective, n afara dezvoltrii efective de aplicaii: modelarea
cerinelor afacerii (business), procesul de dezvoltare propriu-zis, gestiunea
proiectelor (project management), metrici (msuri), trasabilitate, gestiunea
reutilizrii software (reuse).
5 /58
UML. Introducere
Obiecte. Exemple.
6 /58
UML . Introducere
Comportament
7 /58
UML. Introducere
Clase. Exemple
8 /58
UML. Introducere
9 /58
UML. Introducere
Relaii ntre clase i obiecte
Asociaii relaii care se manifest la rulare pentru a permite schimb de mesaje
ntre obiecte (reprezentate prin linii simple); un mesaj este n ultim
instan un apel de metod
Agregare relaia stabilit atunci cnd un obiect conine logic un alt obiect
(romb la captul dinspre proprietar)
Compoziie - n care proprietarul este explicit responsabil pentru crearea
obiectului parte (este o form tare de agregare)
Generalizare (sau relaie este-parte-a(al)) linii cu sgei umplute;
este inversul motenirii
Dependen- (linii punctate cu sgei deschise) cnd exist o dependen
ntre parteneri (ex. un software presupune utilizarea unui pachet n
accepiunea din JAVA)
Multiplicitate numrul obiectelor care particip ntr-o relaie, pentru fiecare dintre cei
implicai (numerele se pun la fiecare capt al liniei care simbolizeaz relaia)
FIS - Vasile StoicuStoicu-Tivadar
10 /58
UML. Introducere
Tipul de asociere
Motenire(Gen-Spec)
Agregare
Compoziie
Clas
Subclas
ntreg
ntreg
Asociere unidirecional
Client
Asociere bi-direcional
Dependen
Simbol de asociere
Client
FIS - Vasile StoicuStoicu-Tivadar
Clas
Superclas
Parte
Parte
Furnizor
B
Furnizor
11 /58
UML. Introducere
Diagrame de clase
12 /58
UML. Introducere
Diagrame UML i notaii
UML cuprinde un set bogat de notaii i
semnatici i le grupeaz pe tipuri de
reprezentri (diagrame)
O not text - un element de diagram fr
impact semantic (dreptunghi cu colul din
dreapta sus ndoit) este un comentariu pentru a
mbunti nelesul
Constrngere restricie suplimentar adugat
unui element de modelare (ntre paranteze
acolad, de obicei n cadrul unei note text)
Exemplu: constrngeri de timp evideniate pe
diagrame de secven
Note text i constrngeri
13 /58
UML
Stereotipul - o clas a unei
entiti n UML care permite
utilizatorilor extinderea
limbajului de modelare pentru a
permite acestora o mai bun
exprimare conform necesitilro
proiectelor
(notaie cu paranteze
ascuite, pe liniile ce
reprezint relaia n care e
implicat entitatea n cauz)
Exemple de stereotipuri
FIS - Vasile StoicuStoicu-Tivadar
14 /58
15 /58
Cazuri de
Utilizare
Subsisteme
FIS - Vasile StoicuStoicu-Tivadar
16 /58
Exemplu de exprimare a
Cerinelor, inclusiv prin
constrngeri (v. Notele
text)
17 /58
18 /58
20 /58
Diagrame de stare
21 /58
22 /58
23 /58
24 /58
Dup ce modelul
obiectelor a fost
creat, cazurile de
utilizare de la nivelul
sistemului pot fi
rafinare pentru a lua
n considerare
obiectele identificare
i relaiile dintre
acestea.
Strategii cheie
pentru
identificarea
obiectelor
Cel mai bune stfel
de strategii:
Strategy
Description
Underline the
noun
Identify causal
objects
Identify
services
(passive
Identify realworld items
Identify
physical
devices
Identify key
concepts
25 /58
26 /58
Definirea
structurii
obiectelor
Asocierile
Sunt logic bidirecionale dac nu se definesc constrngeri explicite.
Exemple: El are un cine.
Cinele i aparine.
sau
Floor Request Button trimite o cerere la Elevator (Lift)
Elevator primete o cerere de la Floor Request Button (ButonCerereEtaj).
n practic sunt exercitate ntr-un singur sens.
Exemplu: Dog.SendTail->Wag
mai degrab dect Tail.SendDog->Wag
(Caine.TrimiteCatreCoada->DaDinCoada mai degrab dect
Coad.TrimiteLaCaine->DaDinCoada)
Cel mai adesea sunt implementate ca i pointeri sau referine la obiecte.
Exemplu:
Class Dog {
Tail* pT;
public:
void BeHappy(void) { pT->Wag(20); };
void BeSad(void) { pT->Wag(2); };
void BeExcited(void) { pT->Wag(50); };
void BeMelancholy(void) { pT->Wag(5); };
};
Asocierile navigabile ntr-o singur direcie sunt cunoscute sub numele de asocieri clientclient-server
Serverele nu trebuie s tie despre clieni deoarece ar introduce asfel cuplaje patologice (nedorite,
bolnave) i adugarea de noi clieni ar fi mai dificil
Este necesar un singur nume de rol pentru o asociere unidirecionale (tipic, la captul dinspre server)
Asocierile PeerPeer-toto-peer (adic egale n ranG, fr delimitare client-server) sunt mai puin uzuale :
Fiecare obiect trebuie s tie despre cellalt
n general sunt implementate ca dou relaii independente client-server
FIS - Vasile StoicuStoicu-Tivadar
27 /58
Compozi
Compoziia este o form tare de agregare, n care prile
(componentele) sunt n ntregime n responsabiliyayea
clasei compozite.
Compozitele trebuie s i creeze i distrug componentele.
Componentele nu pot fi partajate nter compozite.
Compoziia este reprezentat prin includere grafic a
componentelor n cadrul compozitelor sau prin romb de
agregare umplut.
Dac se folosete includerea, multiplictatea trebuie precizat
n colul din dreapta sus.
28 /58
29 /58
30 /58
class Animal {
public:
virtual void speak (void)=0; // virtual base class
};
class dog: public Animal {
public:
void speak (void) { cout << Arf ! << endl; } ;
};
class fish: public Animal {
public:
void speak (void) { cout << Blub! << endl; } ;
};
class cat: public Animal {
public:
void speak (void) { cout << Miew ! << endl; } ;
};
Example pentru extensie :
class dog: public Animal {
public:
void speak (void) { cout << Arf ! << endl; } ;
void slobber(float slobberIndex);
void AttackJogger(int fearLevel);
};
PSL:
void main(void) {
Animal *A;
dog d;
fish f;
cat c;
A=&d;
A->speak();
A=&f;
A->speak();
A=&c;
A->speak();
};
Clas
Clas abstract acea clas care nu poate fi instaniat direct (conine cel puin o funcie virtual
pur)
FIS - Vasile StoicuStoicu-Tivadar
31 /58
32 /58
Temporizator re-armabil
nerepetititv
35 /58
36 /58
37 /58
38 /58
Cnd Modelul Atrial recepioneaz un semnal de la Modelul ventricular n starea Waiting (ateptare), emitorul
de fapt determin propagarea la Modelul Atrial a unui eveniment APace (Stimulare). Dup ce Modelul Atrial
realizeaz stimularea (adic trimiterea unui semnal electric la un electrod din inim), trimite un eveniment
APaceDone napoi la Modelul Ventricular.
Prin trimiterea acestor evenimente n ambele sensuri ntre cele dou obiecte care colaboreaz, mainile lor de
stare rmn sincronizate.
FIS - Vasile StoicuStoicu-Tivadar
39 /58
40 /58
41 /58
42 /58
class Bunch_O_Objects {
node* p;
node current_node;
public:
void insert(node n);
node* next(void);
node* previous(void);
node* first();
node* last();
node* find(node &n);
};
class Bunch_O_Objects {
node* p;
public:
void insert(node n);
node* next(node* n);
node* previous(node* p);
friend class BOO_Iterator;
};
class BOO_Iterator {
node* current_node;
Bunch_O_Objects& BOO;
BOO_Iterator(Bunch_O_Objects& B) : BOO(B)
{current_node=BOO . P; };
node* next(void);
node* previous(void);
node* first();
node* last();
node* find(node &n);
};
FIS - Vasile StoicuStoicu-Tivadar
43 /58
Exist reguli euristice (rezultate din experien) care ne ajut la identificarea operaiilor:
furnizarea unui set ortogonal de operaii (ct mai diferite, disjuncte) primitive (elementare, la ultimul nivel
de simplitate) de interfa
ascunderea structurii interne a clasei prin operaii de interfa care expun doar caracteristicile semantice
eseniale ale clasei
furnizarea unui set de operaii ne-primitive pentru a impune utilizarea unor reguli de protocol i
surprinderea celor mai utilizate combinaii de operaii
o clas printe comun ar trebui s furnizeze operaii comune utilizate de clasele nrudite
fiecare responsabilitate a unei clase sau a unui obiect trebuie s corespund unei combinaii de operaii,
atribute sau asociaii
toate mesajele direcionate spre obiect trebuie s fie acceptate i traduse n aciuni definite (evenimente
tratate de modelul de stare al clasei i mesajele prezentate n scenarii trebuie s aib operaii care s le
accepte, cu operaii de tip get sau set -citire sau scriere valoare-care s asigure accesul la atribute
oridecteori este necesar)
aciunile i activitile identificate pe diagramele de stare trebuie s se traduc n operaii definite n clasele
care furnizeaz aceste aciuni
Operaia
acquire()
determin
operaiile trebuie s testeze invarianii precondiionali
class sensor
respectarea unui protocol de aducere
{
la zero a senzorului nainte de citirea
Exemplu:
void doZero();
valorii. Nu doar asigur precondiia
Un senzor trebuie s fie adus nti la zero
int get();
pentru operaia get() prin ndeplinirea
nainte de a fi folosit; clasa senzor poate
public:
necesitii de aducere la zero, dar de
eventual n mod simplist s furnizeze
int acquire(void) { asemenea simplific utillizarea clasei.
operaiile primitive doZero() i get() sau
doZero();
Deoarece doZero() i get() sunt
poate s furnizeze o operaie acquire() care
return get();
totdeauna
apelate
n
aceast
le combin:
};
succesiunie, combinarea lor ntr-o
};
operaie non-primitiv de utilitate
curent este de dorit.
FISFIS- Vasile StoicuStoicu-Tivadar
44 /58
Instrumente CASE
Exist cteva instrumente comerciale de tip CASE (Computer Aided Software Engineering instrumente
software utile n mai multe etape din ciclul de via al programelor, nu numai la codificare/testare, ca i mediile
utilizate la laboratorul de PC sau FIS) care ofer suport pentru utilizarea UML . Multe dintre acestea sutn
editoare care analizeaz corectitudinea sintactic a modelelor UML i unele chiar genereaz cod (de fapt un
schelt al viitoarei aplicaii) de folos ulterior la codificare.
Cea mai cunoscut astfel de aplicaie este Rose din pachetul Rational (IBM).
http://www-01.ibm.com/software/awdtools/developer/rose/enterprise/index.html
Este conceput s se integreze n suita Rational care ofer suport pentru toate etapele de dezvoltare
software, ndeosebi dac se urmeaz metodologia RUP- Rational Unified Process (IBM).
Permite crearea cazurilor de utilizare, a diagramelor de clase care le realizeaz, a tuturor celorlalte
diagrame UML
Marele avantaj al mediului este c se integrez n suita Rational i astfel activitile de dezvoltare
software sunt integrate unitar inclusiv la nivelul gestiunii configuraiilor, testare etc.
Aplicaia este capabil s genereze cod n C++, JAVA, sau datorit unor extensii recente, chiar n .NET
(implementrile metodelor nu sunt generate)
Exist i aplicaii unele chiar gratuite care ns nu sunt de complexitatea acestui instrument.
Exemplu: StarUML
http://staruml.sourceforge.net/en/
FIS - Vasile StoicuStoicu-Tivadar
45 /58
ABLOANE DE PROIECTARE
(Design Patterns)
46 /58
abloane de proiectare
Exemplu:
Consequences: The smart pointer
makes the design more robust in the
presence of thrown exceptions, but it
increases the code complexity somewhat
and requires an additional level of
indirection for each pointer reference.
Although this can be made syntactically
invisible to the user, it involves a small
run-time overhead. Enforcement of the
smart pointer policy cannot be
automated, but must be ensured by
consensus and review. Further, if smart
and raw pointers are both applied
against the same object, reference
counting should be disabled.
48 /58
ABORDRI GENERICE
49 /58
Exemple de abloane
50 /58
ablonul Interface
De ce interfa ?
O implementare comun poate fi potrivit pentru o
varietate de utilizri. Dac o clas poate furniza diverse
interfee, o singur implementare poate satisface multe
necesiti.
Exemple: arbori, cozi sau stive pot de fapt s fie
implementate ca liste nlnuite.
Prin separarea de utilizator prin intermediul unei
interfee, devine mai uoar schimbarea unei
implementri sau adugharea unei noi interfee diferite.
Exemplu: devine mai uoar adugarea unui nou
container - un vector extensibil prin crearea unei
interfee care asigur clienilor serviciile cerute de
acetia dar folosesc operaiile promitive ale
containerelor existente
Interfeele pot fi construite astfel ca s asigure diverse
nivele de acces.
ablonul Container
Cnd un obiect are asociere 1-la-mai muli i dorim s
mbuntim reuzabilitatea, o soluie este ca acea clas
de la captul 1 s gestioneze un set de obiecte stocate
ntr-un container (v. cursul despre tipare).
Adugarea unui obiect container pentru a gestiona
obiectele agregate nu rezolv n ntergime problema,
deoarece adesea mai muli clieni doresc s acceseze
simultan containerul. Pentru a rezolva problema, se
folosesc iteratori n conjuncie cu containerele (in
evidena poziiei din container a fiecrui client).
Standard Template Library (STL) - parte a
standardului ANSI C++ furniezeaz o varietate de
containere i iteratori (v. cursul despre tipare).
53 /58
ablonul Observer
Problema: este uzual situaia n care o singur
surs de informaie acioneaz ca un server
pentru mai muli clieni care trebuie s i
actualizeze autonom datele cnd acestea se
schimb. Pentru aplicaii n timp real cu date
citite de senzori, problema este cum
proiectm o modalitate eficient de
notificare (anunare) a tuturor clienilor
Soluia: ablonul
Observer (sau PublishSubscribe) un singur obiect (Server)
furnizeaz automat date pentru clienii si
(Observers). Acestea sunt clase abstracte
care au clase derivate (Concrete Server i
Concrete
Observer)
care
adaug
comportamentul specializat pentru situaia
concret de funcionare.
Observerii se nregistreaz la server prin apelul
metodei Subscribe() a acestuia i se dezaboneaz prin apelul metodei Detach() . Atunci
cnd serverul primete un apel subscribe, creaz
un obiect Notification Handle care include adresa
obiectului.
Politica de actualizare definete criteriile dup
care datele sunt trimise la observer - periodic,
episodic sau epi-periodic (amndou) .
54 /58
Observer cont. 1
ablonul Observer este util dac muli clieni vor s
acceseze un singur obiect. ablonul simplific
crearea acestor clieni deoarece dup ce acetia
se nregistreaz, vor fi notificai asupra datelor,
conform politicii de actualizare definite.
Observer cont. 2
56 /58
ablonul
Model-View-Controller (MVC)
57 /58
Mulumesc pentru
atenie !