diff --git a/Programmierparadigmen.md b/Programmierparadigmen.md index 1d2c672..cd59282 100644 --- a/Programmierparadigmen.md +++ b/Programmierparadigmen.md @@ -56,3 +56,48 @@ - objektorientiert - funktional - imperativ + + +# Programmierprinzipien + +## SOLID + +### Separations of Concern +Module sollten einem und nur einem Akteur gegenüber verantwortlich sein + +### Open/Closed Principle +Bei der Entwicklung von Klassen, Methoden, Modulen usw. sollen Erweiterungen einfach implimentierbar sein, +aber ohne die bestehenden Verhältnisse zu verändern. + +### Liskov Substitution Principle +Subklassen sollen immer Eigenschaften der Superklasse erfüllen und auch als solche verwendet werden können. + +### Interface Segregation Principle +Interfaces sollen an Bedürfnis des Client angepasst werden und nicht übermäßig überladen werden. + +### Dependency Inversion Principle +Module höherer Ebene sollten nicht von Modulen niedriger Ebene abhängen. Beide sollten von Abstraktionen abhängen. +Abstraktionen sollten nicht von Details abhängen. Details sollten von Abstraktionen abhängen. + +## STUPID + +### Singelton +Es wird nur genau ein Objekt pro Klasse erzeugt und global zur Verfügung gestellt. +Es kann dadurch zu Abhängigkeiten führen, die man nicht direkt sehen kann. + +### Tight Coupling +Module zu stark verkuppelt, dass Änderungen in einem Modul immer zu einer weiteren Änderung führen müssen. +Isolierte Testungen sind so fast unmöglich. + +### Untestability +Untestbarkeit von Modulen (z.B. durch Tight Coupling) + +### Premature Optimization +Frühzeitige Optimierung bevor überhaupt Probleme entstanden sind (viel Zeit für nichts). + +### Indescriptive Naming +Ungenaue Benennung von Variablen, Funktionen usw. Andere Programmierer haben Probleme diesen Code nachzuvollziehen. + +### Duplication +Keine Dopplung von den selben Code. Änderung müssen mehrmals vorgenommen werden. +