Documente Academic
Documente Profesional
Documente Cultură
CLASE I OBIECTE
Concepte fundamentale Constructori i destructori Pointrul this Pointeri la obiecte. Masive de obiecte Clase incluse Tipologia membrilor unei clase Transferul obiectelor n/din funcii Pointeri de date i funcii membre Privilegii n sistemul de acces Modificatorul const n contextul obiectelor
1. POO-Abstractizarea datelor. Clase i obiecte
1
CONCEPTE FUNDAMENTALE
Programarea orientat pe obiecte (POO) este o metod de impelementare n care programele sunt organizate ca i colecii de obiecte care coopereaz ntre ele, fiecare obiect reprezentnd instana unei clase, clasele fiind unite prin relaii de motenire. Dac un limbaj ofer suport pentru utilizarea claselor dar nu are implementat mecanismul relaiilor de motenire atunci este un limbaj de programare bazat pe obiecte (PBO).
1. POO-Abstractizarea datelor. Clase i obiecte
2
CONCEPTE FUNDAMENTALE
Principalele concepte care stau la baza POO sunt: Abstractizarea ncapsularea Modularitatea Ierarhizarea
CONCEPTE FUNDAMENTALE
Abstraciunea: exprim toate caracteristicile eseniale ale unui obiect care fac ca acesta s se disting de alte obiecte; ofer o definire precis a granielor conceptuale ale obiectelor din perspectiva unui privitor extern.
1. POO-Abstractizarea datelor. Clase i obiecte
4
CONCEPTE FUNDAMENTALE
Ex: Tipul abstract de date persoana typedef struct { char nume[20]; int varsta; float salariu; } persoana; Instanierea tipului persoana
CONCEPTE FUNDAMENTALE
NCAPSULAREA Combinarea datelor i metodelor ntr-o singur structur de date, definind totodat modul n care obiectul i restul programului pot referi datele din obiect. Concept care definete apartenena unor proprieti i metode fa de un obiect. Const n separarea aspectelor externe ale unui obiect care sunt accesibile altor obiecte de aspectele interne ale obiectului care sunt ascunse celorlalter obiecte
1. POO-Abstractizarea datelor. Clase i obiecte
6
CONCEPTE FUNDAMENTALE
MODULARITATEA Modalitate de a grupa abstraciuni legate logic ntre ele. IERARHIZAREA Reprezint o ordonare a abstraciunilor. Principalele tipuri sunt:
Motenirea (ierarhia de clase) relaie ntre clase n care o clas mprtete structura i comportarea definit n una sau mai multe clase (semantic implic o relaie de tip is a). Agregarea (ierarhia de obiecte) relaie ntre dou obiecte n care unul dintre obiecte aparine celuilalt obiect. (semantic implic o relaie de tip part of)
1. POO-Abstractizarea datelor. Clase i obiecte
7
CONCEPTE FUNDAMENTALE
Conceptul de CLAS Concept abstract care indic natura datelor care o compun i metodelor care i pot fi
CONCEPTE FUNDAMENTALE
CONCEPTE FUNDAMENTALE
Conceptul de CLAS (continuare) Funciile membre ale unei clase se mpart n: constructori utilizai la crearea obiectelor; destructori - utilizai la distrugerea obiectelor i eliberarea memoriei ocupate de acestea; funcii de acces mediaz legtura obiectelor cu exteriorul; metode introduc operaiile i prelucrrile specifice obiectului.
1. POO-Abstractizarea datelor. Clase i obiecte
11
CONCEPTE FUNDAMENTALE
Conceptul de OBIECT
entitate din lumea real asupra cruia se poate ntreprinde o aciune sau care poate ntreprine o aciune;
CONSTRUCTORI I DESTRUCTORI
CONSTRUCTORI
funcii care apar n structura unui obiect i au rolul de iniializare a datelor membre; au acelai nume cu numele clasei nu au tip (dat de variabila returnat). se declar n domeniul public al clasei pentru a se autoriza accesul la utilizarea lui, ca metod general. este singura funcie membr care este vzut n afara clasei fr a specifica un obiect sau pointer la un obiect al clasei.
O clas poate meniona mai muli constructori prin suprancrcare utilizarea unuia fiind dedus n funcie de numrul i tipul parametrilor de apel.
1. POO-Abstractizarea datelor. Clase i obiecte
13
CONSTRUCTORI I DESTRUCTORI
class persoana { int varsta; float salariu; char nume[20]; public: persoana() {strcpy(nume,"Anonim"); varsta=0; salariu=0;} persoana(char *n,int v,float s) {strcpy(nume,n); varsta=v; salariu=s;} char *spune_nume() {return nume;} int spune_varsta() {return varsta;} }; persoana p1,p2(Ion,30,500); ..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk (Ex.PooAD01)
1. POO-Abstractizarea datelor. Clase i obiecte
14
CONSTRUCTORI I DESTRUCTORI
n cadrul unei clase pot fi definii mai muli constructori pentru: Iniializarea membrilor cu constante; Iniializare din date elementare; Iniializare prin citirea de la tastatur; Iniializare prin citirea din fiier; Iniializare din datele unui alt obiect.
15
CONSTRUCTORI I DESTRUCTORI
CONSTRUCTORI I DESTRUCTORI CONSTRUCTORI DE COPIERE Utilizare: Iniializarea obiectelor din altele deja existente. Definire: implicit, pus de compilator, (relizeaz copierea bit cu bit) explicit, dat de utilizator. class persoana { . public: persoana(persoana &) }; persoana::persoana(persoana&p) {/* definire */} ..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk(Ex.PooAD03)
1. POO-Abstractizarea datelor. Clase i obiecte
17
CONSTRUCTORI I DESTRUCTORI
CONSTRUCTORI DE COPIERE (continuare) Este invocat la: Crearea de obiecte cu iniializare, pornind de la un obiect care exist. Apelul unei funcii care lucreaz cu obiecte transferate prin valoare, cnd este nevoie de crearea unei copii a obiectului pe stiv (cazul f(p);). Returnarea dintr-o funcie a unui obiect prin valoare (return p;)
1. POO-Abstractizarea datelor. Clase i obiecte
18
CONSTRUCTORI I DESTRUCTORI
DESTRUCTORI
Realizeaz complementul funciei constructorului Este apelat implicit la iesirea din blocul n care a fost declarat obiectul definit de o clas. Dac este apelat explicit are sintaxa
~ <nume_c> <ob>();
Se definete explicit i conine cod, cnd este necesar executarea anumitor funcii (eliberarea memoriei alocat explicit prin constructor)
..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk(Ex.PooAD04)
1. POO-Abstractizarea datelor. Clase i obiecte
19
POINTERUL this La apelul unei funcii membru aceasta primete pe lng parametrii implicii i unul implicit care este adresa obiectului vizat. Pointerul this: (cuvnt cheie) conine tocmai adresa obiectului asupra cruia se efectueaz prelicrrile; Poate fi utilizat i explicit. int persoana::spune_varsta() {return varsta;} este echivalet cu: int persoana::spune_varsta() {return this->varsta;} Ex Afiarea adresei
21
OBIECTE CU EXTENSII N MEMORIA DINAMIC Programatorii trebuie s furnizeze: Constructori care s aloce extensia i s ncarce pointerul prin care o gestioneaz Constructorii de copiere care s aloce extensia pentru noul obiect, s incarce pointerul respectiv i s iniializeze extensia copiind-o din obiectul de iniializare Destructor de clas care s dezaloce extensia adresat prin pointerul membru. Operator de atribuire care s dezaloce extensia adresat prin pointerul membru al obiectului destinaie, s-o realoce i ncarce conform dimensiunii i coninutului obiectului surs. ..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk(Ex.PooAD05)
1. POO-Abstractizarea datelor. Clase i obiecte
22
FUNCII DE ACCES
Sunt utilizate pentru asigurarea accesului controlat la datele i funciile membre ale domeniului private Accesul poate fi controlat, de exemplu rintr-o cheie (cod) de acces Funcii: get_xxx() permite accesul la o valoare set_xxx() permite modificarea unei valori
..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk (Ex.PooAD06)
23
24
new
Alocare cu constructor implicit: persoana*pp = new persoana; Aloc zona de memorie necesar; Stocheaz adresa in variabila pointer pp; Execut consructorul implicit al clasei. Alocare cu constructor explicit: persoana*pp = new persoana(Ion,35,350); Dezalocare: operatorul delete delete pp; Funciile malloc() i free() aloc/dezaloc memorie dar nu determin apelul constructorului/destructorului clasei respective
1. POO-Abstractizarea datelor. Clase i obiecte
25
MASIVE DE OBIECTE Similar iniializrii masivelor din tipurile de baz persoana colectiv[]={ persoana(Ana,30,300), persoana(Eva,25,280), persoana(Ion,30,350), persoana()}; Acces: prin specificarea elementului cout<<colectiv[0].spune_nume(); utiliznd enumerri de obiecte enum colectiv {sef,inginer,analist_1,analist_2}; cout<<colectiv[sef].spune_nume();
..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk (Ex.PooAD07)
1. POO-Abstractizarea datelor. Clase i obiecte
26
CLASE INCLUSE n cdrul unei clase pot figure membrii de tip class numii clase incluse sau clase interioare Constructorii de clas exterioar primesc drept parametrii i datele necesare clasei interioare pentru constructorii acestora Constructorii claselor interioare pot fi invocai i explicit Declararea claselor incluse se poate face: n interiorul clasei exterioare caz n care pentru a fi vizibil din exterior trebuie menionate ambele clase clasa_ext::clasa_int n afara clasei exterioare, caz n care constructorii clasei interioare primesc la intrare i adresa obiectului (din clasa exterioar) cruia i aparine.
27
CLASE INCLUSE
Includerea claselor nu presupune i acordarea unor drepturi de acces speciale clasei exterioare Clasa exterioar poate induce restricii de acces asupra informaiilor obinute prin funciile sale chiar dac se refer la clasa inclus, iar acolo sunt de natur public astfel: Declarnd constante informaiile provenind din clasa inclus returnate de funcii ale clasei exterioare. Introducnd o cooperare controlat explicit prin program ntre funciile celor dou clase
..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk (Ex.PooAD08)
28
POINTERI DE DATE I FUNCII MEMBRE Declararea pointerilor de membru n clas int persoana::*pdata_membru; int (persoana::pfunctie_membra()); OBS int persoana::*p; \\ pointer de membru (pointeaz \\numai ntregi din clasa persoana) int *persoana::p; \\pointer membru (n primul rnd este \\ este membru i apoi pointer) int (persoana::pf )(); \\ pointer de membru int (*persoana::pf )(); \\pointer membru
29
POINTERI DE DATE I FUNCII MEMBRE ncrcarea pointerilor cu adresa unui membru al clasei pdata_membru=&persoana::varsta; pfunctie_membra=persoana::spune_varsta; Utilizarea pointerilor de membri a=p1.*pdata_membru; b=(p1.*pfunctie_membra)(); a=pp1->*pdata_membru;// pp1 este pointer de obiect b=(pp1->*pfunctie_membra)(); ..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk (Ex.PooAD11)
1. POO-Abstractizarea datelor. Clase i obiecte
30
OBS.Trebuie utilizat pointerul this pentru a indica obiectul folosit n faza a doua a ncrcrii pointerului de membru.
..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk (Ex.PooAD12)
31
CLASE I FUNCII PRIETENE Sunt funcii externe (independente) prin intermediul crora se permite accesul la date din domeniile private i protected Se declar utiliznd cuvntul cheie friend n clasa n care se acord dreptul de acces Dac se dorete ca toate funciile unei clase s fie funcii prietene altei clase, atunci ntrega clas se poate declara friend. OBS. Succesiunea de declarare trebuie s asigure toate informaiile necesare complirii ..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk (Ex.PooAD13)
1. POO-Abstractizarea datelor. Clase i obiecte
32
Datele statice se regsesc ntr-un singur exemplar pentru toate obiectele clasei Variabila static fiind unic pentru toate obiectele, nu necesit n calificare precizarea obiectului, ci doar a clasei Funciile de clas static efectueaz prelucrri care pot s nu fie individualizate pe obiecte (s se refere la nivelul clasei) Funciile de clas static nu beneficiaz de referina implicit a obiectului asociat (pointerul this)
..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk (Ex.PooAD14)
1. POO-Abstractizarea datelor. Clase i obiecte
33
34