SOLID steht wiederum für SRP, OCP, LSP, ISP, DIP
Wir fokussieren uns dieses Mal auf LSP und ISP.
Das Liskov Substitution Principle besagt, dass ein Programm, das Objekte einer Basisklasse T verwendet, auch mit Objekten der davon abgeleiteten Klasse S korrekt funktionieren muss, ohne dabei das Programm zu verändern.
Folgendes Beispiel verletzt das LSP, weil ein Kreis zwar eine Spezialform einer Ellipse ist, aber in diesem Fall nicht mit den Eigenschaften der Klasse Ellipse
kompatibel ist.setRadiusX()
und setRadiusY()
können nach wie vor auf dem Kreis aufgerufen werden und dadurch unerwünschte Nebeneffekte hervorrufen.
Besser wäre es die Klasse Circle
direkt von Shape
erben zu lassen.
Das Interface Segregation Principle besagt, dass Interfaces nur logisch untrennbare Methoden vorgeben sollten. Das heisst in diesem Beispiel, die Methoden printDocument
, scanDocument
und faxDocument
sollten nur in einem gemeinsamen Interface definiert werden, falls sämtliche (zukünftige) Implementierungen alle Methoden zwingend benötigen.
Ist dies nicht der Fall, so sollte man die Interfaces aufteilen. Dadurch können zukünftige Klassen nur einzelne Interfaces implementieren und sind nicht gezwungen irgendwelche Dummy-Implementierungen zu erstellen.