Resumen - Usuario validado
Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy. Lección 63 de 87.
Desafío
Fácil¡Construyamos un sistema completo de registro de usuarios que valide los datos de entrada y use excepciones personalizadas para comunicar exactamente qué salió mal! Combinarás todo lo aprendido en este capítulo: excepciones comprobadas y no comprobadas personalizadas, la jerarquía de excepciones y try-with-resources con un validador autocerrable.
Organizarás tu código en cinco archivos:
ValidationException.java: Crea una excepción comprobada que sirva como base para todos los errores de validación. Esta excepción debe extenderExceptione incluir un constructor que acepte un mensaje.InvalidUsernameException.java: Crea una excepción comprobada para los fallos de validación del nombre de usuario. Esta debe extender tu claseValidationException, creando una pequeña jerarquía de excepciones. Incluye un constructor que acepte un mensaje y se lo pase a la clase padre.InvalidAgeException.java: Crea una excepción no comprobada para los errores relacionados con la edad (como las edades negativas, que representan errores de programación). Esta debe extenderRuntimeExceptione incluir un constructor que acepte un mensaje.UserValidator.java: Crea una clase que implementeAutoCloseablepara simular una sesión de validación que debe cerrarse correctamente. Tu validador debe:Imprimir
Validator session starteden el constructor.Tener un método
validateUsername(String username)que lanceInvalidUsernameExceptionsi 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, debe imprimirUsername '[username]' is valid.Tener un método
validateAge(int age)que lanceInvalidAgeExceptionsi age es negativo (con el mensaje"Age cannot be negative: [age]"). Si age es menor que 13, debe lanzarValidationExceptioncon el mensaje"Must be at least 13 years old". De lo contrario, debe imprimirAge [age] is valid.Implementar
close()para imprimirValidator session closed.Main.java: ¡Integra 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, valida primero el nombre de usuario y después la edad. Si ambas validaciones se completan correctamente, imprimeUser registration successful!Captura
InvalidUsernameExceptione imprimeUsername error: [message]. CapturaInvalidAgeExceptione imprimeAge error: [message]. CapturaValidationException(la clase padre) e imprimeValidation error: [message].¡El validador debe cerrarse automáticamente independientemente de que la validación tenga éxito o falle!
Recibirás dos entradas en este orden: nombre de usuario (String) y edad (entero).
Este desafío reúne todo el capítulo: crearás una jerarquía de excepciones con ValidationException como clase padre, usarás correctamente excepciones comprobadas y no comprobadas, y te asegurarás de que el recurso del validador siempre se limpie mediante try-with-resources. Observa cómo capturar la clase padre ValidationException después de su clase hija InvalidUsernameException permite gestionar primero los casos específicos y, al mismo tiempo, capturar 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
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado10Manejo de excepciones en POO
Jerarquía de clases de excepcionesExcepciones personalizadasErrores Checked vs UncheckedPatrón Try With ResourcesResumen - Usuario validado2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón IteratorPractica por tu cuenta: Compilador de Java online