Menu
Coddy logo textTech

Resumen - Usuario validado

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 63 de 87.

challenge icon

Desafío

Fácil

¡Vamos a construir un sistema de registro de usuarios completo que valide los datos de entrada y utilice excepciones personalizadas para comunicar exactamente qué salió mal! Combinarás todo lo aprendido en este capítulo: excepciones personalizadas verificadas (checked) y no verificadas (unchecked), la jerarquía de excepciones y try-with-resources con un validador auto-closeable.

Organizarás tu código en cinco archivos:

  • ValidationException.java: Crea una excepción verificada que sirva como base para todos los errores de validación. Esta excepción debe extender de Exception e incluir un constructor que acepte un mensaje.
  • InvalidUsernameException.java: Crea una excepción verificada para fallos en la validación del nombre de usuario. Esta debe extender tu clase ValidationException, creando una pequeña jerarquía de excepciones. Incluye un constructor que acepte un mensaje y lo pase al padre.
  • InvalidAgeException.java: Crea una excepción no verificada para errores relacionados con la edad (como edades negativas, que representan errores de programación). Esta debe extender de RuntimeException con un constructor que acepte un mensaje.
  • UserValidator.java: Crea una clase que implemente AutoCloseable para simular una sesión de validación que debe cerrarse correctamente. Tu validador debe:

    Imprimir "Validator session started" en el constructor.

    Tener un método validateUsername(String username) que lance InvalidUsernameException si el nombre de usuario es null, está vacío o tiene menos de 3 caracteres (con el mensaje "Username must be at least 3 characters"). De lo contrario, imprime "Username '[username]' is valid".

    Tener un método validateAge(int age) que lance InvalidAgeException si la edad es negativa (con el mensaje "Age cannot be negative: [age]"). Si la edad es menor de 13, lanza ValidationException con el mensaje "Must be at least 13 years old". De lo contrario, imprime "Age [age] is valid".

    Implementar close() para imprimir "Validator session closed".

  • Main.java: ¡Une todo tu sistema de validación! Recibirás dos entradas: un nombre de usuario (String) y una edad (entero).

    Usa try-with-resources para crear un UserValidator. Dentro del bloque try, primero valida el nombre de usuario, luego valida la edad. Si ambos pasan, imprime "User registration successful!"

    Captura InvalidUsernameException e imprime "Username error: [message]". Captura InvalidAgeException e imprime "Age error: [message]". Captura ValidationException (el padre) e imprime "Validation error: [message]".

    ¡El validador debe cerrarse automáticamente independientemente de si la validación tiene éxito o falla!

Recibirás dos entradas en orden: nombre de usuario (String) y edad (entero).

Este desafío reúne todo el capítulo: construirás una jerarquía de excepciones con ValidationException como padre, usarás adecuadamente tanto excepciones verificadas como no verificadas, y asegurarás que el recurso de tu validador siempre se limpie con try-with-resources. ¡Observa cómo capturar la clase padre ValidationException después de su hija InvalidUsernameException te permite manejar casos específicos primero mientras sigues capturando otros errores de validación!

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer entradas
        String username = scanner.nextLine();
        int age = scanner.nextInt();
        
        // TODO: Usa try-with-resources para crear un UserValidator
        // Dentro del bloque try:
        //   1. Valida el username
        //   2. Valida el age
        //   3. Si ambos pasan, imprime "User registration successful!"
        
        // TODO: Captura InvalidUsernameException e imprime "Username error: [message]"
        
        // TODO: Captura InvalidAgeException e imprime "Age error: [message]"
        
        // TODO: Captura ValidationException (padre) e imprime "Validation error: [message]"
        
        // Note: ¡El validador debe cerrarse automáticamente independientemente del éxito o el fracaso!
    }
}

Todas las lecciones de Programación Orientada a Objetos