Skip to content
IRC-Coding IRC-Coding
Kapselung Encapsulation Information Hiding Sichtbarkeit Getter Setter

OOP Kapselung: Grundlagen, Information Hiding & Sichtbarkeit

Kapselung verbirgt interne Zustände, nur wohldefinierte Schnittstellen sichtbar. Sichtbarkeitsmodifizierer, Getter/Setter, Invarianten und IHK-relevante Beispiele.

S

schutzgeist

2 min read

OOP Kapselung: Grundlagen, Information Hiding & Sichtbarkeit

Dieser Beitrag ist eine Begriffserklärung zur Kapselung in der objektorientierten Programmierung – inklusive Prüfungsfragen und Tags.

In a Nutshell

Kapselung verbirgt interne Zustände und Implementierungsdetails eines Objekts, nur wohldefinierte Schnittstellen sind nach außen sichtbar. Ziel ist robuste, wartbare und sichere Software durch klare Zuständigkeitsgrenzen.

Kompakte Fachbeschreibung

Kapselung ist ein zentrales OOP Prinzip, das Daten und Verhalten zu einer Einheit bündelt und den direkten Zugriff auf interne Repräsentationen einschränkt. Technisch wird sie über Sichtbarkeitsmodifizierer wie private, protected, public, package sichtbar, sowie über Zugriffsmethoden und Properties umgesetzt.

Information Hiding reduziert Kopplung, erhöht Kohäsion und erlaubt die Änderung der Implementierung ohne Auswirkungen auf Konsumenten. Invarianten werden innerhalb des Objekts gewahrt, Ein- und Ausgaben werden validiert.

Mutabilität wird bewusst gesteuert, unveränderliche Objekte eliminieren ganze Klassen von Fehlern. Kapselung skaliert von der Klasse über Aggregate bis zur Komponentengrenze und API.

Prüfungsrelevante Stichpunkte

  • Information Hiding schützt interne Repräsentation, reduziert Kopplung
  • Sichtbarkeitsmodifizierer private, protected, public, package steuern Zugriff
  • Getter und Setter sind kein Selbstzweck, nur bereitstellen wenn fachlich nötig
  • IHK relevant, Begriffe Kapselung, Abstraktion, Kohäsion, Kopplung sauber voneinander abgrenzen
  • Unveränderliche Objekte erhöhen Thread Sicherheit und Testbarkeit in der Praxis
  • Validierung, Invarianten und das Law of Demeter verhindern unsichere Zustandsmanipulation
  • Wirtschaftlichkeit durch geringere Wartungskosten und leichteres Refactoring
  • Dokumentationspflicht, öffentliche Schnittstellen, Vorbedingungen, Nachbedingungen und Seiteneffekte beschreiben

Kernkomponenten

  1. Sprachelemente für Sichtbarkeit: private, protected, public, package
  2. Eigenschaften und Methoden, gezielte Exposition statt vollständiger Offenlegung
  3. Invarianten, fachliche Regeln die stets gelten müssen
  4. Verträge, Vorbedingungen und Nachbedingungen an der öffentlichen API
  5. Mutabilitätskonzept, veränderlich, unveränderlich, Copy on Write
  6. Zugriffskontrolle und Validierung, Eingaben prüfen, Zustandsänderungen atomar
  7. Prozess Schritt, Refactoring zum Verbergen von Datenfeldern und internen Collections
  8. Architektur Element, Modulgrenzen, Package Boundaries, Bounded Contexts
  9. Sicherheits Aspekt, Minimierung der Angriffsfläche und von Injection Punkten
  10. Test Verfahren, Black Box Tests der API und Property Based Tests für Invarianten

Praxisbeispiel

// Beispiel: Bankkonto mit Kapselung
class BankAccount {
    private String iban;
    private int balanceInCents;

    public BankAccount(String iban) {
        if (iban == null) throw new IllegalArgumentException("IBAN erforderlich");
        this.iban = iban;
        this.balanceInCents = 0;
    }

    public int balance() {
        return balanceInCents;
    }

    public void deposit(int amount) {
        if (amount <= 0) throw new IllegalArgumentException("Betrag muss positiv sein");
        balanceInCents += amount;
    }

    public boolean withdraw(int amount) {
        if (amount <= 0) throw new IllegalArgumentException("Betrag muss positiv sein");
        if (balanceInCents >= amount) {
            balanceInCents -= amount;
            return true;
        }
        return false;
    }
}

Vorteile und Nachteile

Vorteile

  • Sicherheit: Interne Daten vor unbefugtem Zugriff geschützt
  • Wartbarkeit: Implementierung kann geändert werden ohne API zu brechen
  • Testbarkeit: Klare Schnittstellen erleichtern Unit Tests
  • Robustheit: Invarianten werden innerhalb des Objekts gewahrt

Nachteile

  • Overhead: Zusätzliche Methoden für einfachen Datenzugriff
  • Komplexität: Mehr Code für einfache Datenstrukturen
  • Performance: Geringer Performance-Overhead durch Methodenaufrufe

Häufige Prüfungsfragen

  1. Was ist Kapselung und warum ist sie wichtig? Kapselung verbirgt interne Implementierungsdetails und schützt Daten vor direktem Zugriff. Sie erhöht Wartbarkeit, Sicherheit und Robustheit der Software.

  2. Unterschied zwischen Kapselung und Abstraktion? Kapselung schützt die Implementierung, Abstraktion reduziert Komplexität durch Vereinfachung der Schnittstelle.

  3. Wann sollten Getter/Setter verwendet werden? Nur wenn fachlich eine Notwendigkeit besteht, nicht automatisch für jedes private Feld.

  4. Wie erhöht Kapselung die Thread-Sicherheit? Durch unveränderliche Objekte und kontrollierte Zustandsänderungen an definierten Punkten.

Wichtigste Quellen

  1. https://de.wikipedia.org/wiki/Datenkapselung_(Programmierung)
  2. https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
  3. https://refactoring.guru/de/encapsulation
Zurück zum Blog
Share:

Ähnliche Beiträge