Sunteți pe pagina 1din 24

Curs 1

Primul pas in POO


incapsulare si ascundere
Clase si obiecte
atribute, metode, stari
declararea claselor si obiectelor in C++
utilizarea obiectelor in C++
constructori, destructori
exemplul Cont
Tipuri abstracte de data si obiecte
Exemplul Stiva
Utilizare de clase: my_string
Dorel Lucanu

Programarea calculatoarelor (C++)

Obiecte si clase

O prima definitie pentru obiecte si clase:


Un obiect este caracterizat de:
nume
atribute (date)
valorile atributelor la un moment dat definesc o stare

metode (servicii, operatii)


O clasa descrie unul sau mai multe obiecte ce pot fi
precizate printr-un set uniform de atribute si metode.

Dorel Lucanu

Programarea calculatoarelor (C++)

Obiecte si clase - reprezentare grafica

nume
atribute

metode

Dorel Lucanu

Programarea calculatoarelor (C++)

Clasa Cont (versiunea 01)


Specificarea clasei
Un cont bancar:
are un titular, sold, o rata a dobinzii, numar de cont si
se pot efectua operatii de depunere, extragere, actualizare sold
Extragerea atributelor:
titular, sold, rata a dobinzii, numar de cont
Extragerea metodelor
depunere, extragere, actualizare sold
Completarea specificatiei
actualizare sold data ultimei operatii
Dorel Lucanu

Programarea calculatoarelor (C++)

Clase (continuare)

definitia unei clase presupune:


incapsulare
ascunderea informatiei

Dorel Lucanu

Programarea calculatoarelor (C++)

Incapsulare
Incapsulare: datele si operatiile asupra lor sint incluse in aceeasi
unitate sintactica
datele si procesele devin legate
Cont
sold

sold
depune( )

depune( )

C++: clase, structuri


Dorel Lucanu

Programarea calculatoarelor (C++)

Ascunderea informatiei
modul de structurare a datelor nu este cunoscut
actiunile asupra datelor sint realizate numai prin
operatiile (metodele) clasei
si anumite actiuni pot fi ascunse: e.g., validare a contului
cont.sold+suma

cont.depune(suma)

Dorel Lucanu

Programarea calculatoarelor (C++)

OK!

Incapsulare: avantaje
defineste clar ce structuri de date sint manevrate si care sunt
operatiile legale asupra lor
adauga programului modularitate
scade riscul ca datele sa fie alterate de programele "slabe"
faciliteaza ascunderea informatiei

Dorel Lucanu

Programarea calculatoarelor (C++)

10

Ascunderea informatiei: avantaje


programe mai sigure si fiabile
elibereaza clasele utilizator de grija cum sint manevrate datele
previne aparitia erorilor produse de clasele utilizator ce
manevreaza datele utizind cod "slab"

Dorel Lucanu

Programarea calculatoarelor (C++)

11

Incapsulare + Ascunderea informatiei: avantaje


incapsulare + ascunderea informatiei = protejarea datelor
previne aparitia erorilor prin limitarea accesului la date
asigura portabilitatea programelor
faciliteaza utilizarea exceptiilor
interfata unei clase = operatiile cu care o clasa utilizator poate
manevra datele

Dorel Lucanu

Programarea calculatoarelor (C++)

12

Structurarea nivelului de acces la informatie

limitarea
accesului la
informatii

Dorel Lucanu

sectiuni publice
sectiuni private

Programarea calculatoarelor (C++)

13

Cont.h
class Cont
private:
{
char *titular;
public:
char *nrCont;
Cont();
double sold;
~Cont();
double rataDob;
void depune(double);
char *dataUltOp;
void extrage(double);
void actualizeazaSold();
void setDob(double);
void atribuieNrCont();
};

Dorel Lucanu

Programarea calculatoarelor (C++)

14

Cont.cpp
Cont::Cont()
{
titular = NULL;
dataUltOp = NULL;
sold = 0;
rataDob = 0;
atrbuieNrCont();
}
Cont::~Cont()
{
delete titular;
delete dataUltOp;
}
Dorel Lucanu

void Cont::depune(double suma)


{
sold += suma;
}
void Cont::setDob(double nouaRata)
{
actualizeazaSold();
rataDob = nouaRata;
}
. . .

Programarea calculatoarelor (C++)

15

Demo.cpp

void main()
{
Cont cont;
cont.depune(2000);
}

cont.sold += 5000;

error C2248: 'sold' : cannot access private member


Dorel Lucanu

Programarea calculatoarelor (C++)

16

Tipuri abstracte de data si obiecte

A doua definitie pentru obiecte si clase:


O clasa este o implementare a unui tip de data abstract.
Ea defineste atribute si metode care implementeaza
structura de date respectiv operatiile tipului de data
abstract.
Un obiect este o instanta a unei clase. El este unic
determinat de numele sau si defineste o stare reprezentata
de valorile atributelor sale la un anumit moment
particular.

Dorel Lucanu

Programarea calculatoarelor (C++)

17

Stiva
tipul de data abstract Stiva
entitati de tip data: liste LIFO
operatii
push()
pop()
top()
Stiva
tab[0..MAX-1]
virf
push()
pop()
top()
Dorel Lucanu

Programarea calculatoarelor (C++)

18

Stiva.h
class Stiva
{
public:
Stiva();
~Stiva();
void push(char);
void pop();
char top();
bool este_vida();
private:
char tab[MAX_STIVA];
int virf;
};
Dorel Lucanu

Programarea calculatoarelor (C++)

19

Stiva.cpp

void Stiva::push(char c)
{
if (virf == MAX_STIVA-1)
throw "Depasire superioara.";
tab[++virf] = c;
}
char Stiva::top()
{
if (virf < 0)
throw "Depasire inferioara.";
return tab[virf];
}
Dorel Lucanu

Programarea calculatoarelor (C++)

20

Stiva_demo
Stiva s;
char c = 'a';
try {
while (true) {
s.push(c++);
cout << s.top() << endl;
}
}
catch (char *mes_err) {
cout << mes_err << endl;
}
Dorel Lucanu

Programarea calculatoarelor (C++)

21

my_string.h
class string
{
public:
// Constructori/destructori
string();
string(char* new_string);
string(const string& new_string);
string(int aInt);
. . .
~string();

Dorel Lucanu

Programarea calculatoarelor (C++)

22

my_string.h (continuare)
// operatii
int size() const;
const char* c_str() const;
friend string operator+ (const string& lhs,
const string& rhs);
string& operator= (const string& a_string);
. . .
private:
char* char_arr;
int string_length;
};

Dorel Lucanu

Programarea calculatoarelor (C++)

23

my_string - utilizare
string s1(123); // creare sir dintr-un numar
string s2;
// creare sir vid
s2 = string("abc") + s1; //creare sir si concat.
s1 = s2 ;
// copiere sir (operator atrib.)
string s3(s2);
// apelare constructor de copiere
s1 = "armata";
// constructor si op. atribuire
b = (s1 == s2); // operatorul de testare a egalit.
STL (Standard Template Library)
#include <string>
#using namespace std
Dorel Lucanu

Programarea calculatoarelor (C++)

24

cont.h (versiunea 02)


#include <string>
using namespace std;
class Cont {
public:
. . .
private:
string titular;
string nrCont;
. . .
string dataUltOp;
. . .
};
Dorel Lucanu

Programarea calculatoarelor (C++)

25

demo.cpp (versiunea 02)


Cont cont("Ionescu", 10000);
cont.extrage(2000);

Dorel Lucanu

Programarea calculatoarelor (C++)

26

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