I modificatori di accesso controllano la visibilità dei membri di una classe, imponendo l'incapsulamento limitando chi può leggerli o chiamarli.
| Modificatore | Accessibile da |
|---|
public | Da qualsiasi luogo |
protected | Dalla classe e dalle sue sottoclassi |
private | Solo all'interno della classe dichiarante |
public class Employee {
private double salary; // internal — only Employee touches it
protected String department; // subclasses may use it
public String name; // open to all
public double getSalary() { // controlled, public read access
return salary;
}
}
salary è private quindi nessun codice esterno può corromperlo; il getter public è l'unica finestra di accesso.
class Demo:
def __init__(self):
self.public = 1
self._protected = 2 # convention only ("don't touch")
self.__private = 3 # name-mangled to _Demo__private
Python non ha private forzato — si basa su convenzioni di denominazione. Java/C# forzano i modificatori al momento della compilazione. Java ha inoltre package-private (il valore predefinito, nessuna parola chiave).
Rendere tutto public vanifica l'incapsulamento. Usa il livello più restrittivo come predefinito e amplialo solo quando emerge una reale necessità.
I modificatori di accesso sono lo strumento concreto che trasforma l'incapsulamento da principio a regola imposta dal compilatore.
Una superficie pubblica ridotta significa che meno codice può dipendere dagli interni, quindi puoi refactorizzare liberamente senza rompere i chiamanti.