Sunteți pe pagina 1din 34

ABSTRACTIZAREA DATELOR.

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

1. POO-Abstractizarea datelor. Clase i obiecte

CONCEPTE FUNDAMENTALE

ABSTACTIZAREA proces de grupare a datelor i metodelor de

prelucrare specifice rezolvrii unei probleme.

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

persoana p1={Georgesu Ion,30,500};

1. POO-Abstractizarea datelor. Clase i obiecte

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

aplicate Sintactic, o clas n C++ se definete astfel:

class nume_clasa { // date + functii membre };


1. POO-Abstractizarea datelor. Clase i obiecte
8

CONCEPTE FUNDAMENTALE

Conceptul de CLAS (continuare)


Funciile i datele unei clase pot fi grupate din punct de vedere al dreptului de acces n: private conine date i funcii membre care pot fi folosite doar de ctre celelalte funcii aparinnd clasei respective; protected similara cu private dar care d drepturi de acces i funciilor membre ale claselor derivate din clasa respectiv public drept de acces tuturor.
1. POO-Abstractizarea datelor. Clase i obiecte

CONCEPTE FUNDAMENTALE Conceptul de CLAS (exemplu)


class persoana { private: int varsta; protected: float salariu; public: char nume[20]; void init(char *n=Anonim,int v=0, float s=0.) {strcpy(nume,n); varsta=v; salariu=s;} char *spune_nume() int spune_varsta() {return varsta;} }; char *persoana::spune-nume() {return nume;}
1. POO-Abstractizarea datelor. Clase i obiecte
10

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;

Instaniere a unei clase


Se caracterizeaz prin: identitate; stare; comportament.
1. POO-Abstractizarea datelor. Clase i obiecte
12

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.

1. POO-Abstractizarea datelor. Clase i obiecte

15

CONSTRUCTORI I DESTRUCTORI

Constante asociate unei clase


<nume_c> <ob>=<nume_c>(lista_cst); persoana p1=persoana(Ana,25,550.);

Constante cu nume asociate unei clase


const <nume_c> <nume_cst>[(lista_cst)]; const persoana sef("Andrei",35,1400.); const persoana fictiv; ..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk(Ex.PooAD02)
1. POO-Abstractizarea datelor. Clase i obiecte
16

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

void persoana ::adresa() {cout<<\n Adresa fizica a obiectului este<<this;}


1. POO-Abstractizarea datelor. Clase i obiecte
20

OBIECTE CU EXTENSII N MEMORIA DINAMIC

Clasele cu membrii pointeri ocup :


o memorie alocata i eliberat implicit la definirea, respectiv terminarea duratei de via o memorie alocat i eliberat explicit prin codul pus de programator n constructor, respectiv destructor. ATENIE constructorul implicit de copiere copiaz doar cmpurile membre fr extensiile la memoria dinamic =>dou sau mai multe obiecte vor partaja aceeai zon dinamic prin pointerii duplicai prin copiere => pot apare anomalii!!!
1. POO-Abstractizarea datelor. Clase i obiecte

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)

1. POO-Abstractizarea datelor. Clase i obiecte

23

POINTERI LA OBIECTE Pointer la obiect:variabil care conine adresa unui obiect


Particulariti: Declararea unui pinter la obiect aloc numai spaiul necesar fr s declaneze execuia vreunui constructor; ncrcarea unui pointer: persoana p,*pp; pp=&p; Accesarea membrilor publici: pp->nume; //accesarea membrului nume pp->spune_varsta(); //accesarea metodei spune_varsta()
1. POO-Abstractizarea datelor. Clase i obiecte

24

POINTERI LA OBIECTE Alocrea dinamic a memoriei pentru obiecte: operatorul

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.

1. POO-Abstractizarea datelor. Clase i obiecte

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)

1. POO-Abstractizarea datelor. Clase i obiecte

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

1. POO-Abstractizarea datelor. Clase i obiecte

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

POINTERI DE DATE I FUNCII MEMBRE

Pointeri de membri, membri n clas


Pointerii de membrii pot fi la rndul lor membri n clas Obiectele din clas ncapsuleaz informaii despre ele Sunt utilizai n generalizri

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)

1. POO-Abstractizarea datelor. Clase i obiecte

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

SPECIFICATORUL const APLICAT MEMBRILOR UNEI CLASE

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

MODIFICATORUL const APLICAT POINTERILOR DE OBIECTE


Pot exista urmtoarele situaii: Pointeri constani de obiecte (dup ncrcarea adresei aceasta rmne fix pe toat durata execuiei <id_clasa> *const <id_p_obiect> Pointeri care adreseaz obiecte constante <id_clasa> const *<id_p_obiect> Pointeri constani de obiecte constante <id_clasa> const *const <id_p_obiect> ..\..\..\..\Desktop\Microsoft Visual C++ 6.0.lnk (Ex.PooAD15)

1. POO-Abstractizarea datelor. Clase i obiecte

34

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