Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
98 lines (67 sloc) 4.44 KB

SOLID


Was bedeutet SOLID?

SOLID ist ein Schlagwort, das gängige Prinzipien zur objektorientierten Softwareentwicklung zusammenfasst/«vereint».

SOLID bedeutet:

  • Single Responsibility Principle (SRP): Jedes Modul soll genau eine einzige Verantwortung übernehmen.
  • Open Closed Principle (OCP): Offen für Erweiterung, geschlossen für Änderung
  • Liskov Substitution Principle (LSP): Eine Instanz einer Klasse soll durch eine Instanz einer abgeleiteten Klasse ersetzt werden künnen, ohne dass sich das Verhalten ändert.
  • Interface Segregation Principle (ISP): Clients sollen nur von Schnittstellen abhängig sein, die sie auch tatsächlich benutzen
  • Dependency Inversion Principle (DIP): Umkehr der Abhängigkeiten - Schnittstellen statt konkrete Klassen (soviel wie möglich mit Interfaces arbeiten)

Gibt es noch andere solche zusammengefassten Prinzipien

  • KISS
    • Keep It simple, Stupid
  • DRY
    • Don't Repeat Yourself

Welches sind die 10 Gebote von Jim Flemming?

  • Als Klassenname sollten Nomen (Hauptwörter) und als Methodennamen Verben verwendet werden
  • Kommentare sind genauso wichtig wie Code und sollte dementsprechend eingestuft werden.
  • Vererbung sollte neuem Entwicklungspersonal helfen, den «Unterschied zu programmieren»
  • Die Kapselung von Allem – Sourcecode eingeschlossen – ist wesentlich
  • Verben (Methodennamen) sollten sehr sorgfältig ausgewählt werden, um Polymorphismus zu unterstützen.
  • Wiederverwendung kann nur dann erreicht werden, wenn die Standardklassen verständlich sind.
  • Neues Entwicklungspersonal sollte die CASE Tools der erfahrenen Leute wiederverwenden.
  • Plattformübergreifende Portabilität sollte wichtiger als andere Designaspekte sein
  • Eine neue Klasse sollte für jede neue Schnittstelle zu einer bestehenden Library verwendet werden.
  • Mehrfache Returns sollten ausschliesslich für Errorhandling und Debugging verwendet werden.

Was ist lose Kopplung?

Lose Kopplung bezeichnet einen geringen Grad der Abhängigkeit mehrerer Komponenten/Klassen untereinander.


Was ist Kohäsion?

Wie gut bildet eine Programmeinheit eine logische Aufgabe oder Einheit ab.


Welche Arten von Kohäsion gibt es?

  • Funktionale Kohäsion: Lediglich eine einzige Variable wird überhaupt verändert
  • Sequentielle Kohäsion: Es werden zwei Variablen verändert, aber beide Modifikationen resultieren lediglich in einen Output.
  • Informationsfluss Kohäsion: Die Änderung mehrerer Attribute wird von einem einzigen Input veranlasst

Was ist Polymorphie?

Wenn man beispielsweise in Java meherere Datentypen in einem Array ablegen kann.


Welche arten von Polymorphie gibt es?

  • Dynamische Polymorphie: Einer Variablen können Objekte verschiedenen Typen zugeordnet werden. Der Typ der Variablen fungiert dabei als Schnittstelle. Implementieren die verschiedenen Objekte dieselbe Methode – jedoch mit verschiedenem Verhalten – so kann zur Laufzeit (abhängig vom Typ des Objektes) die entsprechende Methode aufgerufen werden.
  • Statische Polymorphie (oder Überladung): Der Aufruf einer Operation wird aufgrund eines konkreten Typs einer Variable oder einer Konstanten auf eine bestimmte Methode abgebildet. Die Auswahl des Aufrufs einer Methode erfolgt dann beispielsweise aufgrund des Parametertyps oder der Anzahl der Parameter.

Was ist das Hollywood Prinzip?

Tell, don't ask (Don't call me, I'll call You) Die Einführung einer Abstraktionsschicht zwischen Klassen, Modulen und Packages erlaubt eine weitere Ausprägung des DIP, die Inversion of Control (IoC). Es geht darum, wer wen aufruft – also wer genau eine bestimmte Meldung initiiert. Wird beispielsweise ein bestimmtes Framework aus den Code aufgerufen, oder kann ein Codestück in ein Framework so eingefügt werden, dass es zum richtigen Zeitpunkt von Framework aufgerufen werden kann (Call-Back).

Tell, don't ask


Was ist Dependency injection?

Dependency Injection (DI) bedeutet, dass Abhängigkeiten zwischen Klassen oder Packages von einer externen Instanz zugewiesen werden.


Law of Demeter (LoD)

  • Principle of Least Knowledge
  • Only talk to your immediate friends
  • Don’t talk to strangers
  • Write shy code
  • Minimize coupling

Fail fast

  • Getting early feedback
  • Make failing safe!
  • Learn early
  • E.g. provide feedback during a start-up of an application, if there is a misconfiguration we should detect that early and not because of side effects
You can’t perform that action at this time.