Tutoriale Video C++ nr. 34 despre functii de acces in cadrul unei clase si despre incapsulare

Salut, sunt Serban si acesta este al treizecisicincilea tutorial dintr-o suita de tutoriale ale limbajului C++, tutoriale ce le voi face pentru tutorialevideo.info; In acest tutorial vom invata despre functii de acces in cadrul unei clase si despre incapsulare. Incapsularea este un principiu al paradigmei OOP. Este unul din principiile de baza ale acestei paradigme, si in cadrul acestui tutorial vom invata de ce.
Sa ne imaginam o clasa ce are o variabila de tip `int` ca si membru. Daca in cadrul programului principal, adica in functia `main`, avem nevoie de aceasta variabila in diferite scopuri, modalitatea ce vine la indemana este aceea de a o declara publica si de a opera modificari pe aceasta. Fair enough, dar acum sa extindem problema putin. Sa presupunem ca am folosit in functia `main` variabila de peste 30 de ori, afisand-o si modificand-o. Ce se intampla insa daca ne dam seama ca aceasta variabila nu este denumita corespunzator? Ce se intampla daca nu am folosit variabila acestei clase intr-un singur loc, ci poate in mai multe programe diferite(adica, in mai multe fisiere diferite .cpp avem variabila respectiva). Raspunsul acestor intrebari sta in incapsularea datelor. Daca in cadrul clasei noastre declaram variabila privata si construim doua functii publice, ce se cheama de obicei `settter` si `getter` ce au ca scop setarea variabilei si intoarcerea variabilei sub forma de parametru, atunci cu usurina vom modifica doar numele variabilei din cadrul clasei, lasand astfel restul codului nemodificat. De asemenea, aceasta abordare este utila si in cazul in care realizam ca am design-uit clasa intr-un mod gresit. Atata timp cat interfata clasei ramane neschimbata(adica functiile pentru `get` si `set`), putem modifica clasa asa cum dorim.
De asemenea, ascunderea detaliilor unei clase aduce un anume avantaj. Un programator ce foloseste acea clasa nu are nevoie sa cunoasca modul in care a fost implementata acea clasa si astfel nu trebuie sa fie preocupat decat de utilizarea ei, nu si de implementare.

class Date
{
private:
int m_nMonth;
int m_nDay;
int m_nYear;

public:
// Getters
int GetMonth() { return m_nMonth; }
int GetDay() { return m_nDay; }
int GetYear() { return m_nYear; }

// Setters
void SetMonth(int nMonth) { m_nMonth = nMonth; }
void SetDay(int nDay) { m_nDay = nDay; }
void SetYear(int nYear) { m_nYear = nYear; }
};

class Change
{
private:
int m_nValue;

public:
void SetValue(int nValue) { m_nValue = nValue; }
int GetValue() { return m_nValue; }
};

int main()
{
Change cChange;
cChange.SetValue(5);
std::cout << cChange.GetValue() << std::endl;
}
NU uitati: cititi si documentati-va in plus, nu parcurgeti _doar_ aceste tutoriale pentru ca nu sunt

indeajuns pentru a va dezvolta calitatile de coding, ci sunt doar mici rampe de lansare catre cunoastere.

Dupa fiecare tutorial vizionat, abordati subiectul dezbatut in acesta pe net, in cartea `Thinking in C++`,

in sectiunea de comentarii.

NU lasati sa treaca pe langa voi o informatie neclara, pentru ca orice farama de cunoastere este importanta.

 

Tutoriale Video C++ nr. 34 despre functii de acces in cadrul unei clase si despre incapsulare

POST A COMMENT.