Modyfikatory dostępu kontrolują widoczność członków klasy, egzekwując hermetyzację poprzez ograniczenie tego, kto może ich odczytywać lub wywoływać.
Dlaczego to ważne
| Modyfikator | Dostępny z |
|---|---|
public | Wszędzie |
protected | Klasy i jej podklasy |
private | Tylko w ramach deklarującej klasy |
W praktyce
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 jest private, więc żaden kod spoza klasy nie może go uszkodzić; publiczny getter to jedyne okno do wewnątrz.
Niuanse w różnych językach
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 nie wymusza private — opiera się na konwencjach nazewnictwa. Java/C# wymuszają modyfikatory w czasie kompilacji. Java ma również package-private (domyślnie, bez słowa kluczowego).
Pułapka
Uczynienie wszystkiego public unieważnia hermetyzację. Domyślnie wybierz poziom najbardziej restrykcyjny i poszerzaj jedynie gdy pojawi się rzeczywista potrzeba.
Dlaczego to ważne
Modyfikatory dostępu to konkretne narzędzie, które zmienia hermetyzację z zasady w regułę wymuszaną przez kompilator.
Mała publiczna powierzchnia oznacza, że mniej kodu może zależeć od wewnętrznych szczegółów, więc możesz swobodnie refaktorować bez łamania kodu wywołującego.
