SOLID Prinzipien Grundlagen
SOLID ist ein Akronym für fünf Prinzipien objektorientierten Designs, die zu wartbarem, erweiterbarem und fehlerresistentem Code führen.
In a Nutshell
SOLID: Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.
S — Single Responsibility (SRP)
Eine Klasse sollte nur einen Grund zur Änderung haben.
// Schlecht: mehrere Verantwortungen
class User {
saveToDatabase() { /* DB */ }
sendEmail() { /* E-Mail */ }
validateEmail() { /* Validierung */ }
}
// Gut: getrennt
class User {}
class UserRepository { save(u: User) {} }
class EmailService { send(u: User, msg: string) {} }
O — Open-Closed (OCP)
Offen für Erweiterung, geschlossen für Modifikation.
// Schlecht: Switch bei neuem Typ erweitern
class DiscountCalculator {
calculate(type: string): number {
if (type === 'premium') return 0.8;
if (type === 'vip') return 0.7;
return 1.0;
}
}
// Gut: Strategy Pattern
interface DiscountStrategy { getFactor(): number; }
class PremiumDiscount implements DiscountStrategy { getFactor() { return 0.8; } }
class VipDiscount implements DiscountStrategy { getFactor() { return 0.7; } }
L — Liskov Substitution (LSP)
Subtypen müssen Basistypen ersetzen können.
// Schlecht: Penguin kann nicht fliegen
class Bird { fly() {} }
class Penguin extends Bird { fly() { throw new Error('Cannot fly'); } }
// Gut: korrekte Hierarchie
interface Bird { layEgg(): void; }
interface FlyingBird extends Bird { fly(): void; }
I — Interface Segregation (ISP)
Kein Client sollte von ungenutzten Methoden abhängen.
// Schlecht: fettes Interface
interface Worker { work(): void; eat(): void; sleep(): void; }
// Gut: getrennt
interface Workable { work(): void; }
interface Eatable { eat(): void; }
D — Dependency Inversion (DIP)
Abhängig von Abstraktionen, nicht von Konkretionen.
// Schlecht: direkte Abhängigkeit
class OrderService {
private repo = new MySQLDatabase();
}
// Gut: Dependency Injection
interface OrderRepository { save(order: Order): void; }
class OrderService {
constructor(private repo: OrderRepository) {}
}
SOLID im Überblick
| Prinzip | Bedeutung | Ziel |
|---|---|---|
| SRP | Single Responsibility | Eine Klasse, eine Verantwortung |
| OCP | Open-Closed | Erweiterbar ohne Modifikation |
| LSP | Liskov Substitution | Subtypen ersetzen Basistypen |
| ISP | Interface Segregation | Kleine, spezifische Interfaces |
| DIP | Dependency Inversion | Abstraktion statt Konkretion |
Prüfungsrelevante Stichpunkte
- SOLID als Akronym für fünf OOP-Designprinzipien
- SRP: ein Grund zur Änderung pro Klasse
- OCP: Erweiterung ohne Modifikation (Strategy Pattern)
- LSP: Subtypen müssen Verträge einhalten
- ISP: Viele kleine Interfaces
- DIP: Dependency Injection, Abstraktion als Abhängigkeit
FAQ
1. Wofuer steht SOLID?
2. Was besagt SRP?
3. Was besagt OCP?
4. Was besagt LSP?
5. Was besagt ISP?
6. Was besagt DIP?
7. Wer hat SOLID gepraegt?
8. LSP-Verletzung?
9. Wie OCP?
10. Was ist DI?
11. SOLID vs Clean Code?
12. Fat Interface?
13. Wann SOLID?
14. Uebertreibbar?
15. SOLID und Tests?
Weiter im SOLID Lernpfad
Der nächste Artikel im SOLID Lernpfad behandelt Analyse- und Designverfahren: UML, GRASP, SOLID und Qualitätsziele — wie UML-Diagramme, GRASP-Patterns und SOLID-Prinzipien in der Softwarearchitektur zusammenwirken.
Quellen
- https://en.wikipedia.org/wiki/SOLID
- https://www.oreilly.com/library/view/clean-code/9780134661742/
- https://refactoring.guru/design-patterns/solid-principles
Buchempfehlungen zur Softwarequalität
Wenn Du Dich weiter mit SOLID, Clean Code und Softwarequalität beschäftigen möchtest, empfehlen wir Dir die folgenden Bücher:
Software Engineering
Bücher über Softwarequalität, Clean Code, Code Reviews und Softwareentwicklungsprozesse
Clean Code: Programmieren in Java – Refactoring, Test-Driven Development und Clean Architecture von Robert C. Martin
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Software Engineering: Umfassendes Handbuch für die Praxis
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Refactoring: Wie Sie bestehenden Code verbessern von Martin Fowler
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.






