Kapselung und Abstraktion: Verhalten verstecken, Code vereinfachen
Kapselung und Abstraktion sind Werkzeuge, auf die wir beim Programmieren instinktiv zurückgreifen, oft ohne genau diese Begriffe zu benutzen. Sie lohnen aber einen genaueren Blick, denn sie sind der Hebel, mit dem aus unübersichtlichem Code lesbarer, testbarer Code wird. Diese Seite vertieft die beiden Begriffe aus Sicht der Domänenmodellierung und ergänzt damit die vier Säulen der OOP.
1. 📦 Kapselung: Verhalten vereinfachen
Kapselung beschreibt zwei eng verbundene Ideen: das Vereinfachen von Verhalten und das Verbergen von Daten. Hier geht es vor allem um das Erste. Wir kapseln Verhalten, indem wir eine Aufgabe identifizieren, die der Code erledigen muss, und sie an ein wohldefiniertes Objekt oder eine Funktion übergeben. Dieses Objekt oder diese Funktion nennen wir dann eine Abstraktion.
2. 🪜 Abstraktion als Ebene, nicht als Geheimnis
Abstraktion heisst: Du operierst auf einer höheren Ebene und musst die Details darunter nicht jedes Mal neu durchdenken. Am klarsten wird das an demselben Auftrag, dreimal auf unterschiedlicher Höhe geschrieben.
Zuerst direkt mit urllib, formcodierte Werte werden von Hand an eine URL geschickt:
Dasselbe mit requests, das Encoding und Parsen übernimmt die Bibliothek:
Beide erledigen exakt dieselbe Aufgabe (formcodierte Werte an eine URL schicken, um eine Suchmaschinen-API zu nutzen). Der zweite ist leichter zu lesen, weil er auf einer höheren Abstraktionsebene arbeitet. Man kann noch weiter gehen und die ganze Aufgabe hinter eine fachliche Schnittstelle legen:
Jetzt steht im Code nur noch die Absicht («frage DuckDuckGo»), nicht mehr die Mechanik. Das Verhalten ist gekapselt, die Details sind hinter eine Abstraktion gewandert.
Analogie: Auto
Das ist dasselbe Prinzip wie beim Auto: Der Fahrer bedient Lenkrad und Pedale und muss nicht wissen, wie der Motor intern die Einspritzung regelt. Die duckduckgo.query()-Zeile ist das Lenkrad, der urllib-Block ist der Motorraum. Beide bewegen das Auto, aber nur einer davon gehört in den Fahrersitz.
3. 🧪 Warum sich das lohnt
Verhalten durch Abstraktion zu kapseln, macht Code ausdrucksstärker (man liest die Absicht statt der Mechanik), testbarer (die Abstraktion lässt sich isoliert prüfen oder ersetzen) und leichter wartbar (ändert sich die Mechanik, bleibt die Schnittstelle gleich). Genau hier setzt Domänenmodellierung an: Fachliche Aufgaben bekommen wohldefinierte Objekte, statt im technischen Klein-Klein zu verschwinden.
Hinweis fürs Review: Dieser Eintrag stammt aus einem Fragment der Lesenotiz zu Architecture Patterns with Python. Im Original waren weitere Abschnitte (Domänenmodell, Domänensprache, Unit Testing für Domänenmodelle, Value Objects und Entitäten, Dataclasses) nur als leere Stubs angelegt. Sie sind hier bewusst nicht erfunden, sondern offen gelassen und könnten später ergänzt werden.
📚 Weiterführende Links & Quellen
- Was ist OOP? (Kapselung und Abstraktion als zwei der vier Säulen)
- Buch: Architecture Patterns with Python («Cosmic Python») von Harry Percival und Bob Gregory (O’Reilly), Quelle dieser Notiz (Kapitel zur Domänenmodellierung, Abschnitt Kapselung/Abstraktion). Frei lesbar unter cosmicpython.com
- Buch: Clean Code von Robert C. Martin (lesbarer, wartbarer Code in der Praxis)