TU Wien:Software Engineering VU (Christaki)/Exam UML Group A 2023W (2023-11-17)
- Bewertung richtig/falsch Fragen: korrekt beantwortet => +1 Pkt; falsch beantwortet => -1 Pkt; nicht beantwortet => 0 Pkt;
- Fragen zu UML beziehen sich ausschließlich auf den UML2-Standard bzw. auf den verwendeten Foliensatz, Spezifika bestimmter UML-Werkzeuge sind für die Beantwortung nicht relevant.
1) Klassendiagramm und Objektdiagramm (10 Punkte)[Bearbeiten | Quelltext bearbeiten]
Gegeben ist folgendes Klassendiagramm sowie ein davon instanziiertes Objektdiagramm. Bei der Modellierung des Objektdiagramms wurden einige Modellierungselemente teilweise falsch verwendet. Streichen Sie im Objektdiagramm so viele Assoziationen bzw. Objekte wie notwendig, damit das Objektdiagramm mit dem Klassendiagramm konform ist.
Hinweis 1: Das Klassendiagramm wurde korrekt modelliert!
Hinweis 2: Minuspunke falls Elemente unnötig gestrichen werden.
2) Entsprechen die folgenden Nachrichtenfolgen dem gegebenen Sequenzdiagramm? (5 Punkte)[Bearbeiten | Quelltext bearbeiten]
a --> b --> e --> f --> c --> d | ☐ richtig | ☐ falsch |
b --> a --> d --> c --> f --> e --> g | ☐ richtig | ☐ falsch |
a --> b --> e --> c --> d --> f --> g | ☐ richtig | ☐ falsch |
a --> b --> c --> f --> d --> e --> g | ☐ richtig | ☐ falsch |
a --> b --> e --> f --> c --> d --> g | ☐ richtig | ☐ falsch |
3) Fehlersuchbild Klassendiagramm (10 Punkte)[Bearbeiten | Quelltext bearbeiten]
Gegeben ist folgendes UML Klassendiagramm. Bei der Modellierung sind leider einige Fehler passiert. Finden Sie die Fehler und korrigieren Sie diese im Diagramm.
Von Küchengeräten werden der Name und die Leistung gespeichert. Es gibt viele Arten von Küchengeräten, unter anderem Dampfgarer, Mikrowellen und Dunstabzüge. Von Dampfgarern wird der Typ des Dampfgarers gespeichert und ob er drucklos arbeitet oder nicht. Von Mikrowellen wird gespeichert, ob sie eine Auftaufunktion haben oder nicht. Von jeder Küche wird die Adresse gespeichert, wo diese steht. In jeder Küche gibt es entweder einen Dampfgarer oder eine Mikrowelle. Von Dunstabzügen wird die Bezeichnung und die Marke gespeichert - in unserem Modell unterscheiden wir zwischen den Marken AEG, PKM und NEFF. Jede Küche hat genau einen Dunstabzug, der fix eingebaut wird. Ein Dunstabzug gehört zu genau einer Küche. In einer Küche werden mehrere Speisen zubereitet, eine Speise kann wiederum in mehreren Küchen zubereitet werden. Von jeder Speise wird der Name gespeichert. Zusätzlich wird noch das Datum gespeichert, wann eine bestimmte Speise in einer bestimmten Küche zubereitet wurde.
4) Klassendiagram aus Code (18 Punkte)[Bearbeiten | Quelltext bearbeiten]
Gegeben ist der unten ausgeführte Codeausschnitt. Darunter sehen Sie einen ersten Entwurf für ein passendes UML Klassendiagramm, das semantisch dem Code entspricht. Dabei wurde aber einiges vergessen. Ergänzen Sie das gegebene Klassendiagramm, sodass alle Fragmente des Codes entsprechend abgebildet sind. Bilden Sie Referenzen durch Assoziationen ab.
class Werkstatt {
public String bezeichnung;
}
abstract class Fahrzeug {
private String bes;
public Werkstatt sw;
private Werkstatt[] repW;
public String getBes() {
return bes;
}
public void setBes(String bes) {
this.bes = bes;
}
}
class Auto extends Fahrzeug {
public String name;
private Dachbox[] d;
}
class Dachbox {
private boolean schloss;
private Typ art;
// Key: Auto (Typ: Auto)
// Value: datum (Typ: Date)
public Hashtable Benutzung;
}
enum Typ {
fix,
reling;
}
5) Klassendiagramm aus Objektdiagramm (20 Punkte)[Bearbeiten | Quelltext bearbeiten]
Gegeben ist folgendes Objektdiagramm. Entwerfen Sie ein Klassendiagramm, das zu diesem Objektdiagramm konform ist. Wählen Sie die Kardinalitäten an den Assoziationsenden genau. Sie können davon ausgehen, dass das Objektdiagramm die minimal und die maximal mögliche Anzahl an Beziehungen mit Objekten einer anderen Klasse darstellt. Der Name jeder Beziehung ist im Klassendiagramm eindeutig (es sollen also keine Beziehungen denselben Namen haben). Weiters sollen mögliche Generalisierungen bzw. XOR-Beziehungen erkannt werden.
6) Sequenzdiagramm aus Code (18 Punkte)[Bearbeiten | Quelltext bearbeiten]
Stellen Sie die Abläufe von folgendem Programm mittels Sequenzdiagramm dar. Modelliren Sie auch allfällige Antwortnachrichten. Sie könnem davon ausgehen, dass alle nicht explizit deklarieren Variablen bereits deklariert und initialisiert sind. "..." markiert vernachlässigte Codeteile, die nicht modelliert werden müssen.
class Main {
...
Brain b = new Brain();
do {
int x = b.doIt(num);
print(x);
num--;
} while (num > 10);
Calc c = new Calc();
int s = c.getIt(num, b);
...
private void print(int s) {...}
}
class Calc {
public String getIt(int i, Brain b) {
if (i == 5) {
b.repeat(i + 1);
}
return i;
}
}
class Brain {
...
public int doIt(int value) {
int val;
...
return val;
}
public void repeat(int j) {
...
}
}
7) Welche Aussagen treffen auf folgendes Klassendiagramm zu? (5 Punkte)[Bearbeiten | Quelltext bearbeiten]
2 Objekte von A stehen in Beziehung zu 5 Objekten von F. | ☐ richtig | ☐ falsch |
Ein Objekt von A kann mit sich selbst in Beziehung stehen. | ☐ richtig | ☐ falsch |
Im System können mehr E als D enthalten sein. | ☐ richtig | ☐ falsch |
Ein Objekt von C kann direkt auf die Variable y zugreifen. | ☐ richtig | ☐ falsch |
Ein Objekt von H muss in Beziehung zu mindestens einem Objekt von G stehen. | ☐ richtig | ☐ falsch |
8) Sind folgende Aussagen über das gegebene Anwendungsfalldiagramm richtig oder falsch (das Diagramm wurde streng nach UML 2.0-Standard modelliert)? (10 Punkte)[Bearbeiten | Quelltext bearbeiten]
An der Ausführung von F sind zwei Akteure beteiligt. | ☐ richtig | ☐ falsch |
Der Akteur Y kann den Use Case D ausführen. | ☐ richtig | ☐ falsch |
Das Verhalten von B kann in A eingefügt werden. | ☐ richtig | ☐ falsch |
Y erbt alle Assoziationen von X und daher auch alle Assoziationen von Z. | ☐ richtig | ☐ falsch |
Immer wenn J ausgeführt wird, wird auch K ausgeführt. | ☐ richtig | ☐ falsch |
Der Akteur V kann C alleine ausführen. | ☐ richtig | ☐ falsch |
K kann nur im Zuge von J ausgeführt werden. | ☐ richtig | ☐ falsch |
Die Use Cases G und J können beide als Basis Use Case für K fungieren. | ☐ richtig | ☐ falsch |
Der Akteur V kann B ausführen. | ☐ richtig | ☐ falsch |
J erweitert K. | ☐ richtig | ☐ falsch |
9) Fehlersuchbild Aktivitätsdiagramm (8 Punkte)[Bearbeiten | Quelltext bearbeiten]
Gegeben ist folgendes UML Aktivitätsdiagramm. Bei der Modellierung sind leider einige syntaktische/logische Fehler passiert. Korrigieren Sie diese im Diagramm so, dass das Diagramm syntaktisch und logisch korrekt ist.
(Hinweis: Es gibt jeweils mehrere Möglichkeiten, das Diagramm zu verändern, um einen Fehler zu beseitigen. Welche Sie wählen bleibt Ihnen überlassen, solange der Ablauf auch semantisch sinnvoll bleibt und Sie keine Aktionen "auslassen".)
10) Fehlersuchbild Anwendungsfalldiagramm (8 Punkte)[Bearbeiten | Quelltext bearbeiten]
Das folgende Anwendungsfalldiagramm wurde streng nach UML 2.0-Standard modelliert. Bei der Modellierung sind leider einige Fehler passiert. Finden Sie die Fehler und korrigieren Sie sie im Diagramm.
Ein Gärtner und ein Helfer pflanzen gemeinsam eine Blume. Im Zuge desses kann es notwendig sein, dass einer von ihnen ein Loch gräbt. Ein Gärtner mäht den Rasen. Im Zuge dessen muss er die Wiese leerräumen.
11) Aktivitätsdiagramm aus Code (18 Punkte)[Bearbeiten | Quelltext bearbeiten]
Gegeben sei der unten angeführte Pseudocode-Ausschnitt. Modellieren Sie diesen als Aktivitätsdiagramm (nur den Kontrollfluss!). Bilden Sie den Code möglichst genau ab.
Hinweis: Es handelt sich um einen Codeausschnitt. Variablendeklarationen, -initialisierungen, etc. müssen nur modelliert werden, sofern diese auch im Codeausschnitt angeführt sind.
ShellSort(size) {
for (inc = size/2; inc > 0; inc /= 2) {
for (i = inc; i < size; i++) {
j = i - inc;
while (j >= 0) {
if (a[j] > a[j+inc]) {
swap a[j] and a[j+inc];
j -= inc;
} else {
j = -1;
}
}
}
}
}
12) Ereignisfolge (20 Punkte)[Bearbeiten | Quelltext bearbeiten]
Gegeben ist das folgende Zustandsdiagramm:
Vervollständigen Sie die folgende Tabelle, um zu veranschaulichen, welche Zustände und Aktionen bei der folgenden Ereignisfolge vorkommen.
Ereignis | Eingetretener Zustand | x | y | z |
---|---|---|---|---|
Beginn | ||||
e1 | ||||
e2 | ||||
e2 | ||||
e3 | ||||
e1 | ||||
e3 | ||||
e2 |