Documente Academic
Documente Profesional
Documente Cultură
10 - Poo
10 - Poo
• Programarea haotică
• Epoca de aur a programatorilor
• Programarea structurată
• Programarea orientată obiect
– Conceptele apar din anii ’60 ( limbajul Simula)
• Limbaje
• Procedurale
• Hibrid
• Pur obiectuale
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)
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
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ă
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
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 !