Datenkapselung (Programmierung)

Datenkapselung (Programmierung)

Als Datenkapselung (englisch: encapsulation, nach David Parnas auch bekannt als information hiding) bezeichnet man in der Programmierung das Verbergen von Daten oder Informationen vor dem Zugriff von außen. Der direkte Zugriff auf die interne Datenstruktur wird unterbunden und erfolgt statt dessen über definierte Schnittstellen (Black-Box-Modell).

Inhaltsverzeichnis

Herleitung

Datenkapselung ist ein lange bekanntes Konzept innerhalb der strukturierten und modularen Programmierung. Zentrales Modell ist hier der Abstrakte Datentyp, in dem Daten in einer Datenstruktur zusammengefasst sind, auf die nur über festgelegte Zugriffsfunktionen (Prozeduren) zugegriffen werden kann. In der tatsächlichen Programmierung wird der Abstrakte Datentyp auf verschiedene Weisen implementiert.

Ein anderes Beispiel in modernen Programmiersprachen ist das Verbergen von Daten innerhalb von Gültigkeitsbereichen. Jede Teilstruktur eines Programms (Hauptblock, Prozeduren, Funktionen, Unterprogramme, …) definiert einen solchen Bereich, sodass eine Gültigkeitshierarchie entsteht. Deklarierte Daten sind nur innerhalb des umgebenden und in allen tieferen Bereichen sichtbar und gültig; für einen höheren Bereich bleiben sie verborgen.

Datenkapselung im objektorientierten Paradigma

Kapselung ist auch ein wichtiges Konzept der objektorientierten Programmierung. Als Kapselung bezeichnet man den kontrollierten Zugriff auf Methoden bzw. Attribute von Klassen. Klassen können den internen Zustand anderer Klassen nicht in unerwarteter Weise lesen oder ändern. Eine Klasse hat eine Schnittstelle, die darüber bestimmt, auf welche Weise mit der Klasse interagiert werden kann. Dies verhindert das Umgehen von Invarianten des Programms. Vom Innenleben einer Klasse soll der Verwender – gemeint sind sowohl die Algorithmen, die mit der Klasse arbeiten, als auch der Programmierer, der diese entwickelt – möglichst wenig wissen müssen (Geheimnisprinzip). Durch die Kapselung werden nur Informationen über das „Was“ (Funktionsweise) einer Klasse nach außen sichtbar, nicht aber das „Wie“ (die interne Repräsentation). Dadurch wird eine Schnittstelle nach außen definiert und zugleich dokumentiert.

Für die Kapselung verwendete Zugriffsarten

Die UML als De-facto-Standardnotation erlaubt die Modellierung folgender Zugriffsarten (in Klammern die Kurznotation der UML):

public (+)
zugreifbar für alle Ausprägungen (auch die anderer Klassen),
private (-)
Nur für Ausprägungen der eigenen Klasse zugreifbar,
protected (#)
Nur für Ausprägungen der eigenen Klasse und von Spezialisierungen derselben zugreifbar,
package (~)
erlaubt den Zugriff für alle Elemente innerhalb des eigenen Pakets.

Anmerkung: Die Handhabung des Schlüsselwortes package ist in den verschiedenen Programmier- bzw. Skriptsprachen unterschiedlich. Ersetzung in der jeweiligen Sprache:

  • CSharp (C#): internal
  • Visual Basic .NET: friend
  • Java: Keine Definition bedeutet Package-Zugriff (Default).

Die Möglichkeiten zur Spezifizierung der Zugreifbarkeit sind je nach Programmiersprache unterschiedlich.

Vorteile der Kapselung

  • Da die Implementierung einer Klasse anderen Klassen nicht bekannt ist, kann die Implementierung geändert werden, ohne die Zusammenarbeit mit anderen Klassen zu beeinträchtigen.
  • Erhöhte Übersichtlichkeit, da nur die öffentliche Schnittstelle einer Klasse betrachtet werden muss.
  • Beim Zugriff über eine Zugriffsfunktion spielt es von außen keine Rolle, ob diese Funktion 1:1 im Inneren der Klasse existiert, das Ergebnis einer Berechnung ist, oder möglicherweise aus anderen Quellen (z. B. einer Datei oder Datenbank) stammt.
  • Deutlich verbesserte Testbarkeit, Stabilität und Änderbarkeit der Software bzw. deren Teile (Module).
  • Reduktion der Anzahl der möglichen unerwünschten Interaktionen zwischen Programmteilen. Enthält ein Programm N Variablen und M Funktionen, gibt es \mathcal{O}(N\cdot M) mögliche Interaktionen; in der Regel sind aber nur \mathcal{O}(N+M) Interaktionen tatsächlich erwünscht. Dies spielt bei der Fehlersuche eine Rolle, weil sich Fehler meist dadurch manifestieren, dass eine Variable einen falschen Wert enthält, und man zur Eingrenzung der Fehlerursache wissen muss, welche Funktionen auf die Variable Zugriff haben; die Datenkapselung schränkt den zu untersuchenden Programmabschnitt von vornherein auf sehr wenige Funktionen ein.

Nachteile der Kapselung

  • In Abhängigkeit vom Anwendungsfall Geschwindigkeitseinbußen durch den Aufruf von Zugriffsfunktionen (direkter Zugriff auf die Datenelemente wäre schneller).
  • Zusätzlicher Programmieraufwand für die Erstellung von Zugriffsfunktionen.

Siehe auch


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Datenkapselung — bezeichnet: Datenkapselung (Programmierung), das Verbergen von Daten oder Informationen vor dem Zugriff von außen Datenkapselung (Netzwerktechnik), den Prozess im OSI Modell und im TCP/IP Referenzmodell, der die zu versendenden Daten um Header… …   Deutsch Wikipedia

  • Vererbung (objektorientierte Programmierung) — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • Methode (objektorientierte Programmierung) — Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee der objektorientierten Programmierung ist, Daten und Funktionen, die auf diese Daten angewandt werden… …   Deutsch Wikipedia

  • Kapselung (objektorientierte Programmierung) — Die Objektorientierung, kurz OO, ist ein Ansatz zur Entwicklung von Software, der darauf beruht, die zu verarbeitenden Daten anhand ihrer Eigenschaften und der möglichen Operationen zu klassifizieren. Im Vergleich zu Ansätzen, bei denen… …   Deutsch Wikipedia

  • Aspekt-orientierte Programmierung — Die Artikel Aspektorientierte Programmierung und Cross Cutting Concern überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zu vereinigen. Beteilige dich dazu an der Diskussion über diese Überschneidungen.… …   Deutsch Wikipedia

  • Vererbung (Programmierung) — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • Objektorientierte Programmierung — Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee dabei ist, Daten und Funktionen, die auf diese Daten angewandt werden können, möglichst eng in einem… …   Deutsch Wikipedia

  • Imperative Programmierung — ist ein Programmierparadigma. Ein imperatives Programm beschreibt eine Berechnung durch eine Abfolge von Anweisungen, die den Status des Programmes verändern. Im Gegensatz dazu wird unter dem deklarativen Programmierparadigma beschrieben, was… …   Deutsch Wikipedia

  • Is-a — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • Member — Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee der objektorientierten Programmierung ist, Daten und Funktionen, die auf diese Daten angewandt werden… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”