Skip to content
IRC-Coding IRC-Coding
Clean Code SOLID SRP OCP LSP ISP DIP

Clean Code & SOLID einfach erklärt: Prinzipien, Beispiel und Prüfungsfragen

Clean Code und SOLID: SRP, OCP, LSP, ISP, DIP – Bedeutung, Vorteile/Nachteile, Beispiel und typische Prüfungsfragen für Ausbildung und Praxis.

S

schutzgeist

2 min read
Clean Code & SOLID einfach erklärt: Prinzipien, Beispiel und Prüfungsfragen

Clean Code und SOLID-Prinzipien

Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code: Deutsche Ausgabe

Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code: Deutsche Ausgabe

39,99 €

Bei Amazon ansehen

Affiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.

Clean Code für Dummies: Besser programmieren. Professionelle Softwareentwicklung.

Clean Code für Dummies: Besser programmieren. Professionelle Softwareentwicklung.

24,99 €

Bei Amazon ansehen

Affiliate-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

Besser coden: Best Practices für Clean Code. Das ideale Buch für die professionelle Softwareentwicklung

34,99 €

Bei Amazon ansehen

Affiliate-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

  1. 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.
  2. 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.
  3. Vererbung nach LSP – Vererbung sollte so eingesetzt werden, dass abgeleitete Klassen die Basisklasse jederzeit korrekt ersetzen können. Das verhindert Überraschungen beim Polymorphismus.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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)

  1. Was bedeutet Clean Code? Lesbarer, wartbarer Code.
  2. Welche SOLID-Prinzipien gibt es? SRP, OCP, LSP, ISP, DIP.
  3. Was ist ein God Object? Klasse mit zu vielen Verantwortlichkeiten.
  4. 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

  1. Kleine Clean-Code-Kapitel lesen.
  2. Eigenen Code refactoren (SRP/LSP).
  3. Pro Prinzip ein Beispiel formulieren.
  4. Zu große Klassen vermeiden.

Themenanalyse

  • Kern: OOP, Designprinzipien
  • Herausforderungen: Overengineering
  • Sicherheit: weniger versteckte Zustände
  • Doku: Architekturentscheidungen
  • Wirtschaftlichkeit: geringere Bugrate

Weiterführende Infos

  1. https://refactoring.guru/design-patterns/principles
  2. https://www.sonarsource.com/products/sonarqube/

FAQ: Clean Code und SOLID-Prinzipien

1. Was ist Clean Code?

Clean Code ist Quellcode, der leicht lesbar, verständlich und wartbar ist. Er folgt klaren Konventionen, verwendet sprechende Namen und vermeidet unnötige Komplexität.

2. Was bedeutet SOLID?

SOLID ist ein Akronym für fünf Prinzipien objektorientierten Designs: Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation und Dependency Inversion.

3. Was ist das Single Responsibility Principle?

Das Single Responsibility Principle besagt, dass eine Klasse nur eine einzige Verantwortlichkeit haben sollte. Wenn es mehrere Gründe gibt, eine Klasse zu änderen, sollte sie aufgeteilt werden.

4. Was ist das Open-Closed Principle?

Das Open-Closed Principle besagt, dass Klassen offen für Erweiterungen, aber geschlossen für Änderungen sein sollten. Neue Funktionen werden durch Hinzufügen von Code realisiert, nicht durch Umbau bestehenden Codes.

5. Was ist das Liskov Substitution Principle?

Das Liskov Substitution Principle verlangt, dass eine abgeleitete Klasse jederzeit die Basisklasse ersetzen kann, ohne dass das Programm fehlerhaft wird. Das ist ein wichtiges Prüfungsthema.

6. Was ist das Interface Segregation Principle?

Das Interface Segregation Principle besagt, dass Interfaces klein und spezialisiert sein sollten. Klassen sollen nur die Methoden implementieren, die sie tatsächlich benötigen.

7. Was ist das Dependency Inversion Principle?

Das Dependency Inversion Principle besagt, dass Module von Abstraktionen abhängen sollten, nicht von konkreten Klassen. Dadurch bleibt der Code flexibel und testbar.

8. Was ist ein God Object?

Ein God Object ist eine Klasse, die zu viele Verantwortlichkeiten trägt und viele andere Teile des Systems kennt. God Objects verletzen das SRP und sollten in kleinere Klassen aufgeteilt werden.

9. Was ist Code Smell?

Ein Code Smell ist ein Hinweis auf mögliche Probleme im Code, auch wenn der Code noch funktioniert. Lange Methoden, große Klassen oder duplizierter Code sind typische Code Smells.

10. Was ist Refactoring?

Refactoring ist die Verbesserung des bestehenden Codes, ohne das Verhalten zu ändern. Ziel ist es, den Code lesbarer, wartbarer und testbarer zu machen.

11. Was ist Kapselung?

Kapselung versteckt interne Details einer Klasse und macht nur eine klar definierte Schnittstelle nach außen sichtbar. Sie schützt Daten vor unerlaubtem Zugriff und reduziert Kopplung.

12. Was ist Kopplung?

Kopplung beschreibt, wie stark Module voneinander abhängen. Geringe Kopplung ist wünschenswert, weil sie Änderungen, Tests und Wiederverwendung erleichtert.

13. Was ist Kohäsion?

Kohäsion beschreibt, wie stark die Elemente einer Klasse oder eines Moduls zusammengehören. Hohe Kohäsion bedeutet, dass alle Teile einer Klasse zur gleichen Verantwortlichkeit beitragen.

14. Was ist ein Unit Test?

Ein Unit Test prüft eine einzelne Komponente isoliert. Clean Code und SOLID erleichtern das Unit Testing, weil kleine, entkoppelte Klassen einfach zu testen sind.

15. Was ist Dependency Injection?

Dependency Injection ist eine Technik, bei der Abhängigkeiten von außen bereitgestellt werden, statt sie innerhalb einer Klasse selbst zu erzeugen. Sie hilft, das DIP umzusetzen.

16. Was ist ein Interface?

Ein Interface definiert einen Vertrag, den implementierende Klassen erfüllen müssen. Interfaces ermöglichen Abstraktion und entkoppeln Module voneinander.

17. Was ist Polymorphismus?

Polymorphismus ermöglicht es, dass verschiedene Klassen über dieselbe Schnittstelle angesprochen werden können. Das ist die Grundlage für das Liskov Substitution Principle.

18. Was ist Overengineering?

Overengineering ist die übertriebene Anwendung komplexer Muster oder Prinzipien, wo einfachere Lösungen ausreichen würden. SOLID sollte pragmatisch eingesetzt werden, nicht dogmatisch.

19. Was ist ein Code Review?

Ein Code Review ist die Überprüfung von Code durch andere Entwickler. Dabei werden Lesbarkeit, Einhaltung von Prinzipien und mögliche Fehler geprüft.

20. Was ist ein sprechender Name?

Ein sprechender Name beschreibt die Absicht hinter einer Variablen, Funktion oder Klasse. Er macht den Code selbsterklärend und reduziert den Bedarf an Kommentaren.

21. Was ist DRY?

DRY steht für Do not Repeat Yourself. Es bedeutet, dass Duplikate im Code vermieden werden sollten, weil Wiederholungen die Wartung erschweren und Fehler begünstigen.

22. Was ist KISS?

KISS steht für Keep It Simple, Stupid. Es ist ein Prinzip, das besagt, dass Lösungen so einfach wie möglich gehalten werden sollten, um Fehler zu vermeiden und die Wartbarkeit zu erhöhen.

23. Was ist YAGNI?

YAGNI steht für You Ain’t Gonna Need It. Es warnt vor der Implementierung von Funktionen, die aktuell nicht benötigt werden, um unnötige Komplexität zu vermeiden.

24. Was ist technische Schuld?

Technische Schuld entsteht, wenn bewusst oder unbewusst saubere Lösungen zugunsten schneller Ergebnisse aufgeschoben werden. Sie muss später durch Refactoring zurückgezahlt werden.

25. Was ist SonarQube?

SonarQube ist ein Codeanalyse-Tool, das automatisch Code Smells, Bugs, Sicherheitslücken und technische Schuld erkennt. Es unterstützt Teams bei der Einhaltung von Clean Code.

26. Was ist ein UML-Klassendiagramm?

Ein UML-Klassendiagramm stellt Klassen, Attribute, Methoden und ihre Beziehungen dar. Es hilft, Architekturen zu kommunizieren und SOLID-Prinzipien zu visualisieren.

27. Was ist Testbarkeit?

Testbarkeit beschreibt, wie einfach ein Code-Teil automatisch getestet werden kann. Clean Code und geringe Kopplung erhöhen die Testbarkeit erheblich.

28. Was ist Wartbarkeit?

Wartbarkeit beschreibt, wie einfach ein System angepasst, korrigiert oder erweitert werden kann. Clean Code und SOLID erhöhen die Wartbarkeit, indem sie Struktur und Lesbarkeit verbessern.

29. Was ist ein Architekturentscheidung?

Ein Architekturentscheidung ist eine bewusste Wahl zur Strukturierung eines Systems. Die Anwendung von Clean Code und SOLID sollte in der Architekturdokumentation festgehalten werden.

30. Wie fängt man mit Clean Code und SOLID an?

Du beginnst mit kleinen Schritten: sprechende Namen verwenden, Klassen auf eine Verantwortlichkeit reduzieren, Interfaces nutzen und regelmäßig Refactoring durchführen. Pro SOLID-Prinzip ein Beispiel formulieren hilft beim Lernen.
Zurück zum Blog
Share:

Ähnliche Beiträge