Récapitulatif - Utilisateur validé
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy. Leçon 63 sur 87.
Défi
FacileConstruisons 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 étendreExceptionet 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 classeValidationException, 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 étendreRuntimeExceptionavec un constructeur qui accepte un message.UserValidator.java: créez une classe qui implémenteAutoCloseableafin de simuler une session de validation qui doit être correctement fermée. Votre validateur doit :Afficher
Validator session starteddans le constructeur.Disposer d'une méthode
validateUsername(String username)qui lèveInvalidUsernameExceptionsi 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, afficherUsername '[username]' is valid.Disposer d'une méthode
validateAge(int age)qui lèveInvalidAgeExceptionsi l'âge est négatif (avec le message"Age cannot be negative: [age]"). Si l'âge est inférieur à 13, leverValidationExceptionavec le message"Must be at least 13 years old". Sinon, afficherAge [age] is valid.Implémenter
close()pour afficherValidator 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, afficherUser registration successful!Interceptez
InvalidUsernameExceptionet affichezUsername error: [message]. InterceptezInvalidAgeExceptionet affichezAge error: [message]. InterceptezValidationException(le parent) et affichezValidation 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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé10Gestion des exceptions en POO
Hiérarchie des classes d'exceptionExceptions personnaliséesErreurs Checked vs UncheckedPattern Try-with-resourcesRécapitulatif - Utilisateur validé2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron ItérateurEntraînez-vous par vous-même : Compilateur Java en ligne