LE 6 | OOD - Objektorientiertes Design - IW [Überarbeitet: 20150630 /IW, 20150702 / ME] Flashcards

1
Q

Was bedeutet Design in der SWT?

A
  • beschreibt den Prozess zwischen Analyse und Implementierung
  • Definition grundlegender Architekturen
  • Spezifikation von Komponenten
  • Interaktionen transparent machen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Wie wird die Designphase noch genannt und warum wird diese so genannt?

A
  • Architekturphase
  • Gestaltung (Design) der Komponeten soll eine Architektur ergeben
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Welche Phase folgt im Wasserfallmodell nach der Analysephase?

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

Welche Dokument sind nach IEEE Std 1016 im Designprozess zu erstellen?

A
  • Einleitung
    • Designübersicht
  • System Architektur
  • Detailbeschreibung der Komponenten
  • Benutzerschnittstelle (UI)
  • Zusätzliches Material (Appendix)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Nenne 2 Frameworks für den Designprozess!

A
  • Spring
  • EJB/JEE
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Welche Kriterien muss eine gute Softwarearchitektur/Design erfüllen?

A
  • Änderbar
  • Testbar
  • Verständlich/ Lesbar
  • Wiederverwendbarkeit von Komponenten/Klassen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Bei der Definition der Anwendungsarchitektur gilt es zunächst ein grobes Bild der Komponenten zu definieren, welches dann immer weiter verfeinert wird.
Wie geht man dabei vor?

A
  • Deployment-Diagramm (Verteilungsdiagramm)
    • gobes Bild definieren
    • Verteilungsdiagramm
    • Versuchen alle Interaktionswege zu berücksichtigen
    • die ersten groben Komponenten werden sichbar
  • Schichten und Komponenten (Komponentenmodell)
    • Komponentendiagramm
    • Identifkation möglichst vieler Komponenten zur Abrenzung und Verteilung
    • Gruppenbildung um Schichten sichtbar zu machen (GUI, Anwendungslogik, Datenhaltung)
    • Vertikale Schichten (Gruppen) und fachliche horizontale Schichten
    • Wer soll und darf wen benutzen?
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Welche Fachlichen Komponenten gibt es beim Designprozess?

A
  • Definition von Fachklassen
    • Jede bisherige Komponente auf Klassenebene runterbrechen
  • Externe Komponenten
    • Externe Schnittstellen wie GUI, Webservices, DB, etc. erfassen
  • Workflows
    • Klassen die für den Ablauf zuständig sind (Controller, Workflow-Komponenten) erfassen
    • Häufig Zusammenhang mit den Use-Cases
  • Gruppen bilden
    • Komponenten in Gruppen einteilen und Beziehungen überlegen
    • Zusammenhängende Fachklassen können meist durch die gleiche Workflow-Komponente behandelt werden
  • Sonstige Logik und Hilfskomponenten erfassen
  • Erste Beziehungen erfassen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Im komponentenspezifischen Klassenmodell werden die einzelnen Entitäten genau ausgearbeitet, d. h. spezifiziert. Dazu geht man in einzelnen Schritten vor:
Welche Schritte gibt es dabei ?

A

Komponentenspezifisches Klassenmodell

1. Identifikation aller endgültigen Fachklassen

  • Einzelnen Entitäten/Klassen werden genau ausgearbeitet
  • Alle Klassen definieren (Fachklassen und auch umliegende und weitergehende)

2. Assoziationen zwischen Klassen definieren

  1. Was repräsentieren die Klassen?
  2. Welche Zustände können die Klassen annehmen?

3. Exakte Komponentenspezifikation

  • Textuell oder per UML alle Attribute und Methoden aufschreiben
  • Wenn alles definiert ist, kann der Entwickler mit der Implementierung beginnen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Welche Mittel gibt es um ein gelungenes Design zu erzeugen? (Designprinzipien)

A
  • Berücksichtigung des Umfelds
    • Aufgabe, Team, Mittel, Rahmenbedingungen, Standards, etc.
  • Einteilung in Pakete
    • Paketstruktur erzeugen
    • Technische, fachliche oder andere Einteilungen nutzen z. B. durch Namensräume darstellen
  • Einteilung in Klassen
    • Welche Klasse in welchem Paket?
    • Klassen in sich wohl strukturiert?
    • Erledigt die Klasse nur ihre eigene Aufgabe?
  • Interaktion der Pakete
    • Wie kommunizieren die Pakete miteinander?
    • Wer mit wem?
    • Proxy, etc?
  • Interaktion der Klassen
    • Design Patterns?
    • Dependency-Injection Framework?
  • Design der Klasse selbst
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Was versteht man unter dem DRY-Prinzip?

A

DRY - Dont Repeat Yourself

  • Gleicher oder ähnlichen Code zusammenfassen
  • Copy Paste vermeiden
  • Wartbarer / weniger Fehler
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was versteht man unter dem SRP-Prinzip?

A

SRP - Single Responsibility Design

  • Klassen sollen nur eine Aufgabe übernehmen
  • Lose Kopplung
  • Vermindert Änderungsempfindlichkeit
  • Separation of Concerns
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Was ist unter Information Hiding (Tell, don’t ask) zu verstehen?

A
  • Details einer Implementierung bleiben nach außen hin verborgen
  • dadurch kann die innere Implementierung eines Moduls modifiziert werden, ohne das andere Module davon betroffen sind
  • hat die Verminderung der Abhängigkeiten zwischen Modulen zur Folge und unterstützt damit eine diesbezüglich bessere Wartung und Pflege von Modulen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Warum eigenen sich Dynamische Modelle zum Entwerfen und Modellieren besonders?

A

Veranschaulichung von Abläufen für die Teammitglied

  • Dynamische Diagramme veranschaulichen Sachverhalte und Zusammenspiel von Komponenten
  • Bsp. Zusammenarbeitsmodelle, Sequenz- und Kollaborationsdiagramme

Einfachere Überprüfung der Vollständigkeit

  • Durch das runterbrechen von Aktionen (Top-Down) werden Abläufe und Aktionen in Einzelteile und Unterabläufe aufgeteilt
  • Dadurch ist es leichter möglich, fehlende Komponenten zu identifizieren
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Kriterien bei Komponentenschnittstellen ?

A
  • Geheimnisprinzip
    • Der Nutzer muss nur das Interface kennen und kann sich darauf verlassen das dieses erfüllt wird
    • Schnittstellenmethoden ändern sich i.d.R. nicht sehr häufig
  • Zuständigkeit
    • Klare Zuständigkeitsteilung
    • Nutzer verlässt sich auf Korrektheit, Vollständigkeit und das „nicht ändern” der Schnittstelle
    • Anbieter kümmert sich nur um die Erfüllung der Schnittstelle
  • Testbarkeit
    • Schnittstellen können getestet werden
    • Der Nutzer kann sich dadurch darauf verlassen das die Schnittstelle erfüllt wird
    • TDD: Schnittstellen werden von außen nach innen definiert
  • Möglichst immer gegen ein Interface programmieren
  • Nie die Klasse instanziieren, sondern immer die Klasse aus dem Interface herstellen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Schnittstellen der Komponentengruppen

A

Schnittstellen der Komponentengruppen

  • Gute Architektur vermindert insgesamt die Abhängigkeiten
  • Komponenten in Gruppen (Packages) zusammenfassen und versuchen die Zugriffe zwischen den Packages zu minimieren
    • kann erreicht werden durch das Einführen von Proxies für Packages
    • Proxy stellt eine Möglichkeit da den „inhalt“ des Packages zu kapseln und über den Stellvertreter darauf zuzugreifen
  • „losere” Kopplung (Inhalt des Packages kann geändert werden, solange der Zugriff auf den Proxy bestehen bleibt)
17
Q

Externe Schnittstellen

A

Externe Schnittstellen

  • Große Systeme interagieren meist irgendwie mit ihrer Umwelt
  • GUI, XML aus anderen Quellen, Dokumente, etc.
  • Schnittstellen möglichst von Anfang im Blick haben
18
Q

Welche Testdefinitionen müssen entwickelt werden?

A
  • Tests für Anwendungsfälle
    • Welche Eingaben, Operationen und Ausgaben gibt es?
    • Ergebnisse ganzer Komponentenabläufe testen
  • Klassentests
    • Test der Methoden innerhalb der Klassen (UnitTests)
    • Randbedingungen in den Testplan mit aufnehmen (Alter > 0)
  • Tests externer Schnittstellen
    • Werden meist unterschätzt
    • Kleine Prototypen die früh Schwachstellen aufzeigen
    • Verhindert spätere Fehler in der Implementierung etc.
  • Klasseninterne Tests
    • Vorbedingungen
    • Rückgabewerte
    • Nachbedingungen
  • Testautomatisierung vorbereiten
    • Tests sollten soweit wie möglich automatisiert werden
    • lm einfachsten Fall durch Buildsprachen wie Ant, Maven
    • lm besten Fall durch Continous Integration
19
Q

Was muss bei der Definition der Attribute berücksichtigt werden?

A
  • Am Ende der Designphase werden die Attribute der Komponenten/Klassen definiert
  • Folgendes ist zu berücksichtigen:
    • Sind alle Attribute erfasst?
    • Ist das Attribut ein Grundtyp oder doch besser ein Objekt einer anderen Klasse
    • Ist es eine Collection? Wenn ja, welche ist am besten geeignet
    • Stimmen die Zuständigkeiten? Sollte das Attribut ggf. in eine andere Klasse?
    • Gibt es Zusicherungen für jedes Attribut?
20
Q

Was ist wichtig beim GUI Design ?

A

GUI Design

  • Umfassende Anwendungen haben mindestens drei Eingabemöglichkeiten
    • Rich-Client auf dem Desktop
    • Thin-Client z. B. Webanwendung
    • Mobiler Client
    • Abbruchmöglichkeiten bieten
    • Wo bin ich wann in der Anwendung (Breadcrumb)
    • sind alle Use-Cases abgebildet?
    • Kurze Wege, Konsistenz, etc.
    • Default- und Grenzwerte für Felder
21
Q

Wie viel Design ist nötig?

A

Wie viel Design ist nötig?

  • Kein Design, lieber iterativ das Designentwickeln (direkt am Code)
    • Vorteile
      • Kein initialer Aufwand
      • Besser auf Situationen reagieren die erst während der Entwicklung auftreten
    • Nachteile
      • Zeitverschwendung mit ausprobieren, obwohl es bereits Best Practices gibt
      • Bestehende bewährte Architekturen werden ignoriert
  • Viel Design, keine Versuchsentwicklung
    • Vorteile
      • Schneller einen definierten Stand erreichen
      • Keine Zeit mit Live-Erfahrungen „verschwenden“
    • Nachteile
      • Viel initiale Papierarbeit
      • Ggf. wird eine nicht optimale Lösung erzeugt, da das Design fest steht
  • Von der Aufgabenstellung abhängig
  • Vom Team, Auftraggeber, Finanzen abhängig
  • Referenzimplementierungen sollten genutzt werden
  • Gibt es keine sollte ein Mix aus beiden Vorgehen meist das Beste sein
  • „Good Enough Design” (Nicht alles bis aufs letzte Detail ausgearbeitet, so „das es reicht”)