Encapsulation (programmation)

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Encapsulation.

En programmation par objet, l’encapsulation est l'idée de protéger l'information contenue dans un objet et de ne proposer que des méthodes de manipulation de cet objet. Ainsi, les propriétés et axiomes associés aux informations contenues dans l'objet seront assurés/validés par les méthodes de l'objet et ne seront plus de la responsabilité de l'utilisateur extérieur. L'utilisateur extérieur ne pourra pas modifier directement l'information et risquer de mettre en péril les axiomes et les propriétés comportementales de l'objet.

L'objet est ainsi vu de l'extérieur comme une boîte noire ayant certaines propriétés et ayant un comportement spécifié. La manière dont ces propriétés ont été paramétrées est alors cachée aux utilisateurs de la classe. On peut modifier ce paramétrage sans changer le comportement extérieur de l'objet. Cela permet donc de séparer la spécification du comportement d'un objet, du paramétrage pratique de ces spécifications.

En principe, l'encapsulation permet à l'instance d'une classe d'accéder aux attributs d'une super-classe. Par contre deux instances d'une même classe ne peuvent accéder à leurs états.

L'encapsulation dans les langages[modifier | modifier le code]

Les principes de l'encapsulation sont appliqués de manières très diverses suivant les langages. Mais on peut quand même trouver deux courants principaux.

Premièrement, une application relativement stricte des principes dans les langages objet purs (pour autant que ce terme ait un sens) comme dans SmallTalk ou Eiffel. Dans ce cadre les attributs ne sont souvent disponibles qu'en lecture en général dans le programme et en écriture aussi depuis l'intérieur de la classe d'objet. On trouve ensuite différents moyens pour adapter ce cadre à des classes amies ou à des catégories et des hiérarchies d'objets.


Deuxièmement, les langages tels que C++, Java ou Ruby et plus généralement tous les langages influencés par la syntaxe du C++ qui a proposé trois niveaux de visibilité :

  • public : les attributs publics sont accessibles à tous ;
  • protégé : les attributs protégés sont accessibles seulement à la classe elle-même et aux classes dérivées ;
  • privé : les attributs privés sont accessibles seulement par la classe elle-même.

Ce type d'encapsulation propose en fait une autre approche de l'encapsulation qui ne fait pas la distinction entre la lecture et l'écriture d'un attribut. Dans ce cadre on utilise en plus des méthodes d'accès et de modifications définies dans une des trois catégories suivant l'effet que l'on souhaite obtenir. Souvent ces deux types de méthodes sont définies en plus de l'attribut qui contient réellement la donnée.

De plus, dans ces langages, l'instance d'une classe a un accès complet à l'état d'une autre instance de la même classe. Des contraintes peuvent limiter l'accès des instances d'une classe aux attributs d'une super-classe. Enfin, des moyens autorisent certaines instances et fonctions à avoir un accès public total à d'autres instances même si elles ne sont pas de la même classe, comme c'est le cas avec les instances friend sous C++.

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :