L'encapsulation est l'un des principes clés de la programmation orientée objet (POO), qui est née du besoin de regrouper des données avec des fonctions qui traitent ces données, tout en cachant les détails de l'implémentation à l'utilisateur.
Depuis l'apparition de la POO, l'encapsulation vise à accroître la fiabilité des programmes, à réduire les erreurs et à améliorer la facilité de maintenance du code. En C++, elle est réalisée par des moyens de masquage des données et la fourniture d'une interface pour interagir avec un objet.
Sans encapsulation, les données internes et les détails d'implémentation d'une classe sont accessibles pour modification depuis n'importe quelle partie du programme. Cela conduit à des erreurs, à des difficultés lors de modifications et à une mauvaise gestion du code.
L'encapsulation en C++ est réalisée à l'aide de modificateurs d'accès (private, protected, public) dans les classes. Les données internes d'une classe sont déclarées à l'aide de private ou protected, et l'accès à celles-ci se fait par des méthodes publiques (getters et setters).
Exemple de code :
class Account { private: double balance; public: Account(double initial) : balance(initial) {} double getBalance() const { return balance; } void deposit(double amount) { if (amount > 0) balance += amount; } };
Caractéristiques clés :
Un membre protected peut-il être accessible de n'importe où dans le programme, où il y a un objet de classe ?
Non, les membres protected sont accessibles uniquement depuis les méthodes de la classe elle-même, de ses amis et des classes dérivées, mais pas depuis d'autres classes et pas par l'objet de l'extérieur.
Un membre public de la classe peut-il être "encapsulé" ?
Non, les membres publics ne sont pas encapsulés, leur rôle est de fournir une interface externe. Parfois, des membres public trop ouverts violent le principe d'encapsulation.
Le modificateur private ajoute-t-il de la sécurité au code à l'exécution ?
Non, les modificateurs d'accès ne fonctionnent qu'au niveau du compilateur et ne préviennent pas l'accès aux données dans le fichier exécutable — mais ils limitent les erreurs de conception.
Un développeur a rendu toutes les variables de la classe publiques pour des "facilités de la logique métier".
Avantages :
Inconvénients :
Les données sont déclarées comme privées, l'interaction se fait par des getters/setters avec validation obligatoire.
Avantages :
Inconvénients :