i

Fachkonzept - Datenkapselung

Was versteht man eigentlich unter dem Geheimnisprinzip?

Wenn man die Motorhaube eines neueren Autos öffnet, dann sieht man recht wenig vom Motor. Einblick in das eigentliche Geschehen im Motor hat man nicht, wesentliche Teile des Motors werden sogar durch Abdeckungen schwer zugänglich gemacht. Man kann allenfalls überprüfen, ob man genug Öl oder Bremsflüssigkeit hat. Diese Vorgehensweise, den Motor eines Autos nur noch für Spezialisten zugänglich zu machen, wird ganz bewusst von den Autobauern gewählt. Ein Motor ist heutzutage so kompliziert, dass Laien keine Veränderungen daran vornehmen sollen.

Foto - Ölstandsmesser Foto - Öl einfüllen
Quelle: Wikimedia Commons

Beim Autobau wird somit - zumindest in bestimmten Bereichen - das Geheimnisprinzip angewandt. Bestimmte Eigenschaften des Motors können nur über speziell hierfür vorgesehene Schnittstellen ermittelt werden. So kann der aktuelle Ölstand nur an einem hierfür vorgesehenen Messstab abgelesen werden. Änderungen am aktuellen Motorzustand können direkt ebenfalls nur an bestimmten hierfür vorgesehenen Stellen vorgenommen werden. Motoröl lässt sich nur in die hierfür vorgesehene Öffnung einfüllen. Alles weitere über das Innere des Motors bleibt für den normalen Autofahrer unzugänglich und in diesem Sinne geheim.

Fachkonzept Datenkapselung

Bei der objektorientierten Software-Entwicklung geht man völlig analog vor.

Software-Objekte (als Programmeinheiten) werden so konzipiert, dass Details über den inneren Aufbau verborgen werden und Änderungen von Objektzuständen nur über dafür vorgesehene Methoden erfolgen können. Das Verbergen des inneren Aufbaus wird realisiert, indem man keinen direkten Zugriff auf die Attribute zur Verwaltung der internen Daten eines Objekts ermöglicht. Man nennt diese Vorgehensweise auch Datenkapselung.

Man geht also auch hier nach dem Geheimnisprinzip vor. Software-Objekte sollen - genau wie Automotoren - von Benutzern nur in der vorgesehenen Weise genutzt werden, keinesfalls soll die interne Struktur durch Benutzer verändert werden. Das hat den Vorteil, dass ein Objekt als Software-Baustein genau das Verhalten hat, das von den Entwicklern des Bausteins realisiert wurde.

Zugriffsrechte

Um interne Daten kapseln zu können, werden Zugriffrechte festgelegt. Der Entwickler einer Klasse hat die Möglichkeit, Attribute und Methoden einer Klasse als öffentlich oder privat zu deklarieren. Lesende und schreibende Zugriffe auf Attribute bzw. Methoden eines Objekts sind nur möglich, wenn diese öffentlich sind. Private Attribute bzw. Methoden können dagegen nur bei der Implementierung der betreffenden Klasse benutzt werden.

Im Falle unseres Timers bedeutet dies, dass die Attribute für die Maximal- und Minimalzeit privat sein soll, während die Methode zum Starten des Timers öffentlich sein soll. Im Klassendiagramm werden die Zugriffsrechte auf die Attribute und Methoden mit Hilfe der Symbole + (für öffentlich) und - (für privat) festgelegt.

Klassendiagramm mit Zugriffsmodifikatoren

Versucht man außerhalb der Timer-Klasse z.B. auf das private Attribut min zuzugreifen, wird Java dies mit einer entsprechenden Fehlermeldung melden. Der Zugriff auf die Methode starten ist dagegen auch außerhalb der Klasse möglich.

Nach dem Geheimnisprinzip sollte man alle Attribute als privat deklarieren und nur die Methoden als öffentlich deklarieren, die zur Nutzung von Objekten vorgesehen sind.

Spezielle Zugriffsmethoden

Verfolgt man die Strategie, alle Attribute als privat zu deklarieren, so besteht keine Möglichkeit, direkt schreibend oder lesend auf Attributwerte zuzugreifen. Um dennoch kontrollierten Zugriff zu erlauben, werden spezielle öffentliche Zugriffsmethoden bereitgestellt. Das Klassendiagramm wird daher um solche Zugriffsmethoden erweitert:

Timer mit Zugriffsmethoden

Die Methode setGrenzen benutzt man, um die Werte der Attribute min und max zu ändern. Wird dabei z.B. ein unsinniger Wert als Parameter übergeben, so kann dies von der Methode entsprechend behandelt werden. Möchte man lesenden Zugriff auf ein Attribut erlauben, dann muss ebenfalls eine Methode dazu bereitgestellt werden. In diesem Fall liefert getMinimum einfach den Wert des Attributes zurück.

Konvention auf inf-schule

Wenn man im außerschulischen Leben Projekte entwickelt, sollte man sich auf jeden Fall an die üblichen Konventionen halten. Dort gilt es als schlechter Stil auf Zugriffsmodifikatoren zu verzichten. Man sollte Attribute dann immer als privat definieren, auch wenn dies bedeutet dass man oft get- und set-Methoden schreiben muss, die nichts anderes machen als lesend und schreibend auf Attribute zuzugreifen.

In den folgenden Abschnitten wird aber meist auf Zugriffsmodifikatoren verzichtet, um die Projekte möglichst schlank zu halten. An manchen Stellen ist dies nicht möglich, da wir manchmal - z.B. in Greenfoot-Projekten - fremden Code benutzen. Deshalb solltest Du die Bedeutung der Zugriffsmodifikatoren auch in Zukunft noch kennen.

Quellen

Suche

v
7.1.1.3.2
inf-schule.de/oop/java/klassen/kapselung/konzept_kapselung
inf-schule.de/7.1.1.3.2
inf-schule.de/@/page/mzTd0bKbZVCVrxRI

Rückmeldung geben