Programmation D - Encapsulation

Tous les programmes D 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 - Ce 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 ensemble, et qui protège à la fois 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.

D 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, protégé et publicmembres. Par défaut, tous les éléments définis dans une classe sont privés. Par exemple -

class Box { 
   public: 
      double getVolume() { 
         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. Il est idéal de garder autant de détails de chaque classe cachés que possible de toutes les autres classes.

Encapsulation de données en D

Tout programme D 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 -

Exemple

import std.stdio;
  
class Adder { 
   public: 
      // constructor 
      this(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; 
}
 
void main( ) { 
   Adder a = new Adder(); 
   
   a.addNum(10); 
   a.addNum(20); 
   a.addNum(30);  
   writeln("Total ",a.getTotal()); 
}

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 getTotalsont les interfaces avec le monde extérieur et un utilisateur doit les connaître pour utiliser la classe. Le total des membres privés est quelque chose qui est caché du monde extérieur, mais qui est nécessaire pour que la classe fonctionne correctement.

Stratégie de conception de classe en D

La plupart d'entre nous ont appris par expérience amère à 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.

Cette sagesse est appliquée le plus fréquemment aux membres de données, mais elle s'applique également à tous les membres, y compris les fonctions virtuelles.