Le troisième principe fondamental de la programmation orientée objet c’est l’encapsulation.

Dans cet article, nous allons vous expliquer en profondeur ce que c’est que l’encapsulation, à quoi il sert et pourquoi il est si important dans le paradigme orienté objet.

Les propriétés des objets ne peuvent être accédées que par ses méthodes. Ainsi, la classe encapsule à la fois les attributs et les méthodes qui permettent de manipuler les objets indépendamment de leurs états.

L’encapsulation permet de restreindre l’accès direct aux états et empêche la modification de l’objet hors de ses méthodes. Par exemple, si vous avez une classe Voiture et que vous voulez définir la valeur de sa propriété couleur à bleu, il vous faut passer par une méthode par exemple definirCouleur, implémentée par le développeur de la classe. Cette méthode peut restreindre les différentes valeurs de couleur.

Ainsi, l’encapsulation est un mécanisme qui empêche donc de modifier ou d’accéder aux objets par un autre moyen que les méthodes proposées, et de ce fait, permet de garantir l’intégrité des objets.

L’utilisateur d’une classe n’a pas forcément à savoir de quelle façon sont structurées les méthodes dans l’objet, ni le processus par lequel l’objet obtient tel ou tel état. En interdisant l’utilisateur de modifier directement les attributs, et en l’obligeant à utiliser les fonctions définies pour les modifier, on est capable de s’assurer de l’intégrité des objets. On pourra donc effectuer des contrôles sémantiques sur les données entrées par l’utilisateur.

encapsulation - poo
Figure : l’encapsulation est comme un mécanisme de boîte noire qui empêche l’utilisateur d’utiliser un objet au delà des méthodes qui lui sont proposées.

Dans le schéma précédent, la boîte noire masque les détails d’implémentation des attributs et des actions de la classe. Elle cache les attributs couleur, poids, prix. Le grand avantage de ce procédé est qu’en tant qu’utilisateur, on n’a plus à se préoccuper de comment est fait l’intérieur de l’objet de classe Voiture. On n’a plus besoin de se préoccuper sur le nombre d’attributs dans la classe Voiture. On se contente de connaître comment manipuler une voiture à l’aide des services offerts par la classe.

L’encapsulation permet de définir des niveaux de visibilité des éléments de la classe. Ces niveaux de visibilité définissent ce qu’on appelle la portée (ou encore le périmètre) de la l’attribut/méthode. La portée est ainsi définie par méthode et par attribut et indique les droits à leur accès. Il existe trois niveaux de visibilité :

  • Publique (+): les attributs publics sont accessibles à tous
  • Protégée (#): les attributs protégés sont accessibles seulement dans la classe elle-même et aux classes dérivées
  • Privée (-): les attributs privés sont accessibles seulement par la classe elle-même

Regardons le code suivant :


public class Voiture{

	//Déclaration des attributs
	private String couleur;
	private double poids;
	private int prix;
	  
	//Déclaration des méthodes
	void demarrer(){...}
	void accelerer(){...}
	public String getCouleur(){ // accesseur sur couleur
		return this.couleur; 
	}
	
		//mutateur sur couleur
	public void setCouleur(String uneCouleur){ 
		this.couleur = uneCouleur;
	}
}


public class Main{
   public static void main(String args[]){
        Voiture uneVoiture = new Voiture ();
        uneVoiture.poids = 1000;  // Erreur de compilation

        
   }
}

Le script précédent renvoie une erreur lors de son exécution parce que, bien que la classe Voiture possède un attribut « poids », un accesseur n’a pas été défini pour permettre la modification de son état. Du coup, vous voyez que même si l’attribut existe, elle n’est pas accessible à l’extérieur de la classe. C’est ce que permet l’encapsulation.


Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

>