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.