Qu'est-ce que l'encapsulation ?
L'encapsulation est un principe fondamental de la programmation orientee objet qui consiste à regrouper les données (attributs) et les traitements (méthodes) au sein d'une même entité (classe) tout en controlant l'accès de l'extérieur. L'objectif est de protéger l'état interne d'un objet contre les modifications non controlees et de définir une interface publique claire.
Modificateurs d'accès
Les langages orientes objet fournissent des modificateurs d'accès pour contrôler la visibilité. public : accessible depuis n'importe ou. private : accessible uniquement depuis la classe elle-meme. protected : accessible depuis la classe et ses sous-classes. En Java et C#, un quatrième niveau (package-private/internal) limite l'accès au même package ou assembly. En Python, la convention utilise le prefixe underscore (_attribut pour protege, __attribut pour prive avec name mangling). En TypeScript, les modificateurs private et protected sont verifies à la compilation mais pas à l'exécution.
Getters et setters
Les accesseurs (getters) et mutateurs (setters) sont des méthodes publiques qui controlent l'accès aux attributs prives. Ils permettent d'ajouter de la validation (vérifier qu'un age est positif), de la logique derivee (calculer un champ à la volee), ou du logging sans modifier l'interface publique. En Java, on utilise des méthodes explicites (getName(), setName()). En Python, le décorateur @property offre une syntaxe transparente. En C#, les propriétés avec get/set sont une fonctionnalité native du langage.
Avantages de l'encapsulation
L'encapsulation offre plusieurs avantages majeurs : la protection des données (impossible de mettre l'objet dans un état invalide), le decouplage (les clients dépendent de l'interface, pas de l'implémentation), la maintenabilité (on peut modifier l'implémentation interne sans casser le code client), et la testabilite (on teste via l'interface publique). L'encapsulation est la base du principe de moindre connaissance (loi de Demeter) : un objet ne devrait interagir qu'avec ses collaborateurs directs.
Encapsulation au-delà des classes
L'encapsulation ne se limite pas aux classes. Les modules encapsulent des groupes de fonctions et de types (les exports publics forment l'interface). Les microservices encapsulent un domaine métier derrière une API. Les fonctions encapsulent un algorithme. En JavaScript, les closures offrent une encapsulation naturelle (les variables capturees sont inaccessibles de l'extérieur). Le principe d'encapsulation est universel : cacher les détails, exposer le nécessaire.