↑
CHAPITRE 5.3

Getters et setters

Méthodes pour accéder et modifier les attributs privés
Les getters et setters sont des méthodes publiques qui permettent d'accéder et de modifier les attributs privés. C'est la méthode standard en Java pour implémenter l'encapsulation.

5.3Getters et setters

5.3.1 – Rôle

Les getters et setters sont des méthodes publiques qui permettent de contrôler l'accès aux attributs privés. Ils sont essentiels pour implémenter l'encapsulation en Java.

🔍 Getters (Accesseurs)

Un getter (accesseur) est une méthode qui retourne la valeur d'un attribut privé. Il permet de lire la valeur sans accès direct à l'attribut.

Structure d'un getter :

public class Personne {
    private String nom;
    private int age;
    
    // Getter pour 'nom'
    public String getNom() {
        return nom;
    }
    
    // Getter pour 'age'
    public int getAge() {
        return age;
    }
}

✏️ Setters (Mutateurs)

Un setter (mutateur) est une méthode qui modifie la valeur d'un attribut privé. Il permet de contrôler et valider les valeurs avant de les assigner.

Structure d'un setter :

public class Personne {
    private String nom;
    private int age;
    
    // Setter pour 'nom'
    public void setNom(String nom) {
        this.nom = nom;
    }
    
    // Setter pour 'age'
    public void setAge(int age) {
        this.age = age;
    }
}

đź“‹ Conventions de nommage

En Java, les getters et setters suivent des conventions strictes :

  • Getter : get + nom de l'attribut (première lettre en majuscule)
  • Setter : set + nom de l'attribut (première lettre en majuscule)
  • Pour les boolĂ©ens, on peut utiliser is au lieu de get

Exemples de conventions :

public class Personne {
    private String nom;
    private int age;
    private boolean actif;
    
    // Getters
    public String getNom() { return nom; }
    public int getAge() { return age; }
    public boolean isActif() { return actif; }  // 'is' pour booléen
    
    // Setters
    public void setNom(String nom) { this.nom = nom; }
    public void setAge(int age) { this.age = age; }
    public void setActif(boolean actif) { this.actif = actif; }
}

âś… Avantages des getters et setters

  • ContrĂ´le d'accès : Vous contrĂ´lez comment les attributs sont lus et modifiĂ©s
  • Validation : Vous pouvez valider les valeurs avant de les assigner
  • FlexibilitĂ© : Vous pouvez changer l'implĂ©mentation interne sans affecter le code client
  • Logique supplĂ©mentaire : Vous pouvez ajouter du code (logs, notifications, etc.) lors de l'accès

5.3.2 – Utilisation

Les getters et setters s'utilisent pour accéder et modifier les attributs privés depuis l'extérieur de la classe.

📝 Utilisation de base

Exemple simple :

public class Personne {
    private String nom;
    private int age;
    
    public String getNom() {
        return nom;
    }
    
    public void setNom(String nom) {
        this.nom = nom;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
}

// Utilisation
Personne p = new Personne();
p.setNom("Jean");           // Utiliser le setter
p.setAge(25);
String nom = p.getNom();    // Utiliser le getter
int age = p.getAge();

🛡️ Validation dans les setters

Un des avantages des setters est de pouvoir valider les valeurs avant de les assigner :

Exemple : Setter avec validation

public class Personne {
    private int age;
    
    public void setAge(int age) {
        // Validation : l'âge doit être positif
        if (age < 0) {
            System.out.println("Erreur : l'âge ne peut pas être négatif");
            return;  // Ne modifie pas la valeur
        }
        
        // Validation : l'âge doit être raisonnable
        if (age > 150) {
            System.out.println("Erreur : l'âge semble invalide");
            return;
        }
        
        this.age = age;  // Assignation seulement si valide
    }
    
    public int getAge() {
        return age;
    }
}

📊 Exemple complet : Classe avec getters et setters

Exemple complet :

public class Personne {
    // Attributs privés
    private String nom;
    private int age;
    private String email;
    
    // Constructeur
    public Personne(String nom, int age) {
        this.nom = nom;
        this.age = age;
    }
    
    // Getters
    public String getNom() {
        return nom;
    }
    
    public int getAge() {
        return age;
    }
    
    public String getEmail() {
        return email;
    }
    
    // Setters
    public void setNom(String nom) {
        if (nom != null && !nom.trim().isEmpty()) {
            this.nom = nom;
        }
    }
    
    public void setAge(int age) {
        if (age >= 0 && age <= 150) {
            this.age = age;
        }
    }
    
    public void setEmail(String email) {
        if (email != null && email.contains("@")) {
            this.email = email;
        }
    }
}

đź”’ Getters sans setters (lecture seule)

Parfois, vous voulez permettre la lecture mais pas la modification. Dans ce cas, créez seulement un getter :

Exemple : Attribut en lecture seule

public class Personne {
    private String nom;
    private final int id;  // ID ne peut pas être modifié
    
    public Personne(String nom, int id) {
        this.nom = nom;
        this.id = id;  // Initialisé une seule fois
    }
    
    // Getter : lecture autorisée
    public int getId() {
        return id;
    }
    
    // Pas de setter : modification interdite
    // public void setId(int id) { ... }  // ❌ Ne pas créer
    
    public String getNom() {
        return nom;
    }
    
    public void setNom(String nom) {
        this.nom = nom;
    }
}

📊 Tableau de comparaison : Accès direct vs Getters/Setters

Critère Accès direct (public) Getters/Setters (private)
Encapsulation ❌ Aucune ✅ Contrôle total
Validation ❌ Impossible ✅ Possible dans les setters
Flexibilité ❌ Code client dépendant ✅ Implémentation changeable
Lecture seule ❌ Impossible ✅ Getter sans setter
Logique supplémentaire ❌ Impossible ✅ Logs, notifications, etc.

💡 Points clés à retenir

  • Getter : MĂ©thode qui retourne la valeur d'un attribut privĂ©
  • Setter : MĂ©thode qui modifie la valeur d'un attribut privĂ©
  • Convention : getXxx() pour les getters, setXxx() pour les setters
  • BoolĂ©ens : Utiliser isXxx() pour les getters de boolĂ©ens
  • Validation : Ajouter la validation dans les setters
  • Lecture seule : CrĂ©er seulement un getter si l'attribut ne doit pas ĂŞtre modifiĂ©
  • Encapsulation : Les getters/setters permettent de contrĂ´ler l'accès aux donnĂ©es
Conseils pratiques :
  • Toujours rendre les attributs private et utiliser des getters/setters
  • Ajouter de la validation dans les setters pour garantir l'intĂ©gritĂ© des donnĂ©es
  • Utiliser des getters/setters mĂŞme si la logique est simple (flexibilitĂ© future)
  • Pour les attributs immuables, crĂ©er seulement un getter