EMZETT.
Login

SOLID-Prinzipien

Kurz: SOLID fasst fünf Leitlinien für wartbare objektorientierte Software zusammen: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation und Dependency Inversion.

Genauer: Die Prinzipien stammen von Robert C. Martin („Uncle Bob“). Sie helfen, Klassen klein, austauschbar und leicht änderbar zu halten. Sie sind Faustregeln, keine Gesetze: Wer sie sklavisch befolgt, erzeugt leicht Überabstraktion.

Im Detail

BuchstabePrinzipKurzfassung
SSingle ResponsibilityEine Klasse hat genau einen Grund, sich zu ändern.
OOpen/ClosedOffen für Erweiterung, geschlossen für Änderung.
LLiskov SubstitutionUnterklassen müssen sich überall wie ihre Oberklasse verwenden lassen.
IInterface SegregationLieber mehrere kleine Schnittstellen als eine große.
DDependency InversionHohe Ebenen hängen von Abstraktionen ab, nicht von Details.

S: Single Responsibility

# Zu viel in einer Klasse: Berechnung, Speicherung UND Ausgabe
class Rechnung:
    def berechne(self): ...
    def speichere_in_datenbank(self): ...
    def drucke_pdf(self): ...
 
# Besser: getrennt
class Rechnung: ...              # nur Daten und Berechnung
class RechnungRepository: ...    # speichert
class RechnungDrucker: ...       # druckt

O: Open/Closed

Neue Rabattarten sollen ohne Änderung bestehender Klassen hinzukommen: Eine gemeinsame Schnittstelle (Rabatt) und jeweils eine neue Klasse (StudentenRabatt) statt einer wachsenden if/else-Kette (siehe Strategy-Muster).

L: Liskov

Ein Quadrat, das von Rechteck erbt und setBreite so ändert, dass auch die Höhe wechselt, verletzt die Erwartung an ein Rechteck. Die Vererbung (Vererbung) muss echte „ist ein“-Beziehungen abbilden.

I und D

Ein Drucker-Interface mit drucken, scannen und faxen zwingt einfache Drucker, unnütze Methoden zu implementieren – besser drei kleine Schnittstellen. Dependency Inversion wird mit Dependency Injection umgesetzt.

Siehe auch: Dependency Injection, Clean Code, OOP, Schnittstelle