Uno dei modi in cui possiamo far rispettare incapsulamento dei dati è attraverso l'uso di accessori e mutatori. Il ruolo di accessori e mutatori è di restituire e impostare i valori dello stato di un oggetto. Impariamo come programmare accessori e mutatori Giava. Ad esempio, useremo a Classe di persone con lo stato e il costruttore già definiti:
Metodi di accesso
Un di accesso Il metodo 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:
Metodi mutatori
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:
Perché usare accessori e mutatori?
È 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 extra buffer fornito da questi metodi ci consente di:
- Modifica la modalità di gestione dei dati dietro le quinte.
- Imponi la convalida sui valori su cui vengono impostati i campi.
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.