Menu
Coddy logo textTech

Recapitulação - Usuário Validado

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 63 de 87.

challenge icon

Desafio

Fácil

Vamos construir um sistema completo de registro de usuários que valida os dados de entrada e usa exceções personalizadas para comunicar exatamente o que deu errado! Você combinará tudo deste capítulo: exceções personalizadas verificadas (checked) e não verificadas (unchecked), a hierarquia de exceções e o try-with-resources com um validador auto-closeable.

Você organizará seu código em cinco arquivos:

  • ValidationException.java: Crie uma exceção verificada que sirva como base para todos os erros de validação. Esta exceção deve estender Exception e incluir um construtor que aceite uma mensagem.
  • InvalidUsernameException.java: Crie uma exceção verificada para falhas de validação de nome de usuário. Esta deve estender sua classe ValidationException, criando uma pequena hierarquia de exceções. Inclua um construtor que aceite uma mensagem e a passe para o pai.
  • InvalidAgeException.java: Crie uma exceção não verificada para erros relacionados à idade (como idades negativas, que representam erros de programação). Esta deve estender RuntimeException com um construtor que aceite uma mensagem.
  • UserValidator.java: Crie uma classe que implemente AutoCloseable para simular uma sessão de validação que deve ser fechada adequadamente. Seu validador deve:

    Imprimir Validator session started no construtor.

    Ter um método validateUsername(String username) que lança InvalidUsernameException se o nome de usuário for nulo, vazio ou tiver menos de 3 caracteres (com a mensagem "Username must be at least 3 characters"). Caso contrário, imprima Username '[username]' is valid.

    Ter um método validateAge(int age) que lança InvalidAgeException se a idade for negativa (com a mensagem "Age cannot be negative: [age]"). Se a idade for inferior a 13 anos, lance ValidationException com a mensagem "Must be at least 13 years old". Caso contrário, imprima Age [age] is valid.

    Implementar close() para imprimir Validator session closed.

  • Main.java: Reúna seu sistema de validação! Você receberá duas entradas: um nome de usuário (String) e uma idade (inteiro).

    Use try-with-resources para criar um UserValidator. Dentro do bloco try, primeiro valide o nome de usuário e depois valide a idade. Se ambos passarem, imprima User registration successful!

    Capture InvalidUsernameException e imprima Username error: [message]. Capture InvalidAgeException e imprima Age error: [message]. Capture ValidationException (o pai) e imprima Validation error: [message].

    O validador deve fechar automaticamente, independentemente de a validação ser bem-sucedida ou falhar!

Você receberá duas entradas em ordem: nome de usuário (String) e idade (inteiro).

Este desafio reúne todo o capítulo: você construirá uma hierarquia de exceções com ValidationException como pai, usará exceções verificadas e não verificadas apropriadamente e garantirá que seu recurso validador seja sempre limpo com try-with-resources. Observe como capturar a classe pai ValidationException após sua filha InvalidUsernameException permite que você lide com casos específicos primeiro, enquanto ainda captura outros erros de validação!

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Lê as entradas
        String username = scanner.nextLine();
        int age = scanner.nextInt();
        
        // TODO: Use try-with-resources para criar um UserValidator
        // Dentro do bloco try:
        //   1. Valide o username
        //   2. Valide a age
        //   3. Se ambos passarem, imprima "User registration successful!"
        
        // TODO: Capture InvalidUsernameException e imprima "Username error: [message]"
        
        // TODO: Capture InvalidAgeException e imprima "Age error: [message]"
        
        // TODO: Capture ValidationException (pai) e imprima "Validation error: [message]"
        
        // Note: O validador deve fechar automaticamente, independentemente do sucesso ou falha!
    }
}

Todas as lições de Programação Orientada a Objetos