Ci sono alcuni motivi per usare setter e accessor anziché semplicemente rendere pubbliche le variabili.
1. Separazione delle preoccupazioni - I consumatori di una classe non dovrebbero sapere, o addirittura preoccuparsi, se ciò che stanno accedendo è una variabile primitiva o qualcosa di più complesso. Ad esempio, diciamo che ho avuto una lezione di auto, e quella macchina ha una potenza. Puoi ottenere la potenza chiamando il metodo getHorsepower () e puoi impostarla con setHorsepower (int power).
Ora, un consumatore di questa classe non si cura davvero di quello che succede sotto il cofano, solo che c'è un metodo di potenza. Ma cosa succede se, sul backend, impostare la potenza del motore significava cambiare il motore? Quando chiami setHorsepower, troverà un motore che può fornirlo e chiama il metodo privato setEngine (Engine newEngine) per assicurarti che il comportamento dell'auto sia coerente!
2. Manutenibilità del codice : quando si imposta la classe, può essere ragionevole disporre solo di una variabile pubblica, ma si scopre rapidamente che è necessario eseguire il controllo degli errori sulla variabile oppure è necessario apportare una modifica a tale variabile aggiorna un altro oggetto. Se hai fornito la variabile pubblica, dovresti modificare tutte le classi che la usano e poi averle entrambe A) Implementare tutte le funzionalità che ti servono per il controllo degli errori, oppure B) Cambiarle per utilizzare una funzione di accesso. Facendo in modo che utilizzino la funzione di accesso, puoi modificare tutto ciò in un unico posto invece di dover tenere traccia di tutti i luoghi che utilizzano tale variabile.