Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Creiamo 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 password privato (String) che memorizza la password effettiva
    • Un campo minLength privato (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 restituisci true; se è troppo corta, non modificare la password e restituisci false
    • 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 restituisce true se il tentativo corrisponde alla password memorizzata, altrimenti false
    • Un getter getLength() che restituisce la lunghezza della password corrente (oppure 0 se non è impostata alcuna password)
  • 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: true oppure Set: false (risultato dell'impostazione della password)
    • Masked: ****** (la versione mascherata della password)
    • Match: true oppure Match: 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")
        
    }
}
quiz iconMettiti alla prova

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

Esercitati da solo: Compilatore Java online