Tutto ciò che è pubblico in una classe rappresenta l'interfaccia di quella classe verso l'esterno.
Ciò significa che le classi che andranno ad utilizzarla dovranno interfacciarsi con essa mediante questa "interfaccia".
Prendiamo, per esempio, il campo di una classe che rappresenta il prezzo di un prodotto:
codice:
public class Prodotto {
public double prezzo;
...
}
Una classe che andrà ad utilizzare il prodotto potrà accedere direttamente al prezzo:
codice:
Prodotto p = ...;
p.prezzo = 8.0d;
Tutto ok, per il momento. Supponiamo che un domani tu voglia essere notificato via mail del cambiamento di prezzo di un prodotto... come fai? Devi correre dietro a tutti i punti in cui effettui quell'operazione (assegnazione di un prezzo) ed includere del codice (magari la chiamata ad un altro metodo) che invii una mail.
Se io avessi progettato la classe in questo modo:
codice:
public class Prodotto {
private double prezzo;
public void setPrezzo(double d) { prezzo = d; }
public double getPrezzo() { return prezzo; }
}
Il codice che usa tale classe sarebbe costretto ad utilizzare il metodo setPrezzo():
codice:
Prodotto p = ...;
p.setPrezzo( 8.0d );
Ed io avrei potuto, semplicemente, modificare l'implementazione di tale metodo in questo modo:
codice:
public void setPrezzo(double d) {
prezzo = d;
Mailer.inviaMail("Nuovo prezzo = " + d);
}
Senza dover correre dietro a nessuno, senza fare miliardi di modifiche in tutto il codice del progetto.
Questo è un esempio banalissimo che riguarda un semplice metodo setter... pensa alle potenzialità dei metodi getter che permettono, in qualunque momento, di modificare la logica di business che regola l'accesso ad un determinato dato, senza intaccare alcuna parte di codice che quel dato lo usa.
O pensa, ad esempio, a tutte quelle proprietà che rappresentano lo "stato interno" di un oggetto che, a causa di una modifica ad un valore, devono essere in qualche modo notificate o, comunque, aggiornate per garantirne la consistenza. Se i campi sono pubblici e, quindi, direttamente accessibili, garantire la consistenza diventa quasi impossibile.
Ciao.