3.1 Kapselung

Daten vor unkontrolliertem Zugriff schützen

Um sicherzustellen, dass Attributwerte von anderen Objekten nicht unkontrolliert verändert werden, kann der Zugriff beschränkt werden. In der Klasse – dem Objektbauplan – wird dazu festgelegt, dass die entsprechenden Attribute privat sind. Nur das Objekt, dem das Attribut gehört, kann jetzt noch direkt darauf zugreifen.

Beispiel

Wird in der Klasse Roboter festgelegt, dass das Attribut farbe privat ist, kann nur noch der Roboter, dem der Attributwert gehört, direkt darauf zugreifen. Versucht ein anderes Objekt dem privaten Attribut farbe unseres Roboters robi direkt einen Wert zuzuweisen (Abb. 3-1), führt dies nun zu einer Fehlermeldung.

Öffentliche Methoden ermöglichen einen kontrollierten Zugriff

Sollen andere Objekte bestimmte Daten abfragen beziehungsweise ändern dürfen, können hierfür entsprechende Methoden bereitgestellt werden. Diese müssen öffentlich und damit für jedes Objekt aufrufbar sein.

Abfrage von Daten: get-Methode

Für private Attribute, deren Daten anderen Objekten zugänglich gemacht werden sollen, wird jeweils eine öffentliche get-Methode bereitgestellt. Der Methodenname setzt sich dabei aus dem Präfix „get“ und dem mit einem Großbuchstaben beginnenden Attributnamen zusammen, zum Beispiel getFarbe(). Die Methode enthält in der Regel nur eine Anweisung, nämlich den Wert des betroffenen Attributs an den Aufrufer der Methode zurückzugeben.

Änderung von Daten: set-Methode

Sollen andere Objekte den Wert eines Attributs ändern dürfen, wird hierfür eine öffentliche set-Methode bereitgestellt, zum Beispiel setFarbe(pFarbe: String). Das aufrufende Objekt muss dabei der Methode als Argument den Wert übergeben, den es dem betroffenen Attribut zuweisen möchte. Der Datentyp der Argumente muss dabei zu dem Attributtyp passen.

Im einfachsten Fall enthält die set-Methode lediglich eine Anweisung, die das Argument dem betroffenen Attribut zuweist. Die Zuweisung eines neuen Attributwerts erfolgt dabei genauso unkontrolliert wie bei einem öffentlichen Attribut, auf das direkt (ohne Umweg über eine öffentliche Methode) zugegriffen wird.

Der Vorteil einer öffentlichen set-Methode zeigt sich jedoch dann, wenn sichergestellt werden soll, dass einem privaten Attribut von anderen Objekten nur bestimmte Werte zugewiesen werden. Die set-Methode muss dabei das übergebene Argument zunächst prüfen und darf es nur dann dem betroffenen Attribut zuweisen, wenn es der jeweiligen Anforderungen entspricht. Zum Beispiel könnte eine solche Anforderung verlangen, dass das übergebene Argument einem bestimmten Wertebereich angehört.

Beispiel

Innerhalb der Klasse Roboter ist die öffentliche Methode setFarbe(pFarbe: String) so gestaltet, dass sie zunächst prüft, ob der als Argument übergebenen String eine erlaubte Farbe repräsentiert. Ist dies der Fall, weist sie dem Attribut farbe den übergebenen Wert zu. Andernfalls gibt sie eine entsprechende Fehlermeldung aus.

JAVA

robi.setFarbe("zitronengelb");

Abb. 3-2: Dem Attribut farbe soll der Wert "zitronengelb" zugewiesen werden.

Der im Beispiel (Abb. 3-2) übergebene String "zitronengelb" repräsentiert keine vorgesehene Farbe. Die setFarbe-Methode gibt daher eine entsprechende Fehlermeldung aus:

Fehlermeldung Farbzuweisung
Abb. 3-2b: Fehlermeldung: Unerlaubter Farbwert

Indem das Attribut farbe als privat gekennzeichnet wird, bleibt anderen Objekten lediglich die Möglichkeit mit Hilfe der öffentlichen Methoden setFarbe(pFarbe: String) und getFarbe() auf das private Attribut zuzugreifen. Im Quellcode dieser Methoden können dann zum Beispiel Kontrollen eingebaut werden, die den Zugriff nur unter bestimmten Bedingungen zulassen. Bei öffentlichen Attributen gibt es für das Objekt, dem diese gehören, keine Möglichkeit den Zugriff zu kontrollieren.

Kapselung von Attributen und Methoden

Das Konzept, bestimmte Attribute und Methoden als privat zu kennzeichnen und so vor anderen Objekten zu verbergen, wird als Kapselung bezeichnet. Bildlich gesprochen schließt ein Objekt seine privaten Attribute und Methoden dabei in einer „Kapsel“ ein, so dass diese nur noch für es selbst, nicht aber für andere Objekte erreichbar sind.

Die privaten Attribute eines Objekts sind wie durch eine „Kapsel“ vor dem Zugriff durch andere Objekte geschützt. Gleiches gilt für private Methoden eines Objekts.

Änderungen privater Attributwerte kann nur das Objekt vornehmen, dem diese gehören. Sollen solche Änderungen von außen angestoßen werden können, muss das Objekt entsprechende öffentliche Methoden bereitstellen.

Bei der Erstellung einer öffentlichen Methode muss der Programmierer daher für den Fall, dass der Methode von außen als Argument unvorhergesehene Werte übergeben werden, geeignete Vorkehrungen treffen.

Merke: Kapselung
Beispiel

Im UML-Klassendiagramm werden private Attribute und Methoden durch ein Minuszeichen und öffentliche durch ein Pluszeichen gekennzeichnet.

UML-Klassendiagramm – private Attribute und öffentliche Methoden
Abb. 3-3: UML-Klassendiagramm – private Attribute und öffentliche Methoden