Clean Code und SOLID-Prinzipien
Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code: Deutsche Ausgabe
39,99 €
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Clean Code für Dummies: Besser programmieren. Professionelle Softwareentwicklung.
24,99 €
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Besser coden: Best Practices für Clean Code. Das ideale Buch für die professionelle Softwareentwicklung
34,99 €
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Dieser Beitrag ist eine Begriffserklärung zu Clean Code & SOLID – inklusive Prüfungsfragen, Kernelementen und Tags.
In a Nutshell
Clean Code steht für lesbaren, wartbaren, fehlerarmen Code. SOLID sind fünf zentrale Leitlinien für objektorientiertes Design.
Kompakte Fachbeschreibung
Clean Code fokussiert u.a. Namensgebung, Struktur, Wiederverwendbarkeit und kleine, verständliche Funktionen.
SOLID:
- S (SRP): Eine Klasse hat genau eine Verantwortlichkeit.
- O (OCP): Offen für Erweiterung, geschlossen für Änderung.
- L (LSP): Subtypen müssen Basistypen sauber ersetzen können.
- I (ISP): Viele kleine Interfaces statt weniger großer.
- D (DIP): Abhängigkeiten über Abstraktionen, nicht konkrete Klassen.
Prüfungsrelevante Stichpunkte
- Clean Code = lesbar, wartbar. Clean Code bedeutet, dass Quellcode so geschrieben ist, dass er leicht zu verstehen, zu ändern und zu erweitern ist. Lesbarkeit reduziert Fehler und erleichtert die Zusammenarbeit im Team.
- SRP: eine Klasse = eine Aufgabe. Das Single Responsibility Principle besagt, dass eine Klasse nur eine Verantwortlichkeit haben sollte. Wenn sich an einem Grund für eine Änderung etwas ändert, sollte nur diese eine Klasse betroffen sein.
- OCP: erweiterbar ohne Änderung. Das Open-Closed Principle besagt, dass Klassen offen für Erweiterungen, aber geschlossen für direkte Änderungen sein sollten. Neue Funktionen werden durch Hinzufügen von Code realisiert, nicht durch Umbau bestehenden Codes.
- LSP: Subklassen korrekt substituierbar (IHK-relevant). Das Liskov Substitution Principle verlangt, dass eine abgeleitete Klasse jederzeit die Basisklasse ersetzen kann, ohne dass das Programm fehlerhaft wird. Das ist ein häufiges Prüfungsthema in der IHK.
- ISP: Interfaces trennen (Praxis). Das Interface Segregation Principle besagt, dass Interfaces klein und spezialisiert sein sollten. Klassen sollen nur die Methoden implementieren, die sie tatsächlich benötigen.
- DIP: Abhängigkeit über Interfaces. Das Dependency Inversion Principle besagt, dass Module von Abstraktionen abhängen sollten, nicht von konkreten Klassen. Dadurch bleibt der Code flexibel und leicht testbar.
- Wirtschaftlichkeit: weniger Bugs, leichteres Onboarding. Sauberer Code reduziert die Fehleranfälligkeit und hilft neuen Entwicklern, sich schneller im Projekt zurechtzufinden. Das senkt langfristig die Kosten der Softwareentwicklung.
- Doku: Prinzipien in Architekturbeschreibung erwähnen. Wenn Clean Code und SOLID im Projekt gezielt angewendet werden, sollten diese Entscheidungen in der Architekturdokumentation vermerkt werden. So bleiben die Prinzipien für alle Beteiligten nachvollziehbar.
Kernkomponenten
- Sprechende Namen – Variablen, Funktionen und Klassen sollten Namen tragen, die ihre Absicht direkt erklären. Ein guter Name ersetzt viele Kommentare und macht den Code selbstdokumentierend.
- Kapselung/SRP – Kapselung versteckt interne Details und schützt Daten vor unerlaubtem Zugriff. In Kombination mit SRP führt das zu kleinen, fokussierten Klassen, die nur eine Aufgabe erfüllen.
- Vererbung nach LSP – Vererbung sollte so eingesetzt werden, dass abgeleitete Klassen die Basisklasse jederzeit korrekt ersetzen können. Das verhindert Überraschungen beim Polymorphismus.
- Vermeidung von God Objects – God Objects sind Klassen, die zu viele Verantwortlichkeiten tragen und viele andere Klassen kennen. Sie sollten in kleinere, spezialisierte Klassen aufgeteilt werden.
- ISP-Interfaces – Interfaces sollten klein und fachlich zusammenhängend sein. Eine Klasse implementiert nur die Interfaces, deren Methoden sie wirklich benötigt, und bleibt dadurch schlank.
- Abstraktion/DIP – Abstraktionen wie Interfaces oder abstrakte Klassen entkoppeln Module voneinander. DIP verlangt, dass High-Level-Module nicht von Low-Level-Details abhängen, sondern von Abstraktionen.
- Unit Tests – Unit Tests prüfen einzelne Komponenten isoliert. Clean Code und SOLID erleichtern das Testen, weil kleine, entkoppelte Klassen einfacher mit Mocks zu testen sind.
- Refactoring – Refactoring ist die kontinuierliche Verbesserung des bestehenden Codes, ohne das Verhalten zu ändern. Durch Refactoring bleibt der Code wartbar und technische Schulden werden reduziert.
- Diagramme zur Erklärung – UML-Diagramme oder einfache Klassendiagramme helfen, Zusammenhänge und Abhängigkeiten zu visualisieren. Sie sind besonders nützlich für Architekturbeschreibungen und Prüfungsvorbereitung.
- Codeanalyse-Tools (SonarQube) – Tools wie SonarQube erkennen automatisch Code Smells, Komplexität und Sicherheitsprobleme. Sie unterstützen Teams dabei, Clean Code und SOLID im Projektalltag einzuhalten.
Praxisbeispiel (SRP)
class ReportPrinter {
public void print(PDFReport report) {
// nur drucken, keine Report-Erstellung
}
}
Vorteile und Nachteile
Vorteile
- Verständlicher Code
- Bessere Testbarkeit
- Weniger Kopplung
- Strukturierte Architektur
Nachteile
- Höherer Initialaufwand
- Übertriebene Anwendung kann fragmentieren
Typische Prüfungsfragen (mit Kurzantwort)
- Was bedeutet Clean Code? Lesbarer, wartbarer Code.
- Welche SOLID-Prinzipien gibt es? SRP, OCP, LSP, ISP, DIP.
- Was ist ein God Object? Klasse mit zu vielen Verantwortlichkeiten.
- Warum ist DIP wichtig? Entkoppelt High-Level von Low-Level.
Freie Antwort
SOLID sind Leitlinien, keine starren Regeln. In Prüfungen zählt, ein Prinzip erklären und anhand eines Beispiels begründen zu können – ohne Overengineering.
Lernstrategie
- Kleine Clean-Code-Kapitel lesen.
- Eigenen Code refactoren (SRP/LSP).
- Pro Prinzip ein Beispiel formulieren.
- Zu große Klassen vermeiden.
Themenanalyse
- Kern: OOP, Designprinzipien
- Herausforderungen: Overengineering
- Sicherheit: weniger versteckte Zustände
- Doku: Architekturentscheidungen
- Wirtschaftlichkeit: geringere Bugrate


