eine Klasse nur eine Verantwortlichkeit; viele kleine Klassen sind besser als wenige große
Open-Closed-Prinzip
offen für Erweiterungen, aber geschlossen gegenüber Modifikationen; über Vererbung und Einsatz von Interfaces zu erreichen
Liskovsches Substitutionsprinzip
abgeleitete Klassen immer anstelle ihrer Basisklasse einsetzbar; Subtypen müssen sich so verhalten wie ihr Basistyp
Interface-Segregation-Prinzip
nur die Funktionen enthalten, die auch wirklich eng zusammengehören; ggf. mit Adapter-Entwurfsmuster komplexe Interfaces reduzieren
Dependency-Inversion-Prinzip
es sollen nur noch Abhängigkeiten zu Interfaces bestehen; Klassen auf einem höheren Abstraktionslevel sollen nicht von Klassen auf einem niedrigen Abstraktionslevel abhängig sein