Kapselung ist eines der vier Grundprinzipien der Objektorientierung. Sie bündelt Daten und die dazugehörigen Methoden in einer Klasse und verbirgt interne Details nach außen: Der Zustand eines Objekts ist nur über eine klar definierte Schnittstelle erreichbar.
Warum Kapselung?
Ohne Kapselung kann jeder Teil des Programms Attribute direkt verändern — oft mit unerwarteten Folgen. Ein Bankkonto, dessen Kontostand von außen frei beschreibbar ist, könnte einfach auf einen beliebigen Wert gesetzt werden. Kapselung verhindert das: Der Zugriff läuft ausschließlich über kontrollierte Methoden, die den neuen Wert prüfen, bevor sie ihn übernehmen.
Sichtbarkeiten in der Praxis
Die meisten Sprachen bieten Zugriffsmodifikatoren, um Attribute und Methoden abzuschirmen:
- private — nur die eigene Klasse darf zugreifen (echte Kapselung)
- protected — zusätzlich erbende Klassen dürfen zugreifen
- public — jeder darf zugreifen (offene Schnittstelle)
class Konto:
def __init__(self, start):
self.__stand = start # privat
def einzahlen(self, betrag):
if betrag > 0:
self.__stand += betrag
def kontostand(self):
return self.__stand
Der führende Doppel-Unterstrich in Python macht das Attribut namensgemangelt und damit praktisch privat. Zugriff von außen ist nur noch über die Methoden einzahlen() und kontostand() möglich.
Getter und Setter
Klassisch stellt eine Klasse Getter- und Setter-Methoden bereit, um private Attribute kontrolliert zu lesen und zu schreiben. Moderne Sprachen wie Python kennen dafür Properties: Eine Methode wird mit @property dekoriert und verhält sich nach außen wie ein normales Attribut — intern kann trotzdem Validierung laufen.
Vorteile
- Sicherheit: ungültige Zustände werden durch Validierung in den Setter-Methoden verhindert
- Wartbarkeit: interne Änderungen (z.B. neue Datenstruktur) bleiben folgenlos, solange die Schnittstelle gleich bleibt
- Geringe Kopplung: Aufrufer hängen an der API, nicht an internen Details — Grundlage für Interfaces
Kapselung wirkt eng mit den anderen OOP-Prinzipien zusammen: Objektorientierung im Überblick, Polymorphie für einheitliche Schnittstellen und Konstruktoren für die saubere Initialisierung. Grundbausteine sind Klasse, Objekt und Methode.