# Design Principles ## [SOLID Design Principles](SOLID-Principle.md) - Fokus auf der Erstellung von Code - Wartbar, Robust, Wiederverwendbar ### S - Single Responsibility Principle (SRP) - Eine Klasse sollte nur eine einzige Aufgabe / Verantwortung haben ### O - Open/Closed Principle (OCP) - Software Komponenten sollten nur fpr Erweiterung, nicht für Modifikation offen sein ### L - Liskov's Substitution Principle (LSP) - Basisklassen müssen komplett passend für die erbenden Klassen sein ### I - Interface Segregation Principle (ISP) - Clients sollten nicht dazu verpflichtet werden unnötige Methoden zu implementieren ### D - Dependency Inversion Principle (DIP) - Abhängig von Abstraktion, nicht Konkretion ## Favor Composition over Inheritance - Vererbung ist ein offensichtlicher Weg um Code von der Basisklasse wiederzuverwenden - Unterklassen können die Codebasis der Basisklassen nicht verkleinern - Methoden des Interfaces müssen alle implementiert werden ### Composition - Inheritance: _is-a relationship_ - Composition - _contains relationship_ - Prinzip kann auch auf Aggregation angewendet werden - ![image_374.png](image_374.png)