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.
Desafio
FácilVamos 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 estenderExceptione 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 classeValidationException, 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 estenderRuntimeExceptione ter um construtor que aceite uma mensagem.UserValidator.java: Crie uma classe que implementeAutoCloseablepara simular uma sessão de validação que deve ser fechada corretamente. Seu validador deve:Imprimir
Validator session startedno construtor.Ter um método
validateUsername(String username)que lanceInvalidUsernameExceptionse 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, imprimirUsername '[username]' is valid.Ter um método
validateAge(int age)que lanceInvalidAgeExceptionse a idade for negativa (com a mensagem"Age cannot be negative: [age]"). Se a idade for menor que 13, lanceValidationExceptioncom a mensagem"Must be at least 13 years old". Caso contrário, imprimirAge [age] is valid.Implementar
close()para imprimirValidator 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, imprimaUser registration successful!Capture
InvalidUsernameExceptione imprimaUsername error: [message]. CaptureInvalidAgeExceptione imprimaAge error: [message]. CaptureValidationException(a classe pai) e imprimaValidation 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
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosCampos (Atributos)Método ConstrutorSobrecarga de ConstrutorRecapitulação - Calculadora Simples4Herança
Herança Básica (extends)A Palavra-chave superSobrescrita de Método (@Override)Encadeamento de ConstrutoresA Classe ObjectHerança Simples e MultinívelPor que não há Herança Múltipla de ClassesRecapitulação - Hierarquia de Funcionários7Métodos Especiais e a Classe Object
Método toString()equals() e hashCode()Método clone()compareTo() e ComparableInterface ComparatorRecapitulação - Ordenação Personalizada10Tratamento de Exceções em POO
Hierarquia de Classes de ExceçãoExceções PersonalizadasErros Checked vs UncheckedPadrão Try With ResourcesRecapitulação - Usuário Validado2Modificadores de Acesso e Encapsulamento
Visão Geral dos Níveis de AcessoMétodos Getter e SetterOcultação de InformaçõesA Palavra-chave finalRecapitulação - Gerenciador de Conta Bancária5Polimorfismo
Fundamentos de Sobrecarga de MétodosSobrescrita de Métodos (Tempo de Execução)Upcasting e DowncastingO Operador instanceofClasses e Métodos AbstratosRecapitulação - Calculadora de Formas8Conceitos Avançados de OOP
Composição vs HerançaAgregação vs ComposiçãoClasses Internas, Aninhadas e AnônimasEnums e Métodos de EnumRecords (Java 16+)Classes Seladas (Java 17+)11Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão BuilderPadrão ObserverPadrão Strategy3Propriedades de Classe e Membros Estáticos
Variáveis de Instância vs EstáticasMétodos EstáticosBlocos EstáticosConstantes (static final)Recapitulação - Contador e Utilitário6Interfaces e Classes Abstratas
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesDefault e Static em InterfacesClasses Abstratas vs InterfacesInterfaces FuncionaisRecapitulação - Sistema de Pagamento9Generics
Introdução a GenericsClasses GenéricasMétodos GenéricosParâmetros de Tipos DelimitadosWildcards (?, extends, super)Recapitulação - Container Genérico12Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão IteratorPratique por conta própria: Compilador de Java online