Sunteți pe pagina 1din 43

POO

Modelare I

1
Cuprins
 fazele dezvoltarii unui produs soft
 modelare
 UML
• diagrame use case
• diagrame de clase
• cum modelam in UML
• cum implementam in C++

D. Lucanu POO – Principii 2


Cum dezvoltam un produs soft?

D. Lucanu POO – Principii 3


Relatia client – dezvoltator software

D. Lucanu POO – Modelare 4


Dezvoltarea in cascada

D. Lucanu POO – Principii 5


Dezvoltarea in iteratii (RUP)

D. Lucanu POO – Principii 6


Dezvoltarea agila (extreme programming)

D. Lucanu POO – Principii 7


Important de tinut minte
 pentru proiectele realizate in timpul studiilor
• clientul este profesorul
• dezvoltatorul
• studentul (proiecte individuale)
• echipa de studenti (proiecte in echipa)
 mai multe despre metodologiile de dezvoltare a
produselor soft la cursurile de IP

D. Lucanu POO – Principii 8


Ce este un model
 modelarea este esentiala in dezvoltarea eficienta de
produse soft, indiferent de metodogia aleasa
 in principiu, rezultatele fazelor initiale si de elaborare
sunt specificatii scrise ca modele
 un model este o simplificare a realitatii, fara insa a
pierde legatura cu aceasta
 principalul motiv pentru care se construieste un
model: necesitatea de a intelege sistemul ce
urmeaza a fi dezvoltat
 cu cat sistemul este mai complex, cu atat importanta
modelului creste
 alegerea modelului influienteaza atat modul in care
problema este abordata cat si solutia proiectata
 in general, un singur model nu este suficient
D. Lucanu POO – Principii 9
UML – limbaj de modelare
 pentru a scrie un model, e nevoie de un limbaj de
modelare
 UML (Unified Modeling Language) este un limbaj si o
tehnica de modelare potrivite pentru programarea
orientata-obiect
 UML este utilizat pentru a vizualiza, specifica,
construi si documenta sisteme orientate-obiect
 la acest curs vom utiliza elemente UML pentru a
explica conceptele si legile POO
 instrumente soft free: Argouml (open source), Visual
Paradigm UML (Community edition)

D. Lucanu POO – Principii 10


Ce include UML 2.0
 diagrame de modelare structurala
definesc arhitectura statica a unui model

• diagrame de clase
• diagrame de obiecte
• diagrame de pachete
• diagrame de structuri compuse
• diagrame de componente
• diagrame de desfasurare (deployment)

D. Lucanu POO – Principii 11


Ce include UML
 diagrame de modelare comportamentala
definesc interactiunile si starile care pot sa apara la
executia unui model
• diagrame de utilizare (use case)
• diagrame de activitati
• diagrame de stari (state Machine diagrams)
• diagrame de comunicare
• diagrame de secvente (sequence diagrams)
• diagrame de timp (fuzioneaza diagrame de stari cu
cele de secvente)
• diagrame de interactiune globala (interaction
overview diagrams) (fuzioneaza diagrame de
activitati cu cele de secvente)
D. Lucanu POO – Principii 12
Cum sunt utilizate modelele UML
 pot fi utilizate in toate fazele de dezvoltare a
produselor soft
• analiza cerintelor, e.g.,
• diagramele cazurilor de utilizare
• proiectare, e.g.,
• diagramele de clase
• diagrame de comunicare/secvente
• diagrame de activitate
• implementare,
• diagramele constituie specificatii pentru cod
• exploatare, e.g.,
• diagrame de desfasurare
D. Lucanu POO – Principii 13
La acest curs vom insista …
 ... doar pe
• analiza cerintelor
• diagramele cazurilor de utilizare
• proiectare
• diagramele de clase
• diagrame de obiecte
• diagrame de comunicare
• diagrame de secvente
• implementare
• cum scriem cod C++ din specificatiile date de
diagrame
 mai mult la cursurile de IP
D. Lucanu POO – Principii 14
Ce este analiza OO
 analiza este focalizata mai mult pe intelegerea
domeniului problemei si mai putin pe gasirea de
solutii
 este orientata mai mult spre
• ce (… trebuie, … inseamna, … relatii exista, …)
• formulare si specificare cerinte
• investigarea domeniului
• intelegerea problemei
 descrie obiectele (conceptele) din domeniul
problemei

D. Lucanu POO – Principii 15


Diagramele cazurilor de utilizare
 modelul cazurilor de utilizare captureaza cerintele
 un caz de utilizare (use case) este un mijloc de a
comunica utilizatorului ce intentioneaza sistemul sa
faca
caz de
utilizare

multiplicitat
e

actor

relatia de
utilizare
D. Lucanu POO – Principii 16
Relatia de includere intre cazuri de ut.

D. Lucanu POO – Principii 17


Relatia de extindere intre cazuri de ut.

D. Lucanu POO – Principii 18


Proiectare OO (design)
 proiectarea se bazeaza pe solutia logica, cum
sistemul realizeaza cerintele
 este orientata spre
• cum
• solutia logica
• intelegerea si descrierea solutiei
 descrie obiectele (conceptele) ca avand atribute si
metode
 descrie solutiam prin modul in care colaboreaza
obiectele
 relatiile dintre concepte sunt descrise ca relatii intre
clase

D. Lucanu POO – Principii 19


Diagrama de clase
 include
• clase
• interfete
• relatii intre clase
• de generalizare/specializare
• de asociere
• de compozitie
• de dependenta

D. Lucanu POO – Principii 20


Clasa

nume clasa

atribute (date membre)

operatii (metode)

D. Lucanu POO – Principii 21


Relatia de generalizare/specializare

Cont
titular
sold
depune()
extrage()

ContDebit ContCredit

D. Lucanu POO – Principii 22


Relatia de generalizare/specializare

D. Lucanu POO – Principii 23


Relatia de generalizare/specializare

D. Lucanu POO – Principii 24


Relatia de generalizare/specializare in C++
class Figure class Ellipse
{ : public Circle
... {
}; ...
};
class Circle
: public Figure class Polygon
{ : public Figure
... {
};
};

in C++ gen/spec se
realizeaza prin relatie de
derivare

D. Lucanu POO – Principii 25


Relatia de generalizare/specializare in C++
 operatiile ‘perimeter()’ si ‘surface()’ se calculeaza
diferit de la figura la figura
class Figure {
public:
virtual void perimeter() { return 0; }
};
class Circle : public Figure {
public:
virtual void perimeter()
{ return 2 * 3.1415 * radius; }
}; polimorfism prin suprascriere
si legare dinamica

D. Lucanu POO – Principii 26


D. Lucanu POO – Principii 27
Interfata
 obiecte de tip Figura nu exista la acest nivel de
abstractizare
 clasa Figura este mai degraba o interfata pentru
figurile concrete (cerc, poligon, elipsa …)
• interfata = o colectie de operatii care
caracterizeaza comportarea unui obiect

D. Lucanu POO – Principii 28


Interfata in UML

relatia de
implementare
a unei interfete

D. Lucanu POO – Principii 29


Interfata in C++
 interfetele in C++ sunt descrise cu ajutorul claselor
abstracte
 o clasa abstracta nu poate fi instantiata, i.e., nu are
obiecte
 de notat totusi ca interfata si clasa abstracta sunt
concepte diferite
• o clasa abstracta poate avea date membre si
metode implementate
 in C++ o clasa este abstracta daca include metode
virtuale pure (neimplementate)

D. Lucanu POO – Principii 30


Clase abstracte in C++
class Figure {
public:
...
virtual void perimeter() = 0;
virtual void surface() = 0;
...
};

metode virtuale pure

D. Lucanu POO – Principii 31


Diagrame cu clase abstracte

clasa abstracta

daca interfata este


descrisa printr-o
clasa abstracta,
implementarea
interfetei se
realizeaza prin
mostenire si
suprascriere virtuala

D. Lucanu POO – Principii 32


Abstractizare prin parametrizare

void setValue(string newValue)


{
value = newValue;
}

poate fi parametrizat?

void setValue(double newValue)


{
value = newValue;
}

D. Lucanu POO – Principii 33


Clase parametrizate

parametru
parametru

D. Lucanu POO – Principii 34


Clase parametrizate in C++
template <class T>
class DisplayBox
{ declaratie
private: string label; parametri
private: T value;
public: DisplayBox(char *newLabel = "");
public: void setValue(T newValue); definitii
}; parametrizat
e
template <class T>
void DisplayBox<T>::setValue(T newValue)
{
value = newValue; utilizare
parametri
}

D. Lucanu POO – Principii 35


D. Lucanu POO – Principii 36
Ex. de ierarhie de clase param.: fluxuri STL

ios_base relatii de
mostenire

ios<>

istream<> ostream<>

istringstream<> ifstream<> iostream<> ofstream<> ostringstream<>

fstream<> stringstream<>

Dorel Lucanu Programarea calculatoarelor (C+ 37


+)
C++ intermezzo
 declarare obiect “fisier”
fstream f;
 scrierea intr-un fisier
f.open("test.txt", ios::out);
cout << "Umplere fisier\n";
while (ok)
{
cin.getline(buffer, 80, '#');
f << buffer;
cout << "Continui?[y/n]: ";
cin >> ans;
ok = (ans == 'y');
}
f.close();
D. Lucanu POO – Principii 38
C++ intermezzo
 citirea dintr-un fisier
f.open("test.txt", ios::in);
cout << "Afisare fisier\n";
while (!f.eof())
{
f.getline(buffer, 80);
cout << buffer << endl;
}
f.close();

D. Lucanu POO – Principii 39


Relatii de asociere
relatie de asociere
unidirectionala
rol

model model

multiplicitate

view controller

relatie de
asociere
D. Lucanu bidirectionala
POO – Principii 40
Relatii de asociere mai simplificat

relatie de asociere
unidirectionala

rol

multiplicitate model model

view controller

relatie de asociere
bidirectionala

D. Lucanu POO – Principii 41


Relatii de asociere in C++
class ControllerAgenda referinta la obiectul
{ Agenda asociat
private:
Agenda *model;
referinta la obiectul
ViewAgenda *view; ViewAgenda asociat
public:
void setView(ViewAgenda *newView);
};
class ViewAgenda
{
private:
ControllerAgenda *controller;
Agenda *model; referinta la obiectul
DisplayBoxString dbOwner; Agenda asociat
Menu menu;
};

D. Lucanu POO – Principii 42


Asociere agenda - fisier

D. Lucanu POO – Principii 43

S-ar putea să vă placă și