Die Datenkapselung (engl. encapsulation) ist ein wichtiges Konzept in der objektorientierten Programmierung. Hier erfährst Du alles, was Du wissen solltest.
Datenkapselung ist ein Mechanismus, bei dem Daten und Methoden in einer Struktur zusammengefasst sind. Dabei wird die Implementierung des Objekts verborgen: Man kann auf die Daten nur über die festgelegten Zugriffsfunktionen zugreifen. Durch die Datenkapselung kann also die Integrität der im Objekt enthaltenen Daten gewährleistet werden. Um Daten vor einer unerwarteten Veränderung zu schützen, ist Datenkapselung also notwendig.
Wie funktioniert Datenkapselung?
Datenkapselung ist ein Konzept der objektorientierten Programmierung, das darauf abzielt, Daten und die zugehörigen Methoden in einer Klasse zu organisieren und den direkten Zugriff von außen zu beschränken. Es handelt sich um einen Mechanismus, der die Sichtbarkeit und den Zugriff auf die internen Daten einer Klasse kontrolliert.
In vielen objektorientierten Programmiersprachen werden Set- und Get-Methoden verwendet, um den Zugriff auf private Variablen zu ermöglichen. Diese Methoden dienen dazu, Werte zu setzen (Set) und abzurufen (Get) und ermöglichen somit einen kontrollierten Zugriff auf die privaten Daten einer Klasse.
Datenmaskierung
In Java, wie auch in vielen anderen objektorientierten Programmiersprachen, gibt es für Klassen, Attribute und Methoden Zugänglichkeitsstufen, die angeben, wie auf diese Elemente zugegriffen werden kann.
Der Benutzer einer Klasse muss nicht unbedingt wissen, wie die Daten im Objekt strukturiert bzw. wie sie implementiert sind. Wenn der Benutzer Attribute nicht direkt ändern darf und definierte Funktionen verwenden muss, um Attribute zu ändern (Schnittstellen genannt), ist die Integrität der Daten sichergestellt. So kann beispielsweise sichergestellt werden, dass der Typ der gelieferten Daten erwartungskonform ist oder dass sich die Daten im erwarteten Intervall befinden.
Mit Datenkapselung kann man Sichtbarkeitsstufen (engl. visibilities) für die Elemente der Klasse festlegen. Diese Sichtbarkeitsstufen definieren die Zugriffsrechte auf die Daten, je nachdem, ob der Zugriff über eine Methode in der Klasse selbst, in einer Erbenklasse oder in einer beliebigen Klasse erfolgt. Es gibt vier Sichtbarkeitsstufen :
- Standard: Es werden keine Sichtbarkeitsmodifikatoren angegeben.
- Öffentlich (public): Funktionen aller Klassen können auf Daten oder Methoden einer Klasse zugreifen, die als „öffentlich“ definiert wurde. Dies ist die niedrigste Stufe des Datenschutzes.
- Geschützt (protected): Der Zugriff auf die Daten ist den Funktionen der vererbenden Klassen vorbehalten, d. h. von den Member-Funktionen der Klasse und der Unterklassen. So ist ein als „protected“ deklariertes Attribut oder eine Methode nur für die Klassen eines Pakets und ihre Unterklassen zugänglich, auch wenn sie in einem anderen Paket definiert sind.
- Privat (private): Der Zugriff auf die Daten ist auf die Methoden der Klasse selbst beschränkt. Dies ist die höchste Stufe des Datenschutzes.
Wie wird die Sichtbarkeitsstufe der verschiedenen Elemente einer Klasse gewählt?
Eigentlich besteht die Schwierigkeit also darin, die „richtige“ Sichtbarkeitsstufe der verschiedenen Elemente einer Klasse zu bestimmen. Generell sollte man immer versuchen, den Code so sicher wie möglich zu schützen und daher die kleinste Zugänglichkeitsstufe festzulegen. Anschließend musst Du Dich fragen, wie sensibel jedes Element ist und welche Auswirkungen jede Zugriffsebene auf ein Element auf den Rest der Klasse haben kann, wobei Du gleichzeitig die verschiedenen anderen Elemente identifizieren musst, die auf dieses Element zugreifen müssen, um zu funktionieren.