OO-Entwurfsprinzipien Flashcards
Beschreibe Merkmale eines guten Entwurfs
- Lose Koplung: Abhängigkeiten vermeiden
- Hohe Kohäsion
–große Einheiten vermeiden
– code-duplizierung vermeiden - Entscheidungen über Zusammengehöriges: Entwurf nach Zuständigkeiten
Geh näher auf eine Lose Kopplung ein, was bedeutet das genau?
- Geeignete Schnittstellen wählen
- Entwurfsentscheidungen kapseln – Geheimnisprinzip
- Zyklen vermeiden
- Law of Demeter
Was bedeutet Kohäsion genau in der Softwareentwicklung?
- Mit Kohäsion (engl.: cohesion) bezeichnen wir den Grad (Anzahl und Verschiedenheit) der Aufgaben, die eine Softwareeinheit zu erfüllen hat.
- Wenn eine Einheit für genau eine logische Aufgabe zuständig, dann sprechen wir von hoher Kohäsion (engl.: high cohesion).
– Verletzung A: 1 Code-Einheit erfüllt mehrere Aufgaben
– Verletzung B: 1 Aufgabe auf mehrere Code-Einheiten verteilt - Auf Ebene des Klassenentwurfs unterscheiden wir
– Kohäsion von Methoden
– Kohäsion von Klassen
Was bedeutet Kopllung genau in der Softwareentwicklung?
- Kopplung (engl.: coupling) bezeichnet den Grad der Abhängigkeiten zwischen den Einheiten eines Softwaresystems.
– Abhängigkeiten können aus objektorientierter Sicht sein:
– Benutzt-Beziehungen
– Vererbungsbeziehungen
– Einheiten können sein:
– Methoden
– Klassen
– Pakete
– Subsysteme - Je mehr Abhängigkeiten in einem System existieren, desto stärker ist die Kopplung.
Wann ist Kopplung sichtbar?
aus Quellcode ersichtlich, durch statische Code-Analyse formal nachweisbar
* Bsp.: Zugriff eines Klienten auf öffentliche Exemplarvariablen
ist im Quellcode formuliert
Wann ist Kopplung nicht sichtbar?
nicht formal nachweisbar; deshalb deutlich unangenehmer,
* Kopplung häufig durch Wissen über Implementation, wie über Bedingungen, gemeinsam genutzte Daten, Details der Implementation
* Bsp.: Ein Entwickler implementiert sein Wissen über die Interna eines Dienstleisters in eine Klientenklasse hinein, z.B. über Objektzustände oder erwartete Reihenfolgen von Operationen.
Wieso ist eine Lose Kopplung von Vorteil?
- einzelne Klassen sind besser verständlich
- Änderungen sind einfacher durchzuführen
- weniger Kommunikation mit Bearbeitern anderer Klassen notwendig
Was besagt das Law of Demeter`
Eine Methode m eines Objektes o sollte ausschließlich Methoden von folgenden Objekten aufrufen:
* von o selbst;
* von Parametern von m;
* von Objekten, die m erzeugt;
* von Exemplarvariablen von o.
Wozu dienen Interfaces?
Client und Dienstleister voneinander entkoppeln
Welche Nachteile haben Klassen-Zyklen?
- Die Klassen lassen sich schlecht unabhängig voneinander testen.
- Die Initialisierungsreihenfolge der entstehenden Objekte ist möglicherweise
unklar. - Es gibt keinen offensichtlichen Einstiegspunkt, um sich in den Entwurf
einzulesen.
Wieso sind Code-Duplizierungen problematisch?
- üblicherweise nicht erkennbar, an welchen anderen Stellen derselbe Quelltext vorhanden ist
- Änderungen müssen vermutlich an allen anderen Duplikaten ausgeführt werden (Beispiel: Sicherheitslücke)
- Wenn übersehen, gibt es bösartige Fehler
- Mehr Code zu analysieren, zu verstehen, zu pflegen
Woraus besteht das SOLID Prinzip?
- SRP: Single Responsibility Principle
- OCP: Open Closed Principle
- LSP: Liskov Substitution Principle
- ISP: Interface Segregation Principle
- DIP: Dependency Inversion Principle
Beschreibe das DIP: Dependency Inversion Principle
Klienten und Dienstleister hängen von Abstraktionen
ab und nicht voneinander
Beschreibe das ISP: Interface Segregation Principle
Klienten-gerechte Interfaces
Demnach sollen zu große Schnittstellen in mehrere Schnittstellen aufgeteilt werden, falls implementierende Klassen unnötige Methoden haben müssen
Beschreibe das LSP: Liskov Substitution Principle
Supertyp durch Subtyp ersetzbar