In Vorbereitung

Java für Einsteiger

Angeboten von openHPI Team

3.1 Ergänzung: Sichtbarkeiten

Die Sichtbarkeit von Daten und Objekten ist wichtig für die Sicherheit eines Programms. Zudem ist ein gutes Programm in verschiedene Module eingeteilt, welche untereinander wenige Abhängigkeiten besitzen und somit nur eine eingeschränkte Sichtbarkeit benötigen.
Bei Code, der von anderen Programmierern genutzt werden soll, werden durch die Sichtbarkeit Richtlinien angegeben, welche Methoden er verwenden soll.

Packages

Module in Java werden in Packages eingeordnet. Ein Package entspricht dabei immer einem Ordner. Als Konvention beginnt ein Package mit einem rückwärts geschriebenen Domainnamen bevor dann die projektspezifischen Teile kommen. So könnte ein Package für das Modul Test in einem Projekt von openHPI wie folgt lauten:

enter image description here

Der rückwärts geschriebene Domainname dient hierbei dazu, das Package international eindeutig zu identifizieren. Das ist hauptsächlich für Bibliotheken (Libraries) wichtig, die man anderen Programmierern zur Verfügung stellt. So könnte es in zwei verschiedenen Bibliotheken Klassen mit demselben Namen geben. Werden beide Bibliotheken im selben Projekt benutzt kann das Programm nicht mehr eindeutig entscheiden welche der Klassen denn nun verwendet werden soll.

Im Prinzip kann man sich das ähnlich wie einen Nachnamen vorstellen. Gibt es in einer Schulklasse zwei Schüler mit dem Namen "Thomas" (in meinem Fall waren es meistens sogar drei), weiss keiner so recht wer gemeint ist wenn der Lehrer einen davon aufruft. Der Nachname hilft hier weiter. Allerdings könnte es durchaus auch zwei "Thomas Müller" geben. Hier muss man dann nach weiteren Unterscheidungskriterien suchen. Da Domainnamen international eindeutig sind, hat sich diese Konvention durchgesetzt.

Ein Package wird in einer Java-Datei noch vor der Klasse angegeben und wird komplett klein geschrieben. Auch muss die Klasse in einer Ordnerstruktur, die genauso aufgebaut ist wie das Package, liegen. Die zugehörige Ordnerstruktur sieht also so aus:

enter image description here

Public

Methoden und Datenobjekte die mit public beschriftet sind für alle sichtbar.

Protected

Modifiziert man die Sichtbarkeit eines Attributs oder eine Methode mit protected, so ist die Sichtbarkeit auf diese Klasse und alle Unterklassen beschränkt. Unterklasse entsteht wenn man Vererbung verwendet. Dabei werden Hierarchien von Klassen, d.h. es gibt eine immer feinere Unterteilung, ähnliches findet man in der Natur:
Es gibt die Klasse der Säugetiere, ein Hund wiederum ist ein Säugetier und ein Husky ist eine besondere Art eines Hundes. Der Husky hat alle Eigenschaften des Säugetiers und des Hundes, er erbt diese. Er hat jedoch auch noch weitere Eigenschaften, so kann er z.B. bellen.
Mehr zum Thema Vererbung und protected gibt es im Abschnitt Vererbung im OpenBook „Java ist auch eine Insel“ von Galileo Press: http://openbook.galileo-press.de/javainsel9/

Keine Modifizierung

Besitzt ein Attribut oder eine Methode keine Sichtbarkeitsmodifikator, so kann man von jeder Klasse innerhalb des Packages auf diese zugreifen. Man nennet dies auch Package-Private (nicht zu verwechseln mit private). Andere Programmierer könnten jedoch Klassen in demselben Package erstellen, daher muss man sehr vorsichtig sein.

Private

Private ist die stärkste Einschränkung. Dies bedeutet, dass ein Methode oder ein Attribut welches mit private markiert ist nicht von Objekten anderer Klassen gelesen oder verändert werden kann. Bei Vererbung können auch Unterklassen nicht auf dieses Attribut zugreifen.
In realen Anwendungen wird private für fast alle Attribute verwendet. Zugriff wird dann über Getter und Setter gewährt. So wird sichergestellt, dass nur die Klasse über ein Attribut bestimmen kann, sie kann bestimmte Änderungen ablehnen, bzw. neue Werte auf Plausibilität prüfen oder den Zugriff generell verbieten.
Innerhalb einer Klasse, d.h. auch zwischen verschiedenen Objekten einer Klasse, kann man jedoch wie gewohnt auf die privaten Attribute und Methoden zugreifen.

Mehr über Sichtbarkeiten kann man auch in dem Buch "Java ist auch eine Insel" lesen:
http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_05_002.htm#mjf5b3fff9748ae6323d1923016a906a8f