Immuable

Dans la programmation fonctionnelle et orientée objet, un objet immuable est un objet dont l'état ne peut pas être modifié après sa création. L'API publique d'un objet immuable garantit qu'il se comportera de la même manière pendant sa durée de vie. Dans certains cas, un objet est considéré comme immuable même si les attributs utilisés en interne changent, mais l'état de l'objet semble inchangé d'un point de vue externe. Voici un exemple de classe immuable de base:

Utilisateur de classe {

finale privée Long id;
Chaîne finale privée prénom;

Utilisateur (long ça Chaîne prénom) {
ce.id = id;
ce.prénom = prénom;
}}

Tous les champs sont définitifs, ce qui signifie que le compilateur est informé que leurs valeurs ne doivent pas changer une fois initialisées. Toutes les valeurs de champ sont ensuite transmises au constructeur.


Avantages d'objets immuables

Étant donné que l'objet n'est pas modifiable, les utilisateurs savent exactement à quoi s'attendre. Le code ne peut pas être modifié, ce qui signifie qu'il n'y a aucune possibilité d'introduire des incohérences pouvant entraîner des erreurs d'exécution. Les objets immuables sont thread-safe, donc les problèmes de synchronisation sont évités. Ils sont plus faciles à concevoir, à implémenter et à utiliser que les classes mutables.

Une fois qu'un objet immuable est créé et vérifié, aucun autre thread ou processus d'arrière-plan ne pourra modifier l'objet sans que l'utilisateur en soit directement informé. Ceci est utile pour les programmes nécessitant une sécurité élevée. Lorsqu'un problème survient, le débogage est plus facile avec des objets immuables car l'origine d'un bogue peut être facilement retracée.

Objets immuables ou mutables

Alors que les objets immuables ne peuvent pas changer leur état, les objets mutables le peuvent. Les objets mutables fournissent des méthodes pour modifier le contenu d'un objet et ne sont pas aussi sûrs pour les threads que les objets immuables.

En Java, des exemples d'objets mutables incluent StringBuilder et java.util.Date. Les exemples d'objets immuables incluent toutes les classes héritées, les classes wrapper et les classes de chaînes.

En Python, des exemples de types mutables incluent list, dict et set. Les types immuables en Python incluent int, float, bool, string, unicode et tuple.