Datenkapselung in Java

Datenkapselung in Java

Datenkapselung (engl. ecapsulation) bezeichnet in der Informatik das bewusste Verbergen von Daten vor dem Zugriff von außen. Der direkte Zugriff auf die interne Datenstruktur wird dabei unterbunden und der Zugriff von außen durch eine Schnittstelle implementiert.


Erklärung

Daten sind ein sensibles Thema. Niemand gibt diese gerne unkontrolliert frei. So hast du sicher auch schon einmal bei Social-Media oder anderen Plattformen eingestellt, wer deine Daten sehen darf oder nicht. Oft wird dabei in den Kategorien öffentlich, nur Freunde oder nur du unterschieden.

Sichtbarkeitsmodifikatoren gibt es in Java jedoch nicht nur für Daten, also Variablen. Sie existieren auch für Klassen, Methoden und andere Strukturen und bestimmen, wie andere Klassen/Objekte darauf zugreifen dürfen.

public

Der Sichtbarkeitsmodifikator public bedeutet, dass jede andere Klasse (und daraus resultierend jedes andere Objekt) vollumfänglich darauf zugreifen darf.

Betrachte folgende vereinfachte Version der Java-Klasse Person:

Hier versteckt sich noch mehr!
Besuche die App, um alle Inhalte zu sehen!

Dabei sind die Variablen name und age auf public gesetzt. Das bedeutet, dass jedes andere Objekt beliebig darauf zugreifen und diese verändern dürfte. Jedes Objekt könnte später dann Jans Namen ändern.

Du kannst dir das Ganze also wie eine Bibliothek vorstellen, in die jede und jeder rein darf. Es gibt keinerlei Kontrollen und diese ist offen für alle.

Jan vor einer öffentlichen Bibliothek, jeder darf rein

protected

Der Sichtbarkeitsmodifikator protected bedeutet, dass nur Klassen aus demselben Package darauf zugreifen können.

Ein Package ist dabei eine Art Gruppe, die aus mehreren Klassen besteht. Die Klassen werden darin zusammengefasst, weil sie logisch verbunden sind. Du kannst dir das Ganze wie einen Ordner oder eine Box vorstellen. Deine Schulunterlagen aus Mathe sind in deinem Mathe-Ordner. Die aus dem Fach Deutsch im Deutsch-Ordner.

Hier versteckt sich noch mehr!
Besuche die App, um alle Inhalte zu sehen!

Das heißt, dass jedes Objekt später auf den Namen von Jan direkt zugreifen kann, deren Klassen im selben Package wie die Klasse Person liegt.

Um wieder zum Beispiel zurückzukommen: Jan möchte dieses Mal auf eine Party gehen. Vor dem Club gibt es aber einen Türsteher, der verhindert, dass jeder hinein darf. Auf Attribut oder Methode kann nur von Klassen innerhalb des gleichen Package zugriffen werden. Dieses Package entspricht dem gleichen Freundeskreis. Jan darf also in den Club, weil heute hier sein Freundeskreis feiert. Außenstehende Personen würde der Türsteher aber abweisen.

Jan vor Türsteher, aber er ist auf der Gästelister, also kein Problem

private

Der Sichtbarkeitsmodifikator private bedeutet, dass kein Zugriff von außerhalb erfolgen kann. Auf Attribute oder Methoden mit dem Modifikator private kann nur innerhalb der Klasse zugegriffen werden.

Der Sichtbarkeitsmodifikator private ist der strengste Modifikator. Er erlaubt den Zugriff nur innerhalb derselben Klasse. Von außen kann auf private-Attribute/-Methoden nicht zugegriffen werden.

Hier versteckt sich noch mehr!
Besuche die App, um alle Inhalte zu sehen!

Das heißt, dass kein Objekt von außerhalb direkt auf die Variable name zugreifen kann. Der Name von Jan kann also nicht von außen unbefugterweise verändert werden.

Im Club-Beispiel würde dies bedeuten, dass Jan dieses Mal nicht rein darf. Der Türsteher lehnt konsequent jeden Zugriff von außen ab.

Private Party, dieses Mal darf Jan nicht hinein, er wird abgewiesen

Set- und Get-Methoden

Durch protected oder private wird der Zugriff auf Attribute stark eingeschränkt. Oft will man jedoch trotzdem nach den Werten solcher Attribute fragen oder diese in speziellen Fällen sogar verändern. Daher implementiert man ein Interface, welches den Zugriff steuert. Von außen ist dann das Attribut nie direkt zu sehen, sondern es erfolgt der Zugriff über Set- und Get-Methoden:

Hier versteckt sich noch mehr!
Besuche die App, um alle Inhalte zu sehen!

Durch ...

public String getName() kann jedes Objekt von außen den ersten Namen abfragen. Da firstName und secondName jedoch private sind, können diese Namen nach der Initialisierung des Objektes durch den Konstruktor nicht mehr geändert werden.

protected void setNickname(String nickname) kann der Freundeskreis dem Objekt einen Spitznamen geben. Dieser kann sich mehrfach ändern, daher ergibt es Sinn, den Zugriff auf die engere Umgebung (protected) zu beschränken.

protected String getNickname() kann der engere Freundeskreis den Spitznamen abfragen. Der Zugriff von außen auf den Spitznamen durch jeden ist aber geschützt.

Wie du sicher bemerkt hast, sind weiterhin alle Attribute private. Es ist guter Stil, Attribute private zu setzen und den Zugriff, sei er noch so simple, immer über Get- und Set-Methoden zu regeln.


Side Fact

Wenn du in Java keinen Sichtbarkeitsmodifikator direkt angibst, wird automatisch eine Art Mittelding zwischen private und protected verwendet.

Dieses solltest du jedoch nicht verwenden. Es ist besser, sich immer aktiv klarzumachen, welche Elemente direkten Zugriff haben sollen und welche Elemente nur über ein Interface zugreifbar sein sollen.

No items found.

simpleclub ist am besten in der App.

Mit unserer App hast du immer und überall Zugriff auf: Lernvideos, Erklärungen mit interaktiven Animationen, Übungsaufgaben, Karteikarten, individuelle Lernpläne uvm.

Jetzt simpleclub Azubi holen!

Mit simpleclub Azubi bekommst du Vollzugang zur App: Wir bereiten dich in deiner Ausbildung optimal auf deine Prüfungen in der Berufsschule vor. Von Ausbilder*innen empfohlen.

Jetzt simpleclub Azubi holen