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, l’encapsulation désigne le principe de regrouper des données brutes avec un ensemble de routines permettant de les lire ou de les manipuler. Ce principe est souvent accompagné du masquage de ces données brutes[1] afin de s’assurer que l’utilisateur ne contourne pas l’interface qui lui est destiné. 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[modifier | modifier le code]

  • L'encapsulation permet de modifier les structures de données internes sans modifier l’interface de celle-ci et donc sans impacter les utilisateurs. Cette situation arrive fréquemment lorsque l’on veut améliorer l’efficacité (rapidité de traitement) d’une classe ou d’un module, il faut souvent modifier les structures de données en conséquence.
  • L'encapsulation permet d’ajouter aisément des règles de validation et des contraintes d’intégrité, par exemple limiter le domaine des valeurs qu’une variable peut prendre (validité) ou vérifier que cette valeur n’entre pas en conflit avec les valeurs d’autres variables (intégrité).
  • L'encapsulation évite l’antipattern plat de spaghetti qui ne permet pas de déterminer le qui, le quoi et le comment d’une modification de données. En effet, l'application systématique de l'encapsulation impose un couplage faible et empêche donc le couplage fort, par espace commun ou par contenu, responsable du plat de spaghetti.
  • Finalement, l'encapsulation permet d’offrir une interface orientée services et responsabilités, c’est-à-dire, d’offrir aux utilisateurs (programmeurs, abstractionnistes et architectes) de la classe ou du module une interface indiquant clairement quels services sont offerts et quelles sont les responsabilités de cette classe ou module.

Implémentation[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++.

Notes et références[modifier | modifier le code]

  • Cet article est partiellement ou en totalité issu de l'article intitulé « Encapsulation des données » (voir la liste des auteurs).
  • Pressman R. S., Software Engineering: A Practitioner's Approach, Third Edition. McGraw-Hill. Chapitre 10, 1992.
  1. (en) Wm. Paul Rogers, « Encapsulation is not information hiding », JavaWorld,‎ (lire en ligne)

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :