Menu
Coddy logo textTech

Récapitulatif - Utilisateur validé

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 63 sur 87.

challenge icon

Défi

Facile

Construisons un système complet d'inscription d'utilisateurs qui valide les données d'entrée et utilise des exceptions personnalisées pour communiquer exactement ce qui n'a pas fonctionné ! Vous combinerez tout ce que vous avez appris dans ce chapitre : les exceptions contrôlées (checked) et non contrôlées (unchecked) personnalisées, la hiérarchie des exceptions, et le try-with-resources avec un validateur auto-closeable.

Vous organiserez votre code sur cinq fichiers :

  • ValidationException.java : Créez une exception contrôlée qui sert de base à toutes les erreurs de validation. Cette exception doit étendre Exception et inclure un constructeur qui accepte un message.
  • InvalidUsernameException.java : Créez une exception contrôlée pour les échecs de validation du nom d'utilisateur. Celle-ci doit étendre votre classe ValidationException, créant ainsi une petite hiérarchie d'exceptions. Incluez un constructeur qui accepte un message et le transmet au parent.
  • InvalidAgeException.java : Créez une exception non contrôlée pour les erreurs liées à l'âge (comme les âges négatifs, qui représentent des erreurs de programmation). Celle-ci doit étendre RuntimeException avec un constructeur qui accepte un message.
  • UserValidator.java : Créez une classe qui implémente AutoCloseable pour simuler une session de validation qui doit être correctement fermée. Votre validateur doit :

    Afficher Validator session started dans le constructeur.

    Avoir une méthode validateUsername(String username) qui lève InvalidUsernameException si le nom d'utilisateur est nul, vide ou fait moins de 3 caractères (avec le message "Username must be at least 3 characters"). Sinon, affichez Username '[username]' is valid.

    Avoir une méthode validateAge(int age) qui lève InvalidAgeException si l'âge est négatif (avec le message "Age cannot be negative: [age]"). Si l'âge est inférieur à 13, levez ValidationException avec le message "Must be at least 13 years old". Sinon, affichez Age [age] is valid.

    Implémenter close() pour afficher Validator session closed.

  • Main.java : Rassemblez votre système de validation ! Vous recevrez deux entrées : un nom d'utilisateur (String) et un âge (entier).

    Utilisez le try-with-resources pour créer un UserValidator. À l'intérieur du bloc try, validez d'abord le nom d'utilisateur, puis validez l'âge. Si les deux réussissent, affichez User registration successful!

    Capturez InvalidUsernameException et affichez Username error: [message]. Capturez InvalidAgeException et affichez Age error: [message]. Capturez ValidationException (le parent) et affichez Validation error: [message].

    Le validateur doit se fermer automatiquement, que la validation réussisse ou échoue !

Vous recevrez deux entrées dans l'ordre : le nom d'utilisateur (String) et l'âge (entier).

Ce défi rassemble tout le chapitre : vous construirez une hiérarchie d'exceptions avec ValidationException comme parent, utiliserez de manière appropriée les exceptions contrôlées et non contrôlées, et garantirez que votre ressource de validation est toujours nettoyée avec try-with-resources. Remarquez comment la capture de l'exception parente ValidationException après son enfant InvalidUsernameException vous permet de gérer d'abord les cas spécifiques tout en capturant les autres erreurs de validation !

Essayez vous-même

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Lire les entrées
        String username = scanner.nextLine();
        int age = scanner.nextInt();
        
        // TODO: Utiliser try-with-resources pour créer un UserValidator
        // À l'intérieur du bloc try :
        //   1. Valider le username
        //   2. Valider l'age
        //   3. Si les deux réussissent, afficher "User registration successful!"
        
        // TODO: Intercepter InvalidUsernameException et afficher "Username error: [message]"
        
        // TODO: Intercepter InvalidAgeException et afficher "Age error: [message]"
        
        // TODO: Intercepter ValidationException (parent) et afficher "Validation error: [message]"
        
        // Note: Le validateur doit se fermer automatiquement, quel que soit le succès ou l'échec !
    }
}

Toutes les leçons de Programmation Orientée Objet