Incapsulamento dei dati in C ++

Tutti i programmi C ++ sono composti dai seguenti due elementi fondamentali:

  • Program statements (code) - Questa è la parte di un programma che esegue le azioni e sono chiamate funzioni.

  • Program data - I dati sono le informazioni del programma che vengono influenzate dalle funzioni del programma.

L'incapsulamento è un concetto di programmazione orientata agli oggetti che lega insieme i dati e le funzioni che manipolano i dati e che li protegge da interferenze esterne e usi impropri. L'incapsulamento dei dati ha portato all'importante concetto di OOP didata hiding.

Data encapsulation è un meccanismo di raggruppamento dei dati e delle funzioni che li utilizzano e data abstraction è un meccanismo per esporre solo le interfacce e nascondere i dettagli di implementazione all'utente.

C ++ supporta le proprietà di incapsulamento e nascondere i dati attraverso la creazione di tipi definiti dall'utente, chiamati classes. Abbiamo già studiato che una classe può contenereprivate, protected e publicmembri. Per impostazione predefinita, tutti gli elementi definiti in una classe sono privati. Ad esempio:

class Box {
   public:
      double getVolume(void) {
         return length * breadth * height;
      }

   private:
      double length;      // Length of a box
      double breadth;     // Breadth of a box
      double height;      // Height of a box
};

Le variabili lunghezza, larghezza e altezza sono private. Ciò significa che possono essere acceduti solo da altri membri della classe Box e non da qualsiasi altra parte del programma. Questo è un modo in cui si ottiene l'incapsulamento.

Per fare parti di una classe public (cioè accessibili ad altre parti del programma), è necessario dichiararli dopo il publicparola chiave. Tutte le variabili o le funzioni definite dopo l'identificatore pubblico sono accessibili da tutte le altre funzioni nel programma.

Rendere una classe amica di un'altra espone i dettagli di implementazione e riduce l'incapsulamento. L'ideale è mantenere il maggior numero possibile di dettagli di ciascuna classe nascosti a tutte le altre classi.

Esempio di incapsulamento dei dati

Qualsiasi programma C ++ in cui si implementa una classe con membri pubblici e privati ​​è un esempio di incapsulamento e astrazione dei dati. Considera il seguente esempio:

#include <iostream>
using namespace std;

class Adder {
   public:
      // constructor
      Adder(int i = 0) {
         total = i;
      }
      
      // interface to outside world
      void addNum(int number) {
         total += number;
      }
      
      // interface to outside world
      int getTotal() {
         return total;
      };
   
   private:
      // hidden data from outside world
      int total;
};

int main() {
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

Total 60

La classe sopra somma i numeri e restituisce la somma. I membri pubbliciaddNum e getTotal sono le interfacce con il mondo esterno e un utente deve conoscerle per usare la classe. Il membro privatototal è qualcosa che è nascosto al mondo esterno, ma è necessario affinché la classe funzioni correttamente.

Strategia di progettazione

La maggior parte di noi ha imparato a rendere privati ​​i membri della classe per impostazione predefinita a meno che non sia davvero necessario esporli. È solo un beneencapsulation.

Questo viene applicato più frequentemente ai membri dati, ma si applica ugualmente a tutti i membri, comprese le funzioni virtuali.