Objets immuables

Objets finaux en Java

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 le mot immuable ne vous dit rien, ce n'est pas grave. En PHP, contrairement qu'en Java, cette notion n'est pas répandue à grande échelle. On verra plus loin quels sont les principes des objets immuables ainsi que quelles instances des classes Java sont ce type d'objets.

Objets immuables en Java

Il s'agit ici d'instances d'objets dont valeurs ne peuvent pas être modifiées après l'initialisation. Regardons ce que peut provoquer ce code pour mieux comprendre l'utilité de ces objets :

afficher le code

On peut observer que le résultat retourné est sera "Found first name Bastian". Ceci dit, la valeur "a" est toujours ignorée, malgré son passage à l'instance du Getter. Afin d'éviter des situations de ce genre où un Thread modifie soudainement la recherche, on implémente les objets immuables. Le correctif se trouve ci-dessous :

afficher le code

Le résultat est correct :

Found first name Andre
Found first name Andre
Found first name Andre
Found first name Bastian

Quelles modifications nous avons introduit par rapport à l'exemple qui ne fonctionnait pas correctement ? Avant tout, on a déclaré la classe Immutable finale. Cela veut dire qu'elle ne peut pas être surchargée. Ensuite, ses attributs partagés sont devenus privés (private) et finaux (final). Cela signifie qu'ils ne peuvent pas être modifiés à partir du moment où l'on y attribue une valeur. On remarque également l'absence des setters. Généralement, dans classes immuables on devrait éviter rajout des méthodes qui sont suceptibles d'influencer le comportement des variables.

D'après l'exemple ci-dessus on peut immédiatement constater qu'aucune synchronisation supplémentaire est inutile. La valeur, une fois initialisée, ne pourra pas être modifiée par aucun Thread. En Java un exemple d'une classe immuable peut être la classe BigDecimal ou String dont les valeurs ne sont pas modifiables après l'appel du constructeur.

Bartosz KONIECZNY Concurrence

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 Symfony1

Comment détecter si l'utilisateur est connecté ?

Dans notre fichier layout.php on contient une partie réservée aux utilisateurs connectés et non-connectés. Pour pouvoir détecter cela sans trop de complication, on devrait utiliser les slots. Le fichier d'action va contenir le framgent suivant en fonction du type de l'utilisateur (connecté ou pas) :

$this->getResponse()->setSlot('isConnected', 'true');
Alors dans le fichier layout.php on pourra utiliser ceci :
if(!has_slot('isConnected')  ) {
  // include login form
  include_partial('users/formLogin');
}
else {
  include_partial('users/accountBox');
}