Uno dei modi in cui possiamo applicare l'incapsulamento dei dati è attraverso l'uso di accessori e mutatori. Il ruolo degli accessori e dei mutatori è di restituire e impostare i valori dello stato di un oggetto. Impariamo come programmare accessori e mutatori in Java. Ad esempio, useremo una classe Person con lo stato e il costruttore già definiti:
Un metodo di accesso viene utilizzato per restituire il valore di un campo privato. Segue uno schema di denominazione che precede la parola "get" all'inizio del nome del metodo. Ad esempio, aggiungiamo metodi di accesso per nome, secondo nome e cognome:
Questi metodi restituiscono sempre lo stesso tipo di dati del rispettivo campo privato (ad es. String) e quindi restituiscono semplicemente il valore di quel campo privato.
Ora possiamo accedere ai loro valori attraverso i metodi di un oggetto Person:
Un metodo mutatore viene utilizzato per impostare un valore di un campo privato. Segue uno schema di denominazione che precede la parola "set" all'inizio del nome del metodo. Ad esempio, aggiungiamo campi mutatori per indirizzo e nome utente:
Questi metodi non hanno un tipo restituito e accettano un parametro con lo stesso tipo di dati del campo privato corrispondente. Il parametro viene quindi utilizzato per impostare il valore di quel campo privato.
Ora è possibile modificare i valori per l'indirizzo e il nome utente all'interno dell'oggetto Person:
È facile giungere alla conclusione che potremmo semplicemente cambiare i campi privati della definizione della classe per renderli pubblici e ottenere gli stessi risultati. È importante ricordare che vogliamo nascondere il più possibile i dati dell'oggetto. Il buffer aggiuntivo fornito da questi metodi ci consente di:
Diciamo che decidiamo di modificare il modo in cui memorizziamo i nomi secondari. Invece di una sola stringa ora possiamo usare una matrice di stringhe:
L'implementazione all'interno dell'oggetto è cambiata ma il mondo esterno non è interessato. Il modo in cui vengono chiamati i metodi rimane esattamente lo stesso:
Oppure, supponiamo che l'applicazione che utilizza l'oggetto Person possa accettare solo nomi utente con un massimo di dieci caratteri. È possibile aggiungere la convalida nel mutatore setUsername per assicurarsi che il nome utente sia conforme a questo requisito:
Ora se il nome utente passato al mutatore setUsername è più lungo di dieci caratteri, viene automaticamente troncato.