Sunteți pe pagina 1din 16

Programarea orientată obiect

Programarea orientată obiect

• Programarea haotică
• Epoca de aur a programatorilor

• Complexitatea software -> criza software

• Programarea structurată
• Programarea orientată obiect
– Conceptele apar din anii ’60 ( limbajul Simula)

• Limbaje
• Procedurale
• Hibrid
• Pur obiectuale
Modelul de date orientat obiect

Modelul clasic: Ce trebuie făcut cu datele?


date iniţiale -> prelucrări (algoritmi - subprograme) => rezultate

Modelul OO: Care sînt datele şi legăturile dintre ele?


modelarea realităţii pentru rezolvarea problemelor
Program = colecţie de modele care interacţionează pentru a produce rezultatul aşteptat

Proiectarea orientată obiect – creare unui model informatic al realităţii


• identificarea obiectelor şi a proprietăţilor lor semnificative
• identificarea operaţiilor care afectează fiecare obiect şi a celor
care pot fi iniţiate de el
• stabilirea vizibilităţii fiecărui obiect în relaţie cu celelalte
(proprietăţi)
• stabilirea interfeţei fiecărui obiect (interacţiuni)
• implementarea fiecărui obiect
• utilizarea obiectelor
Modelul de date orientat obiect
Concepte
• abstractizare
• obiect, clasă
• atribut, metodă
• memorie: spaţiu propriu, spaţiu extins
• încapsulare
• moştenire
• polimorfism
Modelul de date orientat obiect

Abstractizare
• simplificarea realităţii => modele
Obiect
• model informaţional al unei entităţi din lumea reală, care are proprietăţi şi
comportament specific
Clasă
• obiectele cu aceleaşi proprietăţi şi comportament similar => tip de dată
Atribute
• date, descriu proprietăţile
• setul de valori = starea obiectului
Metode
• subprograme, implementează comportamentul
• apel metodă = transmitere mesaj, acţiune asupra obiectului
• execuţie metodă = răspuns la mesaj, reacţie a obiectului, poate duce la
modificarea stării (are loc în contextul obiectului)
Modelul de date orientat obiect
Exemplu:
• entitatea număr complex
- proprietăţi: parte reală, parte imaginară
- comportament: operaţii matematice cu numere complexe (adunare,
scădere, înmulţire, împărţire, modul, conjugat)

Clasa Complex Obiecte

P_ reală (float)
P_ imaginară (float) a(1.0, 1.0)
b(3.5, -2.7)
Conjugat c(-4.9, 1.0)
Suma d(-2.0, -6.1)
Înmulţire
Modul
Diferenţă b reprezintă numărul
Împărţire complex 3.5-2.7i
Modelul de date orientat obiect
Segment de cod Seg. date / stivă Heap
Spaţiul de memorie al obiectului
– atribute
– adresa tabelei de metodeV
M
Spaţiu propriu T
Spaţiu extins
Metode (cod
Model clasic, model referinţă
Obiect Spaţiu extins
executabil) propriu-zis

Obiect V
M
(referinţă) T

Metode (cod Obiect


executabil) propriu-zis

Spaţiu extins
Modelul de date orientat obiect

Încapsulare
• aducerea împreună a datelor şi subprogramelor în cadrul unui model
• ascunderea unor atribute şi a detaliilor de implementare a comportamentului
(metodelor). Rol în securitatea obiectelor (controlul accesului la starea şi
funcţionalitatea obiectelor)
• Parte publică
• interfaţa obiectului cu lumea înconjurătoare (la limită doar metode).
• Accesul la atribute poate fi direct sau prin controlat prin intermediul metodelor
de acces accesorii
• Parte privată
• accesibilă doar obiectului (date interne, metode interne, detalii de
implementare a interfeţei)

Partea Partea
ascunsă vizibilă interacţiuni mediul
(inaccesibilă (interfaţa) extern
)
• Exemplu: clasa stivă (ca structură dinamică)
atribute: cap, dimensiune maximă (private)
metode : push, pop, empty, full (publice)
Modelul de date orientat obiect

Moştenire
• Relaţie între clase
• Permite obţinerea unei clase noi (derivată) din una sau mai multe
clase existente (de bază). Toate atributele şi metodele clasei de bază
se regăsesc (ca atare sau modificate) în clasa derivată.
• Moştenire simplă: o singură clasă de bază
• Moştenire multiplă: mai multe clase de bază

• Ierarhie de clase: relaţii de moştenire definite pe o mulţime de clase


• Moştenire simplă => arbore ierarhic (o rădăcină)
• Reutilizare
• Specializare / generalizare
Modelul de date orientat obiect
• Exemplu:
– clasa punct (de bază) Punct
int X
• atribute : x, y int Y X= 100
Desenează() Y= 100
• metode : desenează, distanţa float Distanţa(p: punct)

– clasa cerc (derivată din clasa punct)


Cerc
• atribute noi: raza
int Raza X= 200
• metode noi: arie, desenează float Arie() Y= 200
Desenează() Raza= 50
=>
– clasa cerc va conţine următoarele:
• atribute : x, y, raza
• metode : desenează (punct), distanţa, arie, desenează
(cerc)
Modelul de date orientat obiect
Polimorfism
Concept apărut la limbajele cu tip: capacitatea unui subprogram de a exprima
prelucrările independent de tipurile parametrilor

Polimorfism în limbaje cu tip


– ad-hoc (supraîncărcare): subprograme cu acelaşi nume dar parametri diferiţi ca
număr şi/sau tip
– de incluziune: tipuri incluse (ex. tipul întreg e inclus în tipul real)
– parametric (genericitate): tipurile sînt transmise ca parametri (unele limbaje)

Polimorfism în limbaje OO:


– ad-hoc: metode cu acelaşi nume în clase diferite.
– de incluziune = de moştenire
clasa derivată este inclusă în clasa de bază
(de exemplu clasa cerc e inclusă în clasa punct)
Modelul de date orientat obiect
Legarea statică a metodelor
în funcţie de contextul apelului, se poate determina la compilare ce metodă
este apelată

Legarea dinamică a metodelor


nu se poate determina la compilare ce metodă este apelată, ci doar la
momentul execuţiei => cod suplimentar inserat de compilator pentru
decizie

Exemplu
Fie clasele punct şi cerc // exemplul 1 // exemplul 3
punct x; x.deseneaza; if (…) po = &x;
cerc y; else po = &y;
punct* po; // exemplul 2
y.deseneaza; po->deseneaza;
Lucrul cu obiecte în C++
Definirea claselor
class nume { descriere membri; };

Descriere atribut
tip nume;

Descriere metodă
atribute,
tip nume(lista parametri) metode
{ descriere corp }
sau
tip nume(lista parametri);

ulterior
tip_rezultat nume_clasă::nume_metodă(lista parametrilor)
{ descriere corp }

Declararea obiectelor
nume_clasă nume_obiect;
nume_clasă* p_obiect;
Lucrul cu obiecte în C++
Exemplu: clasa număr complex

class Complex { float p_reala, p_imaginara;


void Afiseaza();
};

void Complex::Afiseaza()
{ printf("\n%5.2f%ci*%5.2f\n", p_reala, p_imaginara>=0?'+':'-',
p_imaginara>=0?p_imaginara:-p_imaginara);
}

Complex tc;

Modificatori de acces
public
private
protected
Lucrul cu obiecte în C++
Exemplu: clasa număr complex
void Complex::SetR(float r)
class Complex { float p_reala,p_imaginara; { p_reala=r;
public: }
void Afiseaza(); void Complex::SetI(float i)
float GetR(); { p_imaginara=i;
float GetI(); }
void SetR(float r);
void SetI(float i); void main()
}; { Complex tc;
void Complex::Afiseaza() Complex *pc;
{ printf("\n%5.2f%ci*%5.2f\n", p_reala, tc.SetR(5);
p_imaginara>=0?'+':'-', tc.SetI(-4);
p_imaginara>=0?p_imaginara:- tc.Afiseaza();
p_imaginara); pc=&tc;
} pc->Afiseaza();
pc->SetR(-2);
float Complex::GetR() pc->SetI(3);
{ return p_reala; pc->Afiseaza();
} }
produce pe ecran următorul rezultat:
float Complex::GetI() 5.00-i* 4.00
{ return this->p_imaginara; 5.00-i* 4.00
} -2.00+i* 3.00
Spor la învăţat !

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