Riepilogo - Utente validato
Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 63 di 87.
Sfida
FacileCostruiamo un sistema completo di registrazione degli utenti che convalida i dati di input e usa eccezioni personalizzate per comunicare esattamente cosa è andato storto! Combinerai tutto ciò che hai imparato in questo capitolo: eccezioni checked e unchecked personalizzate, la gerarchia delle eccezioni e try-with-resources con un validatore auto-closeable.
Organizzerai il codice in cinque file:
ValidationException.java: crea un’eccezione checked che funge da base per tutti gli errori di convalida. Questa eccezione deve estendereExceptione includere un costruttore che accetta un messaggio.InvalidUsernameException.java: crea un’eccezione checked per gli errori di convalida del nome utente. Deve estendere la tua classeValidationException, creando una piccola gerarchia di eccezioni. Includi un costruttore che accetta un messaggio e lo passa alla classe genitore.InvalidAgeException.java: crea un’eccezione unchecked per gli errori relativi all’età (come le età negative, che rappresentano errori di programmazione). Deve estendereRuntimeExceptione avere un costruttore che accetta un messaggio.UserValidator.java: crea una classe che implementaAutoCloseableper simulare una sessione di convalida che deve essere chiusa correttamente. Il tuo validatore deve:Stampare
Validator session startednel costruttore.Avere un metodo
validateUsername(String username)che generaInvalidUsernameExceptionse il nome utente è null, vuoto o contiene meno di 3 caratteri (con il messaggio"Username must be at least 3 characters"). Altrimenti, stampareUsername '[username]' is valid.Avere un metodo
validateAge(int age)che generaInvalidAgeExceptionse l’età è negativa (con il messaggio"Age cannot be negative: [age]"). Se l’età è inferiore a 13, generaValidationExceptioncon il messaggio"Must be at least 13 years old". Altrimenti, stampaAge [age] is valid.Implementare
close()per stampareValidator session closed.Main.java: metti insieme il tuo sistema di convalida! Riceverai due input: un nome utente (String) e un’età (intero).Usa try-with-resources per creare un
UserValidator. All’interno del blocco try, convalida prima il nome utente e poi l’età. Se entrambe le convalide hanno esito positivo, stampaUser registration successful!Intercetta
InvalidUsernameExceptione stampaUsername error: [message]. IntercettaInvalidAgeExceptione stampaAge error: [message]. IntercettaValidationException(la classe genitore) e stampaValidation error: [message].Il validatore deve chiudersi automaticamente, indipendentemente dall’esito positivo o negativo della convalida!
Riceverai due input, nell’ordine seguente: nome utente (String) ed età (intero).
Questa sfida riunisce tutto il capitolo: creerai una gerarchia di eccezioni con ValidationException come classe genitore, userai correttamente sia le eccezioni checked sia quelle unchecked e ti assicurerai che la risorsa del validatore venga sempre rilasciata con try-with-resources. Nota come intercettare la classe genitore ValidationException dopo la sua classe figlia InvalidUsernameException ti permetta di gestire prima i casi specifici, continuando comunque a intercettare gli altri errori di convalida!
Provalo tu
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leggi gli input
String username = scanner.nextLine();
int age = scanner.nextInt();
// TODO: Usa try-with-resources per creare un UserValidator
// All'interno del blocco try:
// 1. Convalida lo username
// 2. Convalida l'età
// 3. Se entrambe le convalide riescono, stampa "User registration successful!"
// TODO: Intercetta InvalidUsernameException e stampa "Username error: [message]"
// TODO: Intercetta InvalidAgeException e stampa "Age error: [message]"
// TODO: Intercetta ValidationException (classe padre) e stampa "Validation error: [message]"
// Nota: il validator deve chiudersi automaticamente, sia in caso di successo sia in caso di errore!
}
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato10Gestione delle eccezioni in OOP
Gerarchia delle classi di eccezioneEccezioni personalizzateEccezioni controllate e non controllatePattern try-with-resourcesRiepilogo - Utente validato2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online