Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Les objets muables et les objets immuables

Par Seifeddine AMMAR Publié le 12/02/2020 à 16:56:21 Noter cet article:
(0 votes)
En attente de relecture par le comité de lecture

Cet article est une traduction de mon article "Mutable and immutable objects" disponible sur : https://www.supinfo.com/articles/single/8467--mutable-and-immutable-objects

Les objets muables :

Les objets muables sont les objets dont les valeurs qu'ils contiennent peuvent être modifié après sa création. Une fois que l'objet a été créé et stocké dans un éspace mémoire, les données peuvent encore être modifié.

Regardons l'exemple ci-dessous :

class Student{

	private String name;
	private Date birthDate;
				
	public Student(String name, Date birthDate){
		this.name = name;
		this.birthDate = birthDate;
	}

	public void setName(String name){
		this.name = name;
	}
				
	public void setBirthDate(Date birthDate){
		this.birthDate = birthDate;    
	}

	public String getName(){
		return name;
	}

	public Date getBirthDate(){
		return birthDate;
	}
}
		

Comme on a pu voir dans l'exemple ci-dessus, le code permet à l'objet élève (student) d'être modifié en utilisiant les setters.

Student jean = new Student("Jean", date);
jean.setName("Jean-Claude");		
        

Les objets immuables ?

Contrairement aux objets muables, les objets immuables ne peuvent pas être modifiés après leurs créations. Revenons alors à notre dernier exemple, et supprimons les lignes qui permettaient de faire le changement sur les données (setters)

class Student{

    private final String name;
    private final Date birthDate;
    
    public Student(String name, Date birthDate){
        this.name = name;
        this.birthDate = birthDate;
    }

    public String getName(){
        return name;
    }

    public Date getBirthDate(){
        return birthDate;
    }
}	
		

Maintenant, aucun objet ne peut être modifié après sa création car la fonction qui le permettait n'y est plus. Tous les données sont finales et ne peuvent pas être le sujet d'un changement après qu'une valeur leurs ai été assignée dans le constructeur.

Note à propos les chaines de caractère en Java:

L'un des objets immuables les plus connu et utilisé en Java sont les Strings (chaines de caractères), puisque il est impossible de modifier le contenu de l'objet après sa création. Il n'y à aucune fonction String qui permet la modification du texte de l'objet appelé. Toutes fonctions qui modifient le texte, renvoie un nouvel objet après la modification, tout en concervant le contenu de l'ancien objet tel qu'il est.

Si vous voulez ajouter des caractères au texte par concaténation, le retour sera un nouvel objet stocké dans un nouvel espace mémoire.

Quelques IDEs alertent l'utilisateur de la présence d'une concaténation de chaines de caractère à l'intérieur d'une boucle car cela peut produire des problèmes de pérformance due à la création d'un nouvel objet chaque itération ce qui peut surcharger la mémoire.

Les images suivantes de Intellij IDEA nous alerte de la présence d'une concaténation de String dans une boucle .

L'IDE propose d'utiliser StringBuilder à la place. Les objets de StringBuilder sont traités comme des tableaux à longueur dynamique qui contiennent une séquence de caractères. Ce qui fait, qu'à n'importe quel moment, la longueur et le contenu de la séquence est modifiable par invocation de méthodes.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels