Encapsulation de données en C ++

Tous les programmes C ++ sont composés des deux éléments fondamentaux suivants -

  • Program statements (code) - C'est la partie d'un programme qui effectue des actions et elles sont appelées fonctions.

  • Program data - Les données sont les informations du programme qui sont affectées par les fonctions du programme.

L'encapsulation est un concept de programmation orientée objet qui lie les données et les fonctions qui manipulent les données, et qui les protège des interférences extérieures et des abus. L'encapsulation des données a conduit à l'important concept POO dedata hiding.

Data encapsulation est un mécanisme de regroupement des données et des fonctions qui les utilisent et data abstraction est un mécanisme permettant d'exposer uniquement les interfaces et de masquer les détails d'implémentation à l'utilisateur.

C ++ prend en charge les propriétés d'encapsulation et de masquage des données via la création de types définis par l'utilisateur, appelés classes. Nous avons déjà étudié qu'une classe peut contenirprivate, protected et publicmembres. Par défaut, tous les éléments définis dans une classe sont privés. Par exemple -

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
};

Les variables longueur, largeur et hauteur sont private. Cela signifie qu'ils ne sont accessibles que par les autres membres de la classe Box, et non par aucune autre partie de votre programme. C'est une manière dont l'encapsulation est réalisée.

Pour faire des parties d'une classe public (c'est-à-dire accessibles à d'autres parties de votre programme), vous devez les déclarer après publicmot-clé. Toutes les variables ou fonctions définies après le spécificateur public sont accessibles par toutes les autres fonctions de votre programme.

Faire d'une classe l'ami d'une autre expose les détails de l'implémentation et réduit l'encapsulation. L'idéal est de garder autant de détails de chaque classe cachés que possible à toutes les autres classes.

Exemple d'encapsulation de données

Tout programme C ++ dans lequel vous implémentez une classe avec des membres publics et privés est un exemple d'encapsulation et d'abstraction de données. Prenons l'exemple suivant -

#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;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Total 60

La classe ci-dessus ajoute les nombres ensemble et renvoie la somme. Les membres du publicaddNum et getTotal sont les interfaces avec le monde extérieur et un utilisateur doit les connaître pour utiliser la classe. Le membre privétotal est quelque chose qui est caché du monde extérieur, mais qui est nécessaire pour que la classe fonctionne correctement.

Conception de la stratégie

La plupart d'entre nous ont appris à rendre les membres de la classe privés par défaut à moins que nous n'ayons vraiment besoin de les exposer. C'est juste bienencapsulation.

Cela s'applique le plus souvent aux membres de données, mais s'applique également à tous les membres, y compris les fonctions virtuelles.