Encapsulation (programmation)

En programmation, l’encapsulation désigne le regroupement de données avec un ensemble de routines qui en permettent la lecture et la manipulation. Ce principe est souvent accompagné du masquage de ces données brutes afin de s’assurer que l’utilisateur ne contourne pas l’interface qui lui est destinée. L’ensemble se considère alors comme une boîte noire ayant un comportement et des propriétés spécifiés.

L’encapsulation est un pilier de la programmation orientée objet, où chaque classe définit des méthodes ou des propriétés pour interagir avec les données membres, mais ce principe peut se rencontrer dans d’autres styles de programmation (par exemple la programmation modulaire).

Motivations

Implémentation

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é :

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 peut aussi utiliser des méthodes d'accès et de modifications définies dans l'un de ces niveaux de visibilité suivant l'effet que l'on souhaite obtenir. Souvent des méthodes des deux types sont définies en plus de l'attribut qui contient réellement la donnée. Enfin, des moyens autorisent d'autres classes et fonctions libres à librement accéder à tous les attributs d'une classe, comme c'est le cas avec les classes et fonctions amies en C++.

Notes et références

  1. (en) Wm. Paul Rogers, « Encapsulation is not information hiding », JavaWorld,‎ 18 mai 2001 (lire en ligne, consulté le 9 décembre 2016)

Voir aussi