Incapsulare C ++ (cu exemple)

În acest tutorial, vom afla despre încapsularea în C ++ cu ajutorul unor exemple.

Incapsularea este una dintre caracteristicile cheie ale programării orientate pe obiecte. Aceasta implică gruparea de membri și funcții de date într-o singură clasă.

Gruparea de membri și funcții similare de date într-o clasă împreună ajută și la ascunderea datelor.

Incapsulare C ++

În general, încapsularea este un proces de împachetare a codului similar într-un singur loc.

În C ++, putem grupa membrii de date și funcții care funcționează împreună într-o singură clasă. De exemplu,

 class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );

În programul de mai sus, funcția getArea()calculează aria unui dreptunghi. Pentru a calcula aria, are nevoie de lungime și lățime.

Prin urmare, membrii datelor (lungimea și lățimea) și funcția getArea()sunt păstrate împreună în Rectangleclasă.

Incapsulare în C ++

Exemplul 1: încapsulare C ++

 // Program to calculate the area of a rectangle #include using namespace std; class Rectangle ( public: // Variables required for area calculation int length; int breadth; // Constructor to initialize variables Rectangle(int len, int brth) : length(len), breadth(brth) () // Function to calculate area int getArea() ( return length * breadth; ) ); int main() ( // Create object of Rectangle class Rectangle rect(8, 6); // Call getArea() function cout << "Area = " << rect.getArea(); return 0; )

Ieșire

 Suprafață = 48

În exemplul de mai sus, calculăm aria unui dreptunghi.

Pentru a calcula o zonă, avem nevoie de două variabile: lungimea și lățimea și o funcție: getArea(). Prin urmare, am grupat aceste variabile și funcționăm într-o singură clasă numită dreptunghi.

Aici, variabilele și funcțiile pot fi accesate și din alte clase. Prin urmare, aceasta nu este ascunderea datelor .

Aceasta este doar încapsulare . Pur și simplu păstrăm împreună coduri similare.

Notă: Oamenii consideră adesea încapsularea ca o ascundere a datelor, dar acest lucru nu este pe deplin adevărat.

Incapsularea se referă la gruparea câmpurilor și metodelor conexe împreună. Aceasta poate fi utilizată pentru a ascunde datele. Incapsularea în sine nu înseamnă ascunderea datelor.

De ce incapsularea?

  • În C ++, încapsularea ne ajută să păstrăm împreună datele și funcțiile asociate, ceea ce face ca codul nostru să fie mai curat și ușor de citit.
    • Ajută la controlul modificării membrilor noștri de date.
      Luați în considerare o situație în care dorim ca câmpul de lungime dintr-o clasă să nu fie negativ. Aici putem face variabila lungime privată și putem aplica logica în interiorul metodei setAge(). De exemplu,
       class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
    • Funcțiile getter și setter oferă acces numai în citire sau în scriere membrilor clasei noastre. De exemplu,
       getLength() // provides read-only access setLength() // provides write-only access
    • Ajută la decuplarea componentelor unui sistem. De exemplu, putem încapsula codul în mai multe pachete.
      Aceste componente decuplate (pachete) pot fi dezvoltate, testate și depanate independent și concomitent. Și orice modificare a unei anumite componente nu are niciun efect asupra altor componente.
    • De asemenea, putem realiza ascunderea datelor folosind încapsularea. În exemplul 1 , dacă schimbăm variabilele de lungime și lățime în privatesau protected, atunci accesul la aceste câmpuri este restricționat.
      Și sunt ținute ascunse de clasele exterioare. Aceasta se numește ascunderea datelor .

    Ascunderea datelor

    Ascunderea datelor este o modalitate de a restricționa accesul membrilor noștri de date prin ascunderea detaliilor de implementare. Incapsularea oferă, de asemenea, o modalitate de ascundere a datelor.

    Putem folosi modificatori de acces pentru a realiza ascunderea datelor în C ++. De exemplu,

    Exemplul 2: Ascunderea datelor C ++ folosind Specifierul privat

     #include using namespace std; class Rectangle ( private: // Variables required for area calculation int length; int breadth; public: // Setter function for length void setLength(int len) ( length = len; ) // Setter function for breadth void setBreadth(int brth) ( breadth = brth; ) // Getter function for length int getLength() ( return length; ) // Getter function for breadth int getBreadth() ( return breadth; ) // Function to calculate area int getArea() ( return length * breadth; ) ); int main() ( // Create object of Rectangle class Rectangle rectangle1; // Initialize length using Setter function rectangle1.setLength(8); // Initialize breadth using Setter function rectangle1.setBreadth(6); // Access length using Getter function cout << "Length = " << rectangle1.getLength() << endl; // Access breadth using Getter function cout << "Breadth = " << rectangle1.getBreadth() << endl; // Call getArea() function cout << "Area = " << rectangle1.getArea(); return 0; )

    Ieșire

     Lungime = 8 Lățime = 6 Suprafață = 48

    Aici, am făcut variabilele de lungime și lățime private.

    Aceasta înseamnă că aceste variabile nu pot fi accesate direct în afara Rectangleclasei.

    Pentru a accesa aceste variabile particulare, am folosit publicfuncții setLength(), getLength(), setBreadth()și getBreadth(). Acestea se numesc funcții getter și setter.

    Facerea variabilelor private ne-a permis să restricționăm accesul neautorizat din afara clasei. Aceasta este ascunderea datelor .

    Dacă încercăm să accesăm variabilele din main()clasă, vom primi o eroare.

     // error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;

Articole interesante...