FAQ Category: solid-prinzipien
Gibt es Fälle, in denen du bewusst gegen SOLID verstoßen würdest?
—
Ja, z. B. bei kleinen, kurzlebigen Projekten oder MVPs, wo Overengineering mehr schadet als hilft. Auch bei stark performancekritischem Code kann man SRP oder DIP bewusst lockern – solange man das technische Risiko bewusst managt.
Was passiert, wenn ein Interface zu viele Methoden hat?
—
Dann sind Clients gezwungen, Methoden zu implementieren, die sie gar nicht brauchen – was zu unnötiger Komplexität, Dummy-Implementierungen oder eng gekoppelten Klassen führt.Beispiel: Ein IMultiFunctionDevice-Interface mit Print, Scan, Fax zwingt einfache Geräte wie einen Scanner zur Implementierung nicht benötigter Methoden.
Was verletzt das Liskov Substitution Principle?
—
Wenn eine abgeleitete Klasse das Verhalten oder die Erwartungen der Basisklasse verändert (z. B. durch das Werfen unerwarteter Exceptions oder das Ignorieren von Basisverträgen), wird LSP verletzt.Ein klassisches Beispiel: Eine Square-Klasse, die von Rectangle erbt, aber bei setWidth auch die Höhe verändert – das verletzt das Verhalten der Basisklasse.
Was bedeutet das Open/Closed Principle, und wie setzt man es um?
—
Das OCP besagt, dass eine Softwarekomponente offen für Erweiterung, aber geschlossen für Modifikation sein soll. Das heißt: Neue Funktionalität kann durch Erweiterung (z. B. über Vererbung oder Komposition) hinzugefügt werden, ohne bestehenden Code zu verändern.Beispiel: Statt eine PaymentProcessor-Klasse direkt zu ändern, kann man neue Zahlungsmethoden über Subklassen oder Strategien einfügen.
Wie erkennst du, dass eine Klasse gegen das SRP verstößt?
—
Wenn eine Klasse mehr als einen Grund zur Änderung hat – also mehrere Verantwortlichkeiten trägt (z. B. Datenverarbeitung und Logging oder UI-Logik und Datenhaltung) – verstößt sie gegen SRP. Typische Anzeichen sind zu viele Methoden mit unterschiedlichen thematischen Zwecken oder häufige Änderungen aus verschiedenen Gründen.
Was sind die SOLID-Prinzipien, und warum sind sie wichtig?
—
SOLID ist ein Akronym für fünf Prinzipien objektorientierten Designs, die helfen, Software robuster, wartbarer und erweiterbarer zu gestalten: