is-Logo

Software Engineering
Kapselung und Geheimnisprinzip

S. Spolwig

[Home | Software Engineering]

Die Begriffe Abstraktion, Kapselung und Geheimnisprinzip sind eng mit einander verknüpft und bedürfen daher einer näheren Beschreibung.

Abstraktion

Abstraktion bezeichnet den Prozess, die für eine Darstellung wesentlichen Attribute oder Merkmale über etwas herauszufinden und die unwesentlichen wegzulassen. Dabei kommt es durchaus auf den Blickwinkel an, zu welchen Zweck etwas abstrahiert werden soll. Ein gutes Beispiel dafür sind Modelle, die einen Ausschnitt aus der komplexen Realität darstellen, um daran z.B. das Verhalten besser studieren zu können.

Für eine betriebliche Personalverwaltung würden folgende Attribute genügen

PERSONAL

PersNummer
Name
Vorname
Geburtsdatum
Bankverbindung
Gehalt

Unwichtig und damit wegzulassen wären weitere Details wie Haarfarbe, Konfektionsgröße, Blutgruppe usw.

Die Abstraktion wird auch mit dem Ziel verfolgt, eine abgegrenzte Einheit (Modul, Klasse) zu schaffen und sie softwaretechnisch zu realisieren.

 

Geheimnisprinzip

Das Geheimnisprinzip (Information hiding) bedeutet, dass der Verwender eines Moduls aus Sicherheitsgründen keinerlei Kenntnis von der inneren Struktur des Datentyps und den Details der Implementierung haben soll.

Wenn also im Spezifikationsteil (Schnittstelle) Attribute und Operationen öffentlich deklariert sind, ist diese Forderung nicht eingehalten.

Kapselung ohne Information hiding Kapselung mit Information hiding
PERSONAL = class
                         PersNummer: Byte;
                         Name,
                         Vorname,
                         GebDatum,
                         Bankverbindung : string;
                         Gehalt : real;

                         procedure GehaltUeberweisen(..)
                           ....
                      end;

PERSONAL = class
                       
private
                           PersNummer: Byte;
                           Name,
                           Vorname,
                           GebDatum,
                           Bankverbindung : string
                           Gehalt : real;
                       
public
                           procedure GehaltUeberweisen (..)
                           ....
                      end;

Für eine gute und sichere Umsetzung soll in OOP gelten:

  Attribute sind nicht sichtbar - Methoden zur Manipulation der Attribute sind sichtbar.

Damit ist sichergestellt, dass ein kontrollierter Zugriff auf die Attribute nur über die dazugehörigen Methoden möglich ist. Dazu stellen z. B. C++ und Delphi die Direktiven private und public zur Verfügung.

In vielen Veröffentlichungen wird inzwischen Kapselung mit Information hiding gleichgesetzt.

 

Kapselung  (Encapsulation)

In Verbindung mit dem Prinzip der Abstraktion führt das Konzept der Kapselung zu Softwarebausteinen, die ingenieurmäßig zu großen Softwaresystemen zusammen gesetzt werden können. Kapselung bedeutet, dass die Daten (Attribute) mit Operationen assoziiert sind, die - und nur die - auf sie zugreifen können. Die Prozeduren schützen also die Daten vor direktem Zugriff von außen.
Einfacher gesagt, Daten und Operationen sind in einem dazu geeignetem Sprachkonstrukt (z. B. class) vereint.

PERSONAL

- PersNummer
- Name
- Vorname
- Geburtsdatum
- Bankverbindung
- Gehalt
__________________
...
+ GehaltUeberweisen

 

PERSONAL = class
                       PersNummer: Byte;
                       Name,
                       Vorname,
                       GebDatum,
                       Bankverbindung : string;
                       Gehalt : real;

                       procedure SetPersNummer (..)
                       procedure GetPersnummer
                       ...
                       procedure GehaltUeberweisen (..)
                    end;


Sichtbarkeit

Dem Benutzer einer Klasse (Kapsel) muss der Zugriff auf die Datenstruktur und ihre Leistungen - z.B. zur Aktualisierung - ermöglicht werden. Das geschieht über die Spezifikation, also der öffentlich zugänglichen Schnittstelle. Was dort deklariert ist, wird exportiert und ist von überall zugreifbar. Die Details der Implementierung sind letztlich für den Benutzer uninteressant. Er muss sich lediglich auf die Zusagen, die in der Schnittstelle gegeben werden, verlassen können. Deshalb ist es möglich und wünschenswert, die Implementierung in einen separaten privaten Teil zu verlegen.

Export
^
|

öffentliche Schnittstelle (INTERFACE)
private Ergänzung
Ausführungsteil (IMPLEMENTATION)
 


------------------------
sichtbar
für importierende Module
------------------------
nicht sichtbar

"Sichtbar" bedeutet von außen zugreifbar, aber nicht unbedingt textuell nicht lesbar. Das gilt z. B. für Units in Turbo-Pascal und Delphi. Dort sind Deklarationen im IMPLEMENTATION-Teil durch auch lesbar, aber per se nicht zugreifbar. Auch hier wäre wünschenswert, nur die Schnittstelle zu dokumentieren, wobei streng genommen nur der exportierte Typ/Klasse und die Operationen lesbar sein müssen.

Programmiersprachen erlauben darüber hinaus eine abgestufte Sichtbarkeit (oder Zugriffsrechte) für Attribute und Methoden. Unter DELPHI stehen dafür vier Direktiven zur Verfügung:

Private bedeutet, dass nur diese Klasse auf die Eigenschaft zugreifen kann.

Protected
bedeutet, dass Nachfolgeklassen (und deren Nachfolgeklassen usw.) auf die entsprechende Eigenschaft zugreifen können. Andere Klassen können auf dieses Attribut nicht zugreifen.

Public
bedeutet, dass alle Klassen auf diese Eigenschaft zugreifen können. Ein Zugriff ist natürlich nur möglich, wenn überhaupt Zugriff auf ein Objekt der entsprechenden Klasse möglich ist. Unter Delphi gibt es noch das Zugriffsrecht "++" für published, das dem Zugriffsrecht public entspricht und zusätzlich die Anzeige im Objektinspektor ermöglicht.

Attribute sollten immer private oder protected sein, auf sie sollte lesend und schreibend nur durch spezielle Dienste (Methoden) zugegriffen werden können.
 

 


 05. Oktober 2008   ©  Siegfried Spolwig

page_top