Qu'est-ce que l'encapsulation ?
L'encapsulation est un principe fondamental de la programmation orientee objet qui consiste a regrouper les donnees (attributs) et les traitements (methodes) au sein d'une meme entite (classe) tout en controlant l'acces de l'exterieur. L'objectif est de proteger l'etat interne d'un objet contre les modifications non controlees et de definir une interface publique claire.
Modificateurs d'acces
Les langages orientes objet fournissent des modificateurs d'acces pour controler la visibilite. 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 quatrieme niveau (package-private/internal) limite l'acces au meme 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 a la compilation mais pas a l'execution.
Getters et setters
Les accesseurs (getters) et mutateurs (setters) sont des methodes publiques qui controlent l'acces aux attributs prives. Ils permettent d'ajouter de la validation (verifier qu'un age est positif), de la logique derivee (calculer un champ a la volee), ou du logging sans modifier l'interface publique. En Java, on utilise des methodes explicites (getName(), setName()). En Python, le decorateur @property offre une syntaxe transparente. En C#, les proprietes avec get/set sont une fonctionnalite native du langage.
Avantages de l'encapsulation
L'encapsulation offre plusieurs avantages majeurs : la protection des donnees (impossible de mettre l'objet dans un etat invalide), le decouplage (les clients dependent de l'interface, pas de l'implementation), la maintenabilite (on peut modifier l'implementation 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-dela 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 metier derriere une API. Les fonctions encapsulent un algorithme. En JavaScript, les closures offrent une encapsulation naturelle (les variables capturees sont inaccessibles de l'exterieur). Le principe d'encapsulation est universel : cacher les details, exposer le necessaire.