Programmation D - Modificateurs d'accès aux classes

Le masquage des données est l'une des caractéristiques importantes de la programmation orientée objet qui permet d'empêcher les fonctions d'un programme d'accéder directement à la représentation interne d'un type de classe. La restriction d'accès aux membres de la classe est spécifiée par le libellépublic, private, et protectedsections dans le corps de la classe. Les mots-clés public, private et protected sont appelés spécificateurs d'accès.

Une classe peut avoir plusieurs sections étiquetées publiques, protégées ou privées. Chaque section reste en vigueur jusqu'à ce qu'une autre étiquette de section ou l'accolade droite de fermeture du corps de classe soit vue. L'accès par défaut pour les membres et les classes est privé.

class Base { 
  
   public: 
  
  // public members go here 
  
   protected: 
  
  // protected members go here 
  
   private: 
  
  // private members go here 
  
};

Les membres du public en D

UNE publicLe membre est accessible de n'importe où en dehors de la classe mais dans un programme. Vous pouvez définir et obtenir la valeur des variables publiques sans aucune fonction membre, comme indiqué dans l'exemple suivant -

Exemple

import std.stdio;

class Line { 
   public:
      double length; 

      double getLength() { 
         return length ; 
      }
      
      void setLength( double len ) { 
         length = len; 
      } 
} 
 
void main( ) { 
   Line line = new Line();
   
   // set line length 
   line.setLength(6.0); 
   writeln("Length of line : ", line.getLength());  
   
   // set line length without member function 
   line.length = 10.0; // OK: because length is public 
   writeln("Length of line : ", line.length); 
}

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

Length of line : 6 
Length of line : 10

Les membres privés

UNE privateLa variable membre ou la fonction ne sont pas accessibles, ni même vues de l'extérieur de la classe. Seules les fonctions de classe et d'amis peuvent accéder aux membres privés.

Par défaut, tous les membres d'une classe sont privés. Par exemple dans la classe suivantewidth est un membre privé, ce qui signifie que jusqu'à ce que vous étiquetiez un membre explicitement, il est considéré comme un membre privé -

class Box { 
   double width; 
   public: 
      double length; 
      void setWidth( double wid ); 
      double getWidth( void ); 
}

En pratique, vous devez définir les données dans la section privée et les fonctions associées dans la section publique afin qu'elles puissent être appelées de l'extérieur de la classe comme indiqué dans le programme suivant.

import std.stdio;

class Box { 
   public: 
      double length; 

      // Member functions definitions
      double getWidth() { 
         return width ; 
      } 
      void setWidth( double wid ) { 
         width = wid; 
      }

   private: 
      double width; 
}
  
// Main function for the program 
void main( ) { 
   Box box = new Box();
   
   box.length = 10.0; 
   writeln("Length of box : ", box.length);
   
   box.setWidth(10.0);  
   writeln("Width of box : ", box.getWidth()); 
}

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

Length of box : 10 
Width of box : 10

Les membres protégés

UNE protected La variable ou la fonction membre est très similaire à un membre privé, mais elle a fourni un avantage supplémentaire en ce qu'elle peut être accédée dans les classes enfants appelées classes dérivées.

Vous apprendrez les classes dérivées et l'héritage dans le chapitre suivant. Pour l'instant, vous pouvez vérifier l'exemple suivant où une classe enfantSmallBox est dérivé d'une classe parente Box.

L'exemple suivant est similaire à l'exemple ci-dessus et ici width member est accessible par n'importe quelle fonction membre de sa classe dérivée SmallBox.

import std.stdio;

class Box { 
   protected: 
      double width; 
} 
 
class SmallBox:Box  { // SmallBox is the derived class. 
   public: 
      double getSmallWidth() { 
         return width ; 
      }
	  
      void setSmallWidth( double wid ) {
         width = wid; 
      } 
} 
 
void main( ) { 
   SmallBox box = new SmallBox();  
   
   // set box width using member function 
   box.setSmallWidth(5.0); 
   writeln("Width of box : ", box.getSmallWidth()); 
}

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

Width of box : 5