OO-Entwurfsprinzipien Flashcards

1
Q

Beschreibe Merkmale eines guten Entwurfs

A
  • Lose Koplung: Abhängigkeiten vermeiden
  • Hohe Kohäsion
    –große Einheiten vermeiden
    – code-duplizierung vermeiden
  • Entscheidungen über Zusammengehöriges: Entwurf nach Zuständigkeiten
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Geh näher auf eine Lose Kopplung ein, was bedeutet das genau?

A
  • Geeignete Schnittstellen wählen
  • Entwurfsentscheidungen kapseln – Geheimnisprinzip
  • Zyklen vermeiden
  • Law of Demeter
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was bedeutet Kohäsion genau in der Softwareentwicklung?

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was bedeutet Kopllung genau in der Softwareentwicklung?

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wann ist Kopplung sichtbar?

A

aus Quellcode ersichtlich, durch statische Code-Analyse formal nachweisbar
* Bsp.: Zugriff eines Klienten auf öffentliche Exemplarvariablen
ist im Quellcode formuliert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wann ist Kopplung nicht sichtbar?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wieso ist eine Lose Kopplung von Vorteil?

A
  • einzelne Klassen sind besser verständlich
  • Änderungen sind einfacher durchzuführen
  • weniger Kommunikation mit Bearbeitern anderer Klassen notwendig
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was besagt das Law of Demeter`

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Wozu dienen Interfaces?

A

Client und Dienstleister voneinander entkoppeln

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Welche Nachteile haben Klassen-Zyklen?

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Wieso sind Code-Duplizierungen problematisch?

A
  • ü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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Woraus besteht das SOLID Prinzip?

A
  • SRP: Single Responsibility Principle
  • OCP: Open Closed Principle
  • LSP: Liskov Substitution Principle
  • ISP: Interface Segregation Principle
  • DIP: Dependency Inversion Principle
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Beschreibe das DIP: Dependency Inversion Principle

A

Klienten und Dienstleister hängen von Abstraktionen
ab und nicht voneinander

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Beschreibe das ISP: Interface Segregation Principle

A

Klienten-gerechte Interfaces
Demnach sollen zu große Schnittstellen in mehrere Schnittstellen aufgeteilt werden, falls implementierende Klassen unnötige Methoden haben müssen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Beschreibe das LSP: Liskov Substitution Principle

A

Supertyp durch Subtyp ersetzbar

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Beschreibe das OCP: Open Closed Principle

A

Offen für Erweiterungen, Änderungen wirken sich nicht auf Klienten aus

17
Q

Beschreibe das SRP: Single Responsibility Principle

A

Aufteilung nach Zuständigkeiten,
Separation of Concerns