Was versteht man unter dem Geheimnisprinzip und welche Funktion besitzt es?
In der Objektorientierung ist es ein Gebot von Sicherheit und Stabilität, dass jede einzelne Klasse den Zugriff auf ihre Strukturen nur durch genau definierte Schnittstellen zulässt. Um dies zu erreichen, müssen Methoden und Attribute so weit wie möglich vor unkontrollierten Aufrufen von außerhalb der deklarierenden Klasse geschützt werden. Man spricht auch von einer Einschränkung der Sichtbarkeit der jeweiligen Elemente. Dies geschieht i.a. dadurch, dass Zugriffe auf Methoden und Felder nur für die Bereiche erlaubt werden, die aus programmtechnischen Notwendigkeiten heraus auch wirklich den Zugriff benötigen. D.h., dass z.B. der Aufruf einer Methode aus einer anderen Klasse heraus nur dann erlaubt wird, wenn deren Ausführung an dieser Stelle des Programms auch tatsächlich notwendig ist.
Auf diese Weise wird erreicht, dass eine Klasse nur ein genau
definiertes Verwendungsspektrum besitzt und falsche Zugriffe
vermieden werden, etwa durch andere Entwickler im Projekt oder bei
einer späteren Wiederverwendung der Klasse in einem anderen
Kontext.
Geschieht dies nicht, drohen bei der Komplexität
moderner, objektorientierter Programme leicht Fehlfunktionen,
Programmabstürze oder gar das Einschleusen von Fremdcode, etc.
Java stellt zum Einstellen der Sichtbarkeit drei
Zugriffsmodifikatoren bereit, die in der u.a. Tabelle angegeben sind.
Die Angabe package-default bezeichnet hierbei die
Deklaration von Methoden und Attributen ohne gesondert angegebenen
Zugriffsmodifikator.
Für jeden Modifikator ist angegeben in
welchen Programmteilen das mit dem Modifikator ausgezeichnete
Element sichtbar ist und verwendet werden kann ('x') und in welchen
nicht. ('-').
Modifikator | Klasse | Package | Unterklasse | global |
public | x | x | x | x |
protected | x | x | x | - |
packackge-default | x | x | - | - |
private | x | - | - | - |
Bsp.: Ist ein Feld mit protected
gekennzeichnet, so ist
es in der eigenen Klasse, dem eigenen Package und in allen
Unterklassen, die von der deklarierenden Klasse abgeleitet wurden
sichtbar, nicht jedoch global, d.h. in anderen Packages und Klassen,
sofern sie nicht den genannten entsprechen; private
erlaubt jeglichen Zugriff nur innerhalb der eigenen Klasse.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.