Section courante

A propos

Section administrative du site

Encapsulation

L'encapsulation est l'un des quatre piliers fondamentaux de la programmation orientée objet, aux côtés de l'héritage, du polymorphisme et de l'abstraction.

Elle consiste à regrouper les données (attributs) et les comportements (méthodes) les manipulant au sein d'une même entité appelée classe, tout en contrôlant l'accès à ces données depuis l'extérieur.

En d'autres termes, l'encapsulation permet de cacher l'implémentation interne d'un objet et de n'exposer que ce qui est nécessaire à son utilisation. Ce principe est souvent résumé par l'expression :

«Cacher ce qui doit l'être, exposer ce qui est utile».

Pourquoi l'encapsulation est-elle essentielle ?

L'encapsulation répond à plusieurs objectifs majeurs en conception logicielle :

Protection des données

Elle empêche l'accès direct aux attributs sensibles d'un objet, évitant ainsi les modifications incohérentes ou dangereuses.

Maîtrise de la logique métier

Les règles de gestion sont centralisées dans les méthodes de la classe, garantissant que les données restent toujours dans un état valide.

Réduction du couplage

Les autres parties du programme ne dépendent pas de l'implémentation interne d'un objet, mais uniquement de son interface publique.

Maintenance et évolutivité

Les changements internes à une classe n'impactent pas le reste du code tant que l'interface reste identique.

Encapsulation et niveaux de visibilité

L'encapsulation repose principalement sur les modificateurs d'accès (ou niveaux de visibilité), définissant qui peut accéder à quoi.

Visibilité publique (public)

Visibilité protégée (protected)

Visibilité privée (private)

Principe fondamental : Les attributs doivent être privés dans la majorité des cas.

Encapsulation : structure classique d'une classe

Une classe bien encapsulée suit généralement cette organisation :

Exemple simple d'encapsulation (conceptuel)

Sans encapsulation (mauvaise pratique)

Voici un exemple en Java :

  1. class CompteBancaire {
  2.     public double solde;
  3. }

Problèmes :

Avec encapsulation (bonne pratique)

Voici un exemple en Java :

  1. class CompteBancaire {
  2.     private double solde;
  3.  
  4.     public void deposer(double montant) {
  5.         if (montant > 0) {
  6.             solde += montant;
  7.         }
  8.     }
  9.  
  10.     public void retirer(double montant) {
  11.         if (montant > 0 && montant <= solde) {
  12.             solde -= montant;
  13.         }
  14.     }
  15.  
  16.     public double getSolde() {
  17.         return solde;
  18.     }
  19. }

Analyse :

Getters et setters : coeur de l'encapsulation

Rôle des getters

Les getters permettent de lire une valeur sans exposer directement l'attribut. Voici un exemple en Java :

  1. public double getSolde() {
  2.     return solde;
  3. }

Rôle des setters

Les setters permettent de modifier une valeur avec contrôle. Voici un exemple en Java :

  1. public void setSolde(double solde) {
  2.     if (solde >= 0) {
  3.         this.solde = solde;
  4.     }
  5. }

Attention : Fournir systématiquement des getters et setters n'est pas toujours une bonne pratique. Il est souvent préférable de fournir des méthodes métier (deposer, retirer) plutôt que des setters génériques.

Encapsulation et invariants de classe

Un invariant est une règle qui doit toujours être vraie pour un objet.

Exemples :

L'encapsulation garantit ces invariants en empêchant les modifications incontrôlées.

Encapsulation vs abstraction

Encapsulation Abstraction
Cache les données Cache la complexité
Contrôle l'accès Définit le quoi, pas le comment
Basée sur la visibilité Basée sur les interfaces
Protection interne Simplification externe

Ces deux notions sont complémentaires et souvent utilisées ensemble.

Encapsulation dans différents langages

Java / C#

Python

PHP

Bonnes pratiques d'encapsulation

Encapsulation et conception orientée objet

Une bonne encapsulation :

Elle est l'un des fondements d'un code orienté objet propre et professionnel.

Conclusion

L'encapsulation n'est pas seulement une règle syntaxique, mais un principe de conception fondamental. Elle impose une discipline permettant de construire des logiciels plus fiables, évolutifs et compréhensibles. En maîtrisant l'encapsulation, le développeur pose les bases solides d'une architecture orientée objet de qualité.



Dernière mise à jour : Jeudi, le 1er janvier 2026