2. Mod - 2.5 OOD: Klassendiagramme im Detail Flashcards
Was beschreiben Klassendiagramme?
Beschreiben Struktur eines objektorientierten Systems
Warum sollte man sich auf die für den Anwender wesentlichen Klassen beschränken?
da Klassendiagramme der Diskussion mit dem Anwender dienen
Warum müssen Klassendiagramme alle Details enthalten?
Beschreiben vor allem auch die interne Struktur eines Systems als Vorlage für Entwicklung
Klassendiagramme bestehen u.a. aus folgenden Elementen:
Beschreibe diese
Klassen: entstehen indem ähnliche Objekte zusammengefasst werden. Enthalten Attribute und Methoden
Generalisierungspfeile: zeigen von der speziellen auf die allgemeine Klasse (zB Girokonto und Sparkonto auf KONTO)
Assoziationen: stellen eine Beziehung zwischen zwei Klassen dar
Kardinalität: gibt an, wie viele Objekte an einer Assoziation beteiligt sein können
Aggregation: Form der Assoziation, bei der sich ein Objekt der einen Klasse u.a. aus einem Objekt der anderen zusammensetzt (Couch und Tisch zu WOHNZIMMER) - leere Raute
Komposition: Aggregation, bei der ein Objekt untrennbar mit einem Ganzen verbunden ist. Wenn das Ganze aufhört zu existieren, endet auch die Existenz der Teile (Stamm und Ast zu BAUM) - ausgefüllte Raute
Wie wird in der Klassenhierarchie nach einer passenden Methode gesucht?
Unten nach oben
Da geerbte Attribute und Methoden überschrieben werden können
Klassendiagramme bestehen u.a. aus folgenden Elementen:
Klassen Generalisierungspfeilen Assoziationen Kardinalität Aggregation Komposition
Mögliche Fragen zu Erstellung von Klassendiagrammen
Welche Informationen muss das System bereitstellen können?
Klassen: Welche Objekte und Akteure gibt es?
Assoziationen: Welche statischen Regeln gelten für die Beziehungen zwischen Objekten?
Assoziationen: Welche Beziehungen zwischen Klassen bestehen direkt(nicht über eine dritte Klasse)?
Attribute: Wodurch werden Objekte beschrieben?
In welcher Grammatik Form stehen Klassen meistens in Use-Case-Dokumenten?
Im Nomen
Side Info: Nicht jedes Substantive repräsentiert eine Klasse
In welcher Grammatik Form stehen Methoden meistens in Use-Case-Dokumenten?
als Verben
Side Info: Nicht jedes Verb repräsentiert eine Methode
Wie zeigt man in UML Beziehungen zwischen Klassen?
durch Pfeile
In Java nennt man es “Abstract Class”. Wie in UML?
Und wie wird es in UML gezeigt?
Abstract Class (UML) Cursive Class Name (showed in UML)
In Java nennt man es “Relationship”. Wie in UML?
Und wie wird es in UML gezeigt?
Association (UML)
Pfeil mit
In Java nennt man es “Inheritance”. Wie in UML?
Und wie wird es in UML gezeigt?
Generalization (UML)
Pfeil mit Rechteck- (showed in UML)
In Java nennt man es “Aggregation”. Wie in UML?
Und wie wird es in UML gezeigt?
Aggregation (UML
Pfeil mit Rauten-Spitze (showed in UML)
Wodurch zeichnet sich ein gutes Klassendesign aus?
Jede Klasse hat so wenig wie mögliche Gründe sich zu ändern (im besten Fall nur einen einzigen, dass ist aber nicht immer möglich)
wenn von einer potentiellen Änderung sollten so wenig wie möglich Klassen betroffen sein (Im Besten Fall nur eine einzige, aber das ist nicht immer möglich)
Auf Änderungen vorbereitet
Wie kann man Design flexibler machen?
indem Anzahl der Klassen reduziert werden … oder hinzufügt
kommt immer ganz darauf an
Welche zwei Dinge sollte ein guter Entwickler können?
gutes, flexibles Klassendesign finden, das Prinzipien der Objektorientierung folgt
dieses Design mit korrekter UML-Syntax modellieren
Wovon hängt der Detailierungsgrad des Diagramms ab
Vom Zweck
Was sollte man machen, bevor man die Details ausarbeitet?
ein gutes Klassendesign
Was sollten Klassendiagramme enthalten, welche als Vorlage für Entwickler dienen?
Alle relevanten Klassen, Attribute und Methoden
nicht alle Notationselemente müssen enthalten sein
Was ist das einzige was nicht optional ist bei einem Klassendiagramm?
Namen des Attributes
ob Symbole verwendet werden, hängt also wieder vom Einsatzzweck ab
Welche Attribute sollten unterstrichen werden?
Klassenattribute
Was wird nach dem : (Doppelpunkt) angegeben
Der Datentyp
Example:
- Durchschnittsnote : float(idl)
Was kann als Datentyp nach dem Doppelpunkt angegeben werden?
Elementare Datentypen (int, long etc.) Andere Klassen des Diagramms
Example:
- Durchschnittsnote : float(idl)
Was wird nach einem = angegeben?
Defaultwerte
Example:
- Note : float(idl) = 5
Was wird mit / gekennzeichnet?
Attribute, die nicht gespeichert sondern berechnet werden (zB Alter aus dem Geburtsdatum)
Wie wird die Sichtbarkeit eines Attributes gekennzeichnet?
mit folgenden Symbolen \+ # - ~
Was bedeuten die Symbole des Sichtbarkeit eines Attributes
+ public, für alle Klassen sichtbar
# protected, für eigene Erben sichtbar
- private, für andere Klassen unsichtbar
~ package, innerhalb des Paketes sichtbar
Was bedeutet es, wenn die Sichtbarkeit nicht angegeben ist?
Sichtbarkeit ist undefiniert
Wie kann die Attribute angegeben werden?
Form von [4] oder [0..6] oder [1..*]
Wie wird mit Attributen verfahren die eine Assoziation implementieren?
Sie werden meistens weggelassen und die Multiplizität steht dann statt dessen an der Assoziation
Welche Attribute sind wiederum selten mengenwertig?
Attribute denen keine Assoziation entspricht (mit elementaren Datentypen wie long oder char)
Side Note:
Grund wieso dieses Notationselement eher selten Verwendung findet
Was wird geschweiften Klammern wann zugewiesen?
Am Ende der Attributszeile im Klassendiagramm kann dem Attribute in geschweiften Klassen eine Eigenschaft zugewiesen werden
Welche Eigenschaften können geschweiften Klassen zugewiesen werden? Explain them
{readOnly} Attributwert kann nicht verändert werden
{unique} Jeder Attributwert darf bei maximal einem Objekt vorkommen
Wie lautet die Reihenfolge aller Notationselemente für Attribute?
Sichtbarkeit / Name :Typ Multiplizität =Defaultwert {Eigenschaft}
Was ist optional bei Methoden in Klassendiagrammen?
Alles außer dem Namen der Methode, gefolgt von () ist optional.
Side Note:
Welche Symbole man verwendet hängt also auch hier vom Einsatzzweck ab.
Als Vorlage für die Entwickler sollte das Diagramm möglichst wenig Interpretation zulassen