Modifikatorji dostopa nadzorujejo vidljivost članov razreda in uveljavljajo enkapsulacijo z omejevanjem, kdo jih lahko bere ali kliče.
| Modifikator | Dostopen iz |
|---|
public | Povsod |
protected | Razreda in njegovih podrazredov |
private | Samo znotraj deklarirajočega razreda |
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 je private, zato noben zunanji kod ne more pokvariti podatke; javni getter je edina vrata.
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 nima izsiljenega private — zanašamo se na dogovore poimenovanja. Java/C# uveljavljata modifikatorje ob prevajanju. Java ima tudi package-private (privzeta vrednost, brez ključne besede).
Vse narediti public ruši enkapsulacijo. Privzeto uporabite najbolj omejujočo raven in jo razširite le, ko se pojavi pravi razlog.
Modifikatorji dostopa so konkretno orodje, ki spremeni enkapsulacijo iz načela v pravilo, ki ga prevajilnik preverja.
Majhna javna površina pomeni, da je manj koda odvisno od notranjosti, zato lahko brez brige refaktorite, ne da bi zlomili uporabnike.