Encapsulation des données

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

L'encapsulation des données (ou encapsulage des données) est une règle de microarchitecture (architecture détaillée) consistant à cacher les données d’une classe ou d’un module aux autres classes ou modules, c'est-à-dire, empêcher l'accès aux données par un autre moyen que des méthodes (fonctions membres). Par conséquent, l’interface d’une classe ou d’un module obéissant à ce principe n’expose jamais ces membres de données comme des variables, tableaux ou structures mais seulement des méthodes (fonctions membres).

Implémentation[modifier | modifier le code]

Tous les langages de programmation orientée objet comme Java ou C++ offrent des limitateurs d’accès (niveaux de visibilité) permettant d’implémenter aisément le principe d’encapsulation des données. Les limitateurs traditionnels sont :

  • publique : les méthodes (fonctions membres) de toutes les autres classes ou modules peuvent accéder aux données possédant le niveau de visibilité publique. Il s'agit du plus bas niveau de protection des données.
  • protégée : l'accès aux données protégées est réservé aux méthodes (fonctions membres) des classes héritières. Il s'agit d’un niveau intermédiaire de protection des données.
  • privée : l'accès aux données privées est limité aux méthodes (fonctions membres) de la classe propriétaire. Il s'agit du niveau le plus élevé de protection des données.

Malheureusement, aucun langage de programmation orientée objet oblige le programmeur à protéger les données membres, autrement dit, il est toujours possible de les déclarer publiques. Il s’agit d’un anti-patron de conception que tout bon programmeur évite à tout prix et ce pour plusieurs raisons.

Motivations[modifier | modifier le code]

  1. L'encapsulation permet de changer les structures de données d’un module ou d’une classe sans modifier l’interface de celle-ci et donc sans modifier les classes et modules qui l’utilisent. Cette situation arrive fréquemment lorsque l’on veut augmenter l’efficacité (rapidité de traitement) d’une classe ou d’un module, il faut souvent modifier les structures de données en conséquence.
  2. L'encapsulation permet d’ajouter aisément des règles de validation et des contraintes d’intégrité comme, 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é).
  3. Plus généralement, l'encapsulation permet d’informer la classe qu’un changement à ses données est sur le point de survenir. Si cette information devient éventuellement cruciale, le programmeur n’ayant pas encapsulé les données se trouvera devant une impasse.
  4. 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.
  5. 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.

Voir aussi[modifier | modifier le code]

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

Pressman R. S., Software Engineering: A Practitioner's Approach, Third Edition. McGraw-Hill. Chapitre 10, 1992.