VL6 - Design: SOLID-Prinzipien und Design Patterns-Karteikarten | Quizlet

0.0(0)
studied byStudied by 0 people
0.0(0)
full-widthCall Kai
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
GameKnowt Play
Card Sorting

1/28

encourage image

There's no tags or description

Looks like no tags are added yet.

Study Analytics
Name
Mastery
Learn
Test
Matching
Spaced

No study sessions yet.

29 Terms

1
New cards

Was ist objektorientiertes Design und ist es dasselbe wie objektorientierte Programmierung?

- formal nein, weil man kann mit obj. orientierter Programmierungssprachen auch nicht obj. orientiertes Design haben und umgekehrt

-Objektorientiertes Design beschreibt den strukturierten Entwurf eines Softwaremodells auf Basis von Klassen, Objekten und deren Beziehungen, um wartbare und erweiterbare Software zu schaffen.

-Information Hiding, Modularisierung, late binding als bsp

2
New cards

Was ist ein Objektorientierter Entwurf?

Entwurf eines Systems, unter Verwendung der Objektorientierten Modellierungskonzepte

<p>Entwurf eines Systems, unter Verwendung der Objektorientierten Modellierungskonzepte</p>
3
New cards

Was sind mit "Nachrichten"?

Wenn Module untereinander kommunizieren: konkret z.B. ein Methodenaufruf oder übergeben eines Parameters von einen zum anderen Modul

4
New cards

Was meint Polymorphismus?

Variablen können zur Laufzeit an verschiedene (verwandte) Typen gebunden werden

<p>Variablen können zur Laufzeit an verschiedene (verwandte) Typen gebunden werden</p>
5
New cards

Was meint Dynamische Bindung?

(late binding): Zur Laufzeit wird Methode entsprechend dem Objekttyp verwendet

<p>(late binding): Zur Laufzeit wird Methode entsprechend dem Objekttyp verwendet</p>
6
New cards

Was meint Information Hiding?

Zustand wird in Objekt gekapselt und von Zugriff von aussen geschützt

anstatt Wert an sich zu übergeben, wird nur eine Message "ein Papier mit der Info drauf" weitergegeben -> getter-Methode

<p>Zustand wird in Objekt gekapselt und von Zugriff von aussen geschützt</p><p>anstatt Wert an sich zu übergeben, wird nur eine Message "ein Papier mit der Info drauf" weitergegeben -&gt; getter-Methode</p>
7
New cards

Wie wichtig ist die Programmiersprache beim OO Design bzw. welche Konsequenzen gibt es je nach Sprach-Wahl?

Wichtig beim OO Design sind Prinzipien (Information Hiding, Modularisierung, late binding), nicht die

Programmiersprache.

Aber:

- OO Sprachen helfen Design direkt abzubilden

- Nicht OO Sprachen verlangen Mehraufwand / Disziplin

8
New cards

Gibt es ein Schema-F Patentrezept für Softwaredesign?

Nein, Softwaredesign ist ein kreativer, iterativer Prozess

9
New cards

Welche Leitfragen bieten aber eine gewisse Orientierung? 3P

1. Was sind die möglichen Klassen und Objekte im System?

-> Heuristik “Noun-Method”:

--> Substantive in den Anforderungen sind potentielle Klassen,

--> Verben potentielle Methoden

2. Welche Verantwortlichkeiten soll jede Klasse haben?

-> Jede Klasse sollte idealerweise nur eine Verantwortung haben

3. Welche anderen Klassen sind notwendig, um die jeweilige Aufgabe einer Klasse zu erfüllen?

10
New cards

Welches Werkzeug kann für solch einen ersten Entwurf nützlich sein?

CRC-Karten

<p>CRC-Karten</p>
11
New cards

Welche weiteren Designtipps gibt es? 5P

- Fokus auf Konzepten nicht auf Softwareklassen oder Daten

- Beginn bei Teilmodell, nicht direkt ganzes Problem lösen

- Inkrementeller Ausbau des Systems

- Verantwortlichkeit verteilen, dass jede Klasse eindeutige Rolle hat

- Kopplungen reduzieren (falls zu viele: Fehlt ein zu ergänzendes Konzept?)

12
New cards

Woraus besteht das SOLID Prinzip?

- Single Responsibility Prinzip

- Open closed Prinzip

- Liskovsches Substitutionsprinzip

- Interface Segregation

- Dependency Inversion

13
New cards

Was ist das Ziel der Prinzipien von SOLID?

Prinzipien zielen auf einfache Änderbarkeit durch Entkopplung der Module ab.

14
New cards

Was sagt das Single responsibility Prinzip aus?

Es sollte nie mehr als einen Grund geben, eine Klasse zu ändern.

• Objekte sollten hohe Kohäsion aufweisen

• Jede Klasse sollte nur für eine Sache verantwortlich sein

15
New cards

Siehe das Beispiel für das Single-responsibility Prinzip?

siehe Bild.

<p>siehe Bild.</p>
16
New cards

Was sagt das Open-closed Prinzip aus?

Module sollten sowohl offen (für Erweiterungen), als auch geschlossen (für Modifikationen) sein.

17
New cards

Was wird dem System durch das Open-closed Prinzip ermöglicht?

- Ermöglicht System um neue Features zu erweitern, ohne ursprünglichen Code zu ändern.

->Minimiert Risiko, dass existierende Funktionalität wegen Änderung nicht mehr funktioniert.

18
New cards

Was ist ein Beispiel für das Open-closed Prinzip?

siehe Bild.

<p>siehe Bild.</p>
19
New cards

Was sagt das Liskovsche Substitutionsprinzip aus?

Sei ϕ(x) eine beweisbare Eigenschaft von Objekt x von Typ T. Dann soll ϕ(y) für Objekte y des Typs S

wahr sein, wobei S ein Untertyp von T ist.

z.B. Oberklasse Hund - kann bellen; verschiedene Untertypen wie Pudel... Wenn das Untertypen von "Hund" sind, können alle (auch Pudel) bellen

20
New cards

Wie äussert sich das Einhalten des Liskovsche Substitutionsprinzip in der Software?

- Jedes Objekt kann durch ein Objekt der Subklasse ersetzt werden, ohne dass sich das Verhalten ändert.

- Kein überraschendes Verhalten → Einfacherer Code

21
New cards

Was ist das praktische Problem beim liskovschen Substitutionsprinzip, welches verhältnismässig mathematisch-abstrakt ausgedrückt wurde?

- Problematisch zu prüfen bei nicht gut definierten Schnittstellen und Klassen

-> Braucht Spezifikation

22
New cards

Was ist ein Negativ-Beispiel für das Liskovsche Substitutionsprinzip?

siehe Bild.

Bounded Stack ist im Unterklasse von Stack, aber Liskovsches Prinzip nicht erfüllt: Wenn push-Operation bei vollem BoundedStack durchgeführt wird, nicht möglich

<p>siehe Bild.</p><p>Bounded Stack ist im Unterklasse von Stack, aber Liskovsches Prinzip nicht erfüllt: Wenn push-Operation bei vollem BoundedStack durchgeführt wird, nicht möglich</p>
23
New cards

Was meint die Interface Segregation?

Clients sollten nicht dazu gezwungen werden, von Interfaces abzuhängen, die sie nicht verwenden!

24
New cards

Welche Konsequenz ergibt sich durch das Einhalten der Interface Segregation in der Software?

- Kleine Interfaces mit wohldefinierter Funktionalität sind zu bevorzugen

- Klassen werden entkoppelt

25
New cards

Was ist ein Negativ-Beispiel für das Nichteinhalten der Interface Segregation und wie sieht eine mögliche Verbesserung aus?

siehe Bild.

Nicht alle Drucker können drucken und scannen.

Lösung: Funktionen in zwei separate Interfaces

<p>siehe Bild.</p><p>Nicht alle Drucker können drucken und scannen.</p><p>Lösung: Funktionen in zwei separate Interfaces</p>
26
New cards

Was meint die Dependency inversion?

- Module hoher Ebenen sollten nicht von Modulen niedriger Ebenen abhängen.

- Abstraktionen sollten nicht von Details abhängen. Details sollten von Abstraktionen abhängen.

<p>- Module hoher Ebenen sollten nicht von Modulen niedriger Ebenen abhängen.</p><p>- Abstraktionen sollten nicht von Details abhängen. Details sollten von Abstraktionen abhängen.</p>
27
New cards

Wie sieht ein Negativ- und wie ein Positivbeispiel von Dependency inversion aus?

siehe Bild.

links:

Account verwendet Logger direkt (-)

rechts:

tatsächlich verwendeter Logger implementiert das Interface LoggingService (Abhängigkeit nach oben) -> einfach neue Logger hinzuzufügen. (+)

<p>siehe Bild.</p><p>links:</p><p>Account verwendet Logger direkt (-)</p><p>rechts:</p><p>tatsächlich verwendeter Logger implementiert das Interface LoggingService (Abhängigkeit nach oben) -&gt; einfach neue Logger hinzuzufügen. (+)</p>
28
New cards

Was beschreibt das Gesetz von Demeter?

Eine Methode m einer Klasse K soll ausschließlich auf folgende Programm-Elemente zugreifen:

•Methoden von K selbst

•Methoden von Objekten, die als Argumente an m übergeben werden

•Methoden von Objekten, die in Instanzvariablen von K abgelegt sind

•Methoden von Objekten, die m erzeugt

<p>Eine Methode m einer Klasse K soll ausschließlich auf folgende Programm-Elemente zugreifen:</p><p>•Methoden von K selbst</p><p>•Methoden von Objekten, die als Argumente an m übergeben werden</p><p>•Methoden von Objekten, die in Instanzvariablen von K abgelegt sind</p><p>•Methoden von Objekten, die m erzeugt</p>
29
New cards

Was ist ein Positiv- und was ein Negativbeispiel für die Anwendung bzw. Nicht-Anwendung des Gesetzes von Demeter?

siehe Bild.

links:

In Driver wird auf start() Methode von Engine zugegriffen. (-)

rechts: in Driver wird turnOn() verwendet, also wird nur auf eine Methode von Car zugegriffen

<p>siehe Bild.</p><p>links:</p><p>In Driver wird auf start() Methode von Engine zugegriffen. (-)</p><p>rechts: in Driver wird turnOn() verwendet, also wird nur auf eine Methode von Car zugegriffen</p>