Menu
Coddy logo textTech

Masquage d'informations

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy. Leçon 12 sur 87.

La dissimulation d'informations est le principe consistant à restreindre l'accès direct aux données internes d'un objet. En combinant les champs private avec des getters et des setters, vous créez une barrière protectrice autour de l'état de votre objet.

Considérez ce qui se passe sans masquage d'informations :

public class Temperature {
    public double celsius;  // Exposé directement
}

// N'importe qui peut définir des valeurs invalides
Temperature t = new Temperature();
t.celsius = -500;  // En dessous du zéro absolu - impossible !

Avec le masquage d'informations, vous contrôlez la manière dont les données sont consultées et modifiées :

public class Temperature {
    private double celsius;
    
    public void setCelsius(double celsius) {
        if (celsius >= -273.15) {
            this.celsius = celsius;
        }
    }
    
    public double getCelsius() {
        return celsius;
    }
}

Désormais, les températures invalides sont rejetées automatiquement. La représentation interne est masquée — vous pourriez plus tard modifier la manière dont la température est stockée en interne (peut-être en Kelvin) sans affecter le code qui utilise la classe.

Cette approche offre trois avantages clés : la validation garantit l'intégrité des données, la flexibilité permet des modifications internes sans casser le code externe, et le contrôle vous permet de décider exactement quelles opérations sont autorisées sur vos données.

challenge icon

Défi

Facile

Construisons une classe de gestion Password qui illustre la dissimulation des informations en protégeant les données sensibles et en appliquant des règles de sécurité grâce à un accès contrôlé.

Tu vas créer deux fichiers pour organiser ton code :

  • Password.java : crée une classe Password qui masque ses données internes et contrôle la manière dont les mots de passe peuvent être définis et consultés :
    • un champ password privé (String) qui stocke le mot de passe réel
    • un champ minLength privé (int) qui définit la longueur minimale acceptable du mot de passe
    • un constructeur qui prend la longueur minimale requise
    • un setter setPassword(String password) qui n'accepte que les mots de passe respectant la longueur minimale requise. S'il est valide, stocke-le et renvoie true ; s'il est trop court, ne modifie pas le mot de passe et renvoie false
    • un getter getMaskedPassword() qui renvoie le mot de passe en remplaçant tous les caractères par des astérisques (*) — n'expose jamais le mot de passe réel !
    • une méthode checkPassword(String attempt) qui renvoie true si la tentative correspond au mot de passe stocké, et false dans le cas contraire
    • un getter getLength() qui renvoie la longueur du mot de passe actuel (ou 0 si aucun mot de passe n'est défini)
  • Main.java : crée un objet Password avec une longueur minimale de 6, puis lis deux entrées : un mot de passe à définir et une tentative à vérifier. Affiche trois lignes :
    • Set: true ou Set: false (résultat de la définition du mot de passe)
    • Masked: ****** (la version masquée du mot de passe)
    • Match: true ou Match: false (résultat de la vérification de la tentative)

Tu recevras deux entrées : le mot de passe à définir et la tentative de mot de passe à vérifier.

Remarque que le mot de passe réel n'est jamais directement accessible depuis l'extérieur de la classe : c'est la dissimulation des informations en action. La classe contrôle exactement quelles informations sont révélées et comment le mot de passe peut être modifié.

Essayez vous-même

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Lire le mot de passe à définir
        String passwordToSet = scanner.nextLine();
        // Lire la tentative de mot de passe à vérifier
        String passwordAttempt = scanner.nextLine();
        
        // TODO: Créer un objet Password avec une longueur minimale de 6
        
        // TODO: Définir le mot de passe et afficher le résultat ("Set: true" ou "Set: false")
        
        // TODO: Afficher le mot de passe masqué ("Masked: ******")
        
        // TODO: Vérifier la tentative de mot de passe et afficher le résultat ("Match: true" ou "Match: false")
        
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Java en ligne