Abstraktion OOP Grundlagen – Interface, Abstrakte Klasse, Komposition, Open Closed Principle
Dieser Beitrag ist eine Begriffserklärung zur Abstraktion in der OOP – inklusive Prüfungsfragen und Tags.
In a Nutshell
Abstraktion reduziert komplexe Systeme auf ihre wesentlichen Eigenschaften und Operationen, sie definiert das Was einer Schnittstelle, das Wie bleibt verborgen und kann unabhängig entwickelt werden.
Kompakte Fachbeschreibung
Abstraktion ist die bewusste Ausblendung unwesentlicher Details, um ein klares, stabiles Modell zu erhalten. In der OOP wird sie über Interfaces, Abstrakte Klassen, Rollenmodelle und Verträge umgesetzt, die beobachtbares Verhalten festlegen. Gute Abstraktionen sind minimal, vollständig, konsistent, orthogonal, sie unterstützen Austauschbarkeit und testen sich gut über Black Box Verfahren. Abstraktion steht im engen Zusammenspiel mit Kapselung und Polymorphie, Abstraktion legt fest, was sichtbar ist, Kapselung schützt Implementierungsdetails, Polymorphie ermöglicht austauschbare Implementierungen.
Prüfungsrelevante Stichpunkte
- Fokus auf relevante Eigenschaften, Reduktion der sichtbaren Oberfläche
- Mittel, Interface, Abstrakte Klasse, Komposition, Generics
- Trennung von Vertrag und Implementierung, fördert lose Kopplung und hohe Kohäsion
- IHK relevant, Abgrenzung zu Kapselung und Vererbung präzise benennen
- Praxis, kleine, rollenbasierte Interfaces, Interface Segregation Principle
- Sicherheitsaspekt, klare Verträge begrenzen Angriffsfläche und vermeiden unvalidierte Zustandsmanipulation
- Wirtschaftlichkeit, stabile Verträge senken Wartungs und Änderungskosten
- Dokumentationspflicht, Vorbedingungen, Nachbedingungen, Exceptions, Seiteneffekte explizit beschreiben
Kernkomponenten
- Domänenmodell, ubiquitäre Sprache, Begriffe und Beziehungen
- Vertragsschnittstelle, Signaturen, Semantik, Fehlerfälle
- Abstrakte Basen, geteilte Grundlogik ohne vollständige Implementierung
- Rollen, mehrere kleine Interfaces statt eines God Interface
- Komposition, hat-ein Beziehungen zur Strukturierung von Verhalten
- Generische Typen, parametrische Abstraktion über Typen
- Entwurfsmuster, Strategy, Template Method, Adapter, Port und Adapter
- Architekturgrenzen, Ports, Adapter, Bounded Contexts
- Qualitätsregeln, hohe Kohäsion, geringe Kopplung, LSP konform
- Testverfahren, Vertrags, Substitutions, Property Based Tests
Praxisbeispiel
// Ziel, Dateiexport abstrahieren
interface Exporter {
byte[] export(Report r)
}
class PdfExporter implements Exporter {
public byte[] export(Report r) { /* PDF Rendering, Validierung, Byte Stream */ }
}
class CsvExporter implements Exporter {
public byte[] export(Report r) { /* CSV Serialisierung, Trennung, Encoding */ }
}
class ReportService {
private Exporter exporter
public ReportService(Exporter exporter) { this.exporter = exporter }
public byte[] exportReport(Report r) {
if (r == null) throw new IllegalArgumentException("Report erforderlich")
return exporter.export(r)
}
}
Erklärung: Das Interface Exporter definiert die Abstraktion des Exports, konkrete Formate sind austauschbar, der ReportService bleibt unverändert.
Vorteile und Nachteile
Vorteile
- Geringere Kopplung, höhere Kohäsion
- Bessere Testbarkeit, klare Zuständigkeiten
- Einfache Erweiterbarkeit, stabilere APIs
Nachteile
- Initialer Modellierungsaufwand
- Risiko überabstrahierter Verträge
- Zusätzliche Indirektion bei falschem Zuschnitt
Typische Prüfungsfragen (mit Kurzantwort)
-
Abstraktion vs. Kapselung? Abstraktion legt fest, welche relevanten Aspekte sichtbar sind, Kapselung verbirgt die Umsetzung dieser Aspekte hinter der Oberfläche.
-
Interface vs. Abstrakte Klasse? Interface für reine Verträge und Mehrfachrollen, abstrakte Klasse wenn gemeinsame Grundlogik oder Zustand geteilt wird.
-
Unterstützt Open Closed Principle? Verträge bleiben stabil, neue Varianten entstehen als neue Implementierungen, bestehender Code muss nicht geändert werden.
-
Kriterien guter Abstraktion? Minimal aber vollständig, konsistent benannt, orthogonal, stabil bei internen Änderungen, eindeutig dokumentiert.
-
Qualität einer Abstraktion prüfen? Metriken, Anzahl Methoden pro Interface, Änderungsfrequenz, Wiederverwendung, Testabdeckung, Anzahl Implementierungen.
-
Schlechte Abstraktion Beispiel? God Interface mit vielen unzusammenhängenden Methoden, verletzt ISP, erschwert Austauschbarkeit und Tests.
-
Rolle von Generics bei Abstraktion? Parametrische Abstraktion, ein Algorithmus für viele Typen ohne Casts, Typsicherheit durch Compiler.
-
Polymorphie und Abstraktion zusammenwirken? Abstraktion definiert den Vertrag, Polymorphie liefert austauschbare Implementierungen, dynamischer Dispatch bindet zur Laufzeit.
Wichtigste Quellen
- https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
- https://de.wikipedia.org/wiki/Abstraktion_(Informatik)
- https://martinfowler.com/bliki/RoleInterface.html