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 des utilisateurs qui valide les données saisies et utilise des exceptions personnalisées pour indiquer exactement ce qui s'est mal passé ! Vous combinerez tout ce qui a été présenté dans ce chapitre : les exceptions personnalisées vérifiées et non vérifiées, la hiérarchie d'exceptions et le try-with-resources avec un validateur auto-fermant.

Vous organiserez votre code sur cinq fichiers :

  • ValidationException.java : créez une exception vérifiée qui servira 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 vérifiée pour les échecs de validation du nom d'utilisateur. Elle 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 vérifiée pour les erreurs liées à l'âge (comme les âges négatifs, qui représentent des erreurs de programmation). Elle doit étendre RuntimeException avec un constructeur qui accepte un message.
  • UserValidator.java : créez une classe qui implémente AutoCloseable afin de simuler une session de validation qui doit être correctement fermée. Votre validateur doit :

    Afficher Validator session started dans le constructeur.

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

    Disposer d'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, lever ValidationException avec le message "Must be at least 13 years old". Sinon, afficher 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 try-with-resources pour créer un UserValidator. Dans le bloc try, validez d'abord le nom d'utilisateur, puis l'âge. Si les deux validations réussissent, afficher User registration successful!

    Interceptez InvalidUsernameException et affichez Username error: [message]. Interceptez InvalidAgeException et affichez Age error: [message]. Interceptez 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 suivant : le nom d'utilisateur (String), puis l'âge (entier).

Ce défi rassemble tout le contenu du chapitre : vous construirez une hiérarchie d'exceptions avec ValidationException comme parent, utiliserez de manière appropriée des exceptions vérifiées et non vérifiées, et veillerez à ce que la ressource de votre validateur soit toujours libérée grâce à try-with-resources. Remarquez comment intercepter le parent ValidationException après son enfant InvalidUsernameException vous permet de traiter d'abord les cas spécifiques tout en continuant à intercepter 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

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