Encapsulation

Un principe de la programmation orientée objet

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

Si l'on veut protéger des informations contre une modification inattendue, on doit se référer au principe d'encapsulation. Il est également utilisé, peut-être la plupart de cas incosciemment, par des développeurs PHP.

Qu'est-ce que l'encapsulation en Java ?

Le principe d'encapsulation consiste sur la protection des informations contenues dans un objet. Cette protection peut être représentée par l'absence de possibilité de modifier ces données depuis l'extérieur. On peut accéder à ces informations uniquement par les services proposés. Un peu confus ? Analysons un exemple :

public class NonEncapsulated {
    public static void main(String[] args) {
        Dog dogInst = new Dog("test");
        dogInst.name = "test2";
    }
}

class Dog {
    public String name;
  
    public Dog(String n) {
        name = n;
    }
}

La classe Dog n'est pas encapsulée. Une classe extérieure peut facilement accéder à ses attributs et ainsi provoquer un changement inattendu du comportement du programme. Voici la même classe encapsulée :

public class Encapsulated {
    public static void main(String[] args) {
        Dog dogInst = new Dog("test");
        dogInst.setName("test2");
    }
}

class Dog {
    private String name;
  
    public Dog(String n) {
        name = n;
    }
  
    public void setName(String n) {
        name = n;
    }
  
    private String getName() {
        return name;
    }
}

Quel changement par rapport au premier code ? Tout d'abord on remarque que l'attribut name est devenu privé. Ensuite, pour le modifier on a dû créer la méthode setName(String n). Pour récupérer sa valeur on devra désormais faire appel à getName(). Grâce à cela on a gagné une meilleure contrôle sur les données. On évite ainsi une situation où la modification directe de l'attribut name peut changer d'une manière inattendue le fonctionnement de l'instance Dog.

Par exemple on peut supposer que l'attribut name peut contenir uniquement 4 caractères. Si l'on accepte sa modification depuis l'extérieure, on n'a pas de possibilité de détecter cette contrainte. Par contre, si l'attribut devient privé et il est modifiable uniquement via une fonction, on peut totalement contrôler les données saisies par l'utilisateur.

Quand encapsuler un objet en Java ?

L'encapsulation :
- garantit une meilleure flexibilité du code
- garantit un meilleure contrôle les données (niveaux d'accès)
- aide à concevoir des objets immuables
- permet de mieux gérer les parties du code

Une question ? Une remarque ?

*

*

Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil MySQL

Vous rencontrez un problème lors de la suppression d'un élément ou d'une table liée à des contraintes des clés étrangères. L'une des solution peut être l'annulation de la vérification de ces contraintes.


-- Au début on indique à MySQL de ne pas vérifier les contraintes des clés étrangères
SET FOREIGN_KEY_CHECKS=0;
-- Ensuite on passe à l'opération de suppression d'une table
DROP TABLE ma_table;
-- A la fin (ou au moment voulu) on restaure la vérification des contraintes
SET FOREIGN_KEY_CHECKS=1;

Vous pouvez en savoir plus sur FOREIGN_KEY_CHEKS dans la documentation du MySQL.