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 criar um sistema completo de registro de usuários que valida dados de entrada e usa exceções personalizadas para comunicar exatamente o que deu errado! Você combinará tudo deste capítulo: exceções verificadas e não verificadas personalizadas, a hierarquia de exceções e try-with-resources com um validador auto-fechável.

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

  • ValidationException.java: Crie uma exceção verificada que servirá como base para todos os erros de validação. Essa exceção deve estender Exception e incluir um construtor que aceite uma mensagem.
  • InvalidUsernameException.java: Crie uma exceção verificada para falhas na validação do nome de usuário. Ela deve estender sua classe ValidationException, criando uma pequena hierarquia de exceções. Inclua um construtor que aceite uma mensagem e a passe para a classe pai.
  • InvalidAgeException.java: Crie uma exceção não verificada para erros relacionados à idade (como idades negativas, que representam erros de programação). Ela deve estender RuntimeException e ter 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 corretamente. Seu validador deve:

    Imprimir Validator session started no construtor.

    Ter um método validateUsername(String username) que lance 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, imprimir Username '[username]' is valid.

    Ter um método validateAge(int age) que lance InvalidAgeException se a idade for negativa (com a mensagem "Age cannot be negative: [age]"). Se a idade for menor que 13, lance ValidationException com a mensagem "Must be at least 13 years old". Caso contrário, imprimir 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, em seguida, valide a idade. Se ambos forem aprovados, imprima User registration successful!

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

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

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

Este desafio reúne todo o capítulo: você criará uma hierarquia de exceções com ValidationException como classe pai, usará exceções verificadas e não verificadas de maneira apropriada e garantirá que o recurso do seu validador seja sempre liberado com try-with-resources. Observe como capturar a classe pai ValidationException depois de sua classe filha InvalidUsernameException permite tratar primeiro os casos específicos e ainda capturar 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

Pratique por conta própria: Compilador de Java online