Nascondimento delle informazioni
Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 12 di 87.
L'occultamento delle informazioni è il principio che consiste nel limitare l'accesso diretto ai dati interni di un oggetto. Combinando i campi private con getter e setter, crei una barriera protettiva attorno allo stato del tuo oggetto.
Considera cosa succede senza l'incapsulamento:
public class Temperature {
public double celsius; // Esposto direttamente
}
// Chiunque può impostare valori non validi
Temperature t = new Temperature();
t.celsius = -500; // Sotto lo zero assoluto - impossibile!Con l'incapsulamento, controlli come si accede ai dati e come vengono modificati:
public class Temperature {
private double celsius;
public void setCelsius(double celsius) {
if (celsius >= -273.15) {
this.celsius = celsius;
}
}
public double getCelsius() {
return celsius;
}
}Ora le temperature non valide vengono rifiutate automaticamente. La rappresentazione interna è nascosta: in seguito potresti cambiare il modo in cui la temperatura viene memorizzata internamente (magari in kelvin) senza influire sul codice che usa la classe.
Questo approccio offre tre vantaggi chiave: la convalida garantisce l'integrità dei dati, la flessibilità consente modifiche interne senza compromettere il codice esterno e il controllo ti permette di decidere esattamente quali operazioni sono consentite sui tuoi dati.
Sfida
FacileCreiamo una classe di gestione Password che dimostri l'occultamento delle informazioni proteggendo i dati sensibili e applicando regole di sicurezza tramite un accesso controllato.
Creerai due file per organizzare il codice:
Password.java: crea una classe Password che nasconde i propri dati interni e controlla come le password possono essere impostate e consultate:- Un campo
passwordprivato (String) che memorizza la password effettiva - Un campo
minLengthprivato (int) che definisce la lunghezza minima accettabile della password - Un costruttore che accetta il requisito di lunghezza minima
- Un setter
setPassword(String password)che accetta solo password che soddisfano il requisito di lunghezza minima. Se è valida, memorizzala e restituiscitrue; se è troppo corta, non modificare la password e restituiscifalse - Un getter
getMaskedPassword()che restituisce la password sostituendo tutti i caratteri con asterischi (*) - non rivelare mai la password effettiva! - Un metodo
checkPassword(String attempt)che restituiscetruese il tentativo corrisponde alla password memorizzata, altrimentifalse - Un getter
getLength()che restituisce la lunghezza della password corrente (oppure 0 se non è impostata alcuna password)
- Un campo
Main.java: crea un oggetto Password con una lunghezza minima di 6, poi leggi due input: una password da impostare e un tentativo da verificare. Stampa tre righe:Set: trueoppureSet: false(risultato dell'impostazione della password)Masked: ******(la versione mascherata della password)Match: trueoppureMatch: false(risultato della verifica del tentativo)
Riceverai due input: la password da impostare e il tentativo di password da verificare.
Nota come la password effettiva non sia mai direttamente accessibile dall'esterno della classe: questo è l'occultamento delle informazioni in azione. La classe controlla esattamente quali informazioni vengono rivelate e come è possibile modificare la password.
Provalo tu
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leggi la password da impostare
String passwordToSet = scanner.nextLine();
// Leggi il tentativo di inserimento della password da verificare
String passwordAttempt = scanner.nextLine();
// TODO: Crea un oggetto Password con una lunghezza minima di 6
// TODO: Imposta la password e stampa il risultato ("Set: true" o "Set: false")
// TODO: Stampa la password mascherata ("Masked: ******")
// TODO: Verifica il tentativo di inserimento della password e stampa il risultato ("Match: true" o "Match: false")
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
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 personalizzato2Modificatori 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