






























Besser lernen dank der zahlreichen Ressourcen auf Docsity
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Prüfungen vorbereiten
Besser lernen dank der zahlreichen Ressourcen auf Docsity
Download-Punkte bekommen.
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Community
Finde heraus, welche laut den Docsity-Nutzern die besten Unis deines Landes sind
Kostenlose Leitfäden
Lade unsere Leitfäden mit Lernmethoden, Hilfen zur Angstbewältigung und von Docsity-Tutoren erstellte Tipps zum Verfassen von Haus- und Abschlussarbeiten kostenlos herunter
Art: Übungen
1 / 38
Diese Seite wird in der Vorschau nicht angezeigt
Lass dir nichts Wichtiges entgehen!
Sonderangebot
VU Objektorientierte Modellierung Ubung 1: Klassendiagramm¨ 188.391, SS2018 , MUSTERL ¨OSUNG Ubungsgruppen: 12.03.2018 - 16.03.2018¨
Hinweise:
Aufgabe 1: Klassendiagramm - Theoriefragen 1
Wiederholen Sie das Kapitel aus der Vorlesung, das sich mit dem Klassendiagramm besch¨aftigt.
a) Erl¨autern Sie die Notation einer Klasse. Gehen Sie dabei auf alle Details ein. Zur Erl¨auterung dieser De- tails geben Sie ein Beispiel f¨ur eine konkrete Klasse an. (Es ist nicht das Ziel, m¨oglichst viele Attribute und Operationen anzugeben, sondern mit Hilfe weniger Attribute und Operationen s¨amtliche Notati- onsm¨oglichkeiten aufzuzeigen.)
b) Erl¨autern Sie die Notation eines Objekts. (Sie sollten in der Lage sein, ein Beispiel-Objekt f¨ur die Klasse aus Aufgabe a) zu modellieren, auch wenn a) von jemand anderem gel¨ost wurde.)
c) Erl¨autern Sie alle Notationsm¨oglichkeiten f¨ur eine Assoziation anhand eines konkreten Beispiels.
d) Illustrieren Sie den Unterschied zwischen 1:1, 1:n und n:m Assoziationen anhand eines Objektdia- gramms.
Aufgabe 2: Klassendiagramm - Theoriefragen 2
Wiederholen Sie das Kapitel aus der Vorlesung, das sich mit dem Klassendiagramm besch¨aftigt.
a) Was ist eine Assoziationsklasse? Erkl¨aren Sie die Notation anhand eines konkreten Beispiels. Wann ist es sinnvoll, eine solche einzusetzen?
b) Beschreiben Sie den Unterschied zwischen starker und schwacher Aggregation. Erkl¨aren Sie die Notation jeweils anhand eines konkreten Beispiels.
c) Was ist eine Generalisierung, was versteht man unter Mehrfachvererbung und was ist eine abstrakte Klasse? Erl¨autern Sie die Notation dieser Konzepte anhand eines oder mehrerer Beispiele.
Aufgabe 3: Einleitende Beispiele, Teil 1
Modellieren Sie die geschilderten Sachverhalte und treffen Sie realistische Annahmen wo n¨otig:
a) Eine Bibliothek hat einen Namen und besteht aus mehreren B¨ucherregalen. Jedes Regal hat eine Bezeich- nung und beinhaltet mehrere B¨ucher, deren Titel gespeichert werden. Ein Buch besteht aus mehreren Seiten, deren Nummer und Wortanzahl gespeichert werden.
Basiss tein legokompatibel :boolean
{abstract} Konstruktionsstein
Tier reiten :boolean
Platte laenge :double breite :double
Mensch kopfDrehen :boolean
Schiene laenge :double
Duplo-Teil bezeichnung :String farbe :String noppenzahl :int
Bestellung adresse :String preis :double
Restaurant name :String adresse :String
Pizzaria ofentyp :Typ
«enumeration» Typ holz stein
Kundin kNr :int
Bibliothek name :String
Regal bezeichnung :String
Buch titel :String
Seite nummer :int 0,1 * (^1) * wortzahl :int
0..1 *
b) Von jedem Duplo-Teil wird die Bezeichnung, die Farbe und die Anzahl der Noppen gespeichert. Es gibt un- ter anderem folgende Arten von Duplo-Teilen: Basissteine, Konstruktionssteine, Tiere und Menschen. Bei einem Basissteinen wird gespeichert, ob dieser zum (klassischen) Lego kompatibel ist, bei jedem Mensch wird gespeichert, ob er/sie den Kopf drehen kann oder nicht. Bei den Tieren wird gespeichert, ob oben- drauf ein Mensch oder ein weiteres Tier reiten kann. Es gibt genau zwei Arten von Konstruktionssteinen, Schienen – von ihnen wird die L¨ange gespeichert – und Platten, von denen L¨ange und Breite gespeichert werden.
Basiss tein legokompatibel :boolean
{abstract} Konstruktionsstein
Tier reiten :boolean
Platte laenge :double breite :double
Mensch kopfDrehen :boolean
Schiene laenge :double
Duplo-Teil bezeichnung :String farbe :String noppenzahl :int
Bestellung adresse :String preis :double
Restaurant name :String adresse :String
Pizzaria ofentyp :Typ
«enumeration» Typ holz stein
Kundin kNr :int
Bibliothek name :String
Regal bezeichnung :String
Buch titel :String
Seite nummer :int 0,1 (^) * 0..1^ * (^1) * wortzahl :int
{non-unique}
{non-unique}
c) Ein Restaurant hat mehrere Kundinnen die wiederum in mehreren Restaurants Essen bestellen k¨onnen. Von jedem Restaurant werden Name und Adresse gespeichert. Zus¨atzlich wird f¨ur jede Bestellung, die eine Kundin in einem Restaurant macht, die Lieferadresse und der Preis gespeichert. Von jeder Kundin wird die Kundinnen-Nummer gespeichert. Es gibt eine spezielle Art Restaurant, n¨amlich die Pizzaria. Von dieser wird zus¨atzlich der Ofentyp gespeichert, den sie zum Herstellen der Pizzen verwendet. Es gibt genau zwei verschiedene ¨Ofen, n¨amlich Holzofen und Steinofen.
Basiss tein legokompatibel :boolean
{abstract} Konstruktionsstein
Tier reiten :boolean
Platte laenge :double breite :double
Mensch kopfDrehen :boolean
Schiene laenge :double
Duplo-Teil bezeichnung :String farbe :String noppenzahl :int
Bestellung adresse :String preis :double
Restaurant name :String adresse :String
Pizzaria ofentyp :Typ
«enumeration» Typ holz stein
Kundin kNr :int
Bibliothek name :String
Regal bezeichnung :String
Buch titel :String
Seite nummer :int 0,1 * 0..1^ * (^1) * wortzahl :int
{non-unique}
{non-unique}
Aufgabe 5: Klassendiagramm lesen - Wahr oder falsch?
Es ist folgendes UML-Modell gegeben:
E
{abstract} D
G
F
C
J
A
B
{XOR}^ H
K
R
1..*
1
2
1
0..2^ *
1
1..*
3 2
Welche Aussagen treffen zu? Begr¨unden Sie Ihre Antwort!
Ein Objekt von E kann direkt auf die Variable x zugreifen. nein Ein Objekt von C steht in Beziehung zu genau einem Objekt von A und genau zwei Objekten von B.
nein
Ein Objekt von E steht in Beziehung zu genau einer direkten Instanz von D. nein Ein Objekt von R kann mit sich selbst in Beziehung stehen. ja Die Raute bei E wird als starke Aggregation bezeichnet. ja
Ein Objekt von G muss in Beziehung zu mindestens einem Objekt von E stehen. ja Ein Objekt von D kann auf die Variable x zugreifen. ja Ein Objekt von E steht in Beziehung zu mindestens einem Objekt von F. nein Im System k¨onnen mehr K als H enthalten sein. ja Ein Objekt von C muss in Beziehung zu einem Objekt von A stehen. nein
Eine Instanz von E kann auf die Variable y zugreifen. ja Ein Objekt von F ist in genau einem Objekt von E enthalten. ja Ein Objekt von A steht mit genau zwei Objekten von B in Beziehung, ein Objekt von B steht mit genau drei Objekten von A in Beziehung.
ja
Wenn eine Instanz von G gel¨oscht wird, werden alle enthaltenen Instanzen von H gel¨oscht. nein Ein Objekt von G steht in Beziehung zu mindestens einem Objekt von J und die Bezie- hung kann von G aus navigiert werden.
ja
Aufgabe 6: Fehler finden
Gegeben ist folgendes UML Klassendiagramm. Bei der Modellierung sind leider einige Fehler passiert. Finden Sie die Fehler und korrigieren Sie diese im Diagramm.
Es gibt genau zwei verschiedene Arten von USI-Kursen, n¨amlich Sportkurse und Sprachkurse. Ein USI-Kurs wird von mehreren Studenten besucht, ein Student kann wiederum mehrere Kurse besuchen. Von jedem Studenten werden Name und Matrikelnummer gespeichert, von jedem Kurs der Name der Lehrerin, die ihn unterrichtet. Außerdem wird f¨ur jeden Kurs gespeichert, ob der jeweilige Student den Kursbeitrag bereits bezahlt hat oder nicht. Von Sportkursen wird zus¨atzlich gespeichert, ob Wettk¨ampfe stattfinden. Ein Sportkurs findet entweder in einer Sporthalle, von der die Gr¨oße gespeichert wird und ob sie einen Holzboden hat, oder in einem Schwimm- bad statt. Jedes Schwimmbad hat eine bestimmte Wassertemperatur. Von Sprachkursen wird das Kursniveau gespeichert. Es gibt genau vier verschiedene Niveaus: A1, A2, B1 und B2. Jeder Sprachkurs beinhaltet mehrere Module, ein Modul kann in mehreren Sprachkursen vorkommen. Von jedem Modul wird das Thema gespeichert. Ein Modul kann sich aus mehreren Teilmodulen zusammensetzen, die jeweils genauso aufgebaut sind und die gleichen Attribute aufweisen wie ein Modul.
:A
:A
:A
:A
:B
:B
:B :C
:C
:B :C
:C :D
:D
:D
:D
x - x - x -
y +f
y +f
z +
z +
z +
(^) z
(^) z
(^) z
z
z
Klassendiagramm 2:
{abstract} BD
B
C
A D
2
z + 0..
x (^) - 0..
+f 0..
y 0..
Aufgabe 2: Vergleich von Klassendiagrammausschnitten
Erkl¨aren Sie den Unterschied zwischen folgenden Klassendiagrammausschnitten: a)
A B A B
b)
A B A B
c)
Bibliothek *^ * Buch Bibliothek^1 * Buch
d)
A B A B
C
C
e)
A
C
B A B
C
f)
A ^ B A 0.. B
g)
A
A1 A2 A
«enumeration» Art A A A
A
Aufgabe 4: Torte
Bilden Sie die folgenden Sachverhalte mit einem Klassendiagramm ab. Ein B¨acker b¨ackt mehrere Torten, eine Torte kann von mehreren B¨ackern gebacken werden. Vom B¨acker werden der Name und das Datum, an dem er die Meisterpr¨ufung bestanden hat, gespeichert. Von jeder Torte werden die Bezeichnung und das Gewicht gespeichert und ob es sich um eine Motivtorte handelt oder nicht. Von jeder Torte die von einem oder mehreren B¨ackern gebacken wird, wir das Datum der Herstellung und die Backtemperatur gespeichert. Dabei wird außerdem ein bestimmtes Rezept verwendet, das mehrere Zutaten in einer bestimmten Menge (Gewicht) ben¨otigt. Eine Torte kann eine Glasur haben, von der die Trockenzeit und die Art der Glasur
Torte bezeichnung :String gewicht :double motivtorte :boolean
Bäcker name :String meisterpruefung :Date
Herstellung datum :Date temperatur :double
Bäckerei name :String adresse :String sauerteig :boolean
Konditorei name :String adresse :String
Hochzeitstorte brautpaar :boolean
Glasur typ :Glasurtyp trockenzeit :int
«enumeration» Glasurtyp zucker schoko
{XOR}
Rezept name :String
Zutat bezeichnung :String
Menge gewicht :double
Designer 1
0..
1 * *
(^) *
1
1
Ausschnitt einer alternativen L¨osung, sodass ein Tortenexemplar von mehreren B¨ackern hergestellt werden kann:
Tortenart bezeichnung :String gewicht :double motivtorte :boolean
Bäcker name :String meisterpruefung :Date
Tortenexemplar datum :Date temperatur :double
1
Aufgabe 5: Klettern I
Bilden Sie die folgenden Sachverhalte mit einem Klassendiagramm ab. Von jedem Kletterer werden Name und Geburtsdatum gespeichert. Es gibt spezielle Kletterer, die Bergf¨uhrer, von denen zus¨atzlich das Datum der Bergf¨uhrerpr¨ufung gespeichert wird und ob diese auch im alpinen Gel¨ande t¨atig sein d¨urfen. Beim Kletterweltcup werden mehrere Kletterrouten benutzt. Von jeder Kletterroute werden die Bezeichnung, der Schwierigkeitsgrad (leicht, mittel, schwer) und der Felstyp (kalk, granit, sandstein) gespei- chert. In einer Weltcupsaison kann eine Kletterroute genau ein Kletterer gewinnen, dieser wird dann als Sieger bezeichnet.
Aufgabe 6: Klettern II
Erweitern Sie das Klassendiagramm aus Aufgabe 5 wie folgt: Eine Kletterroute ist Teil von einem Klettergebiet, ein Klettergebiet beinhaltet mindestens eine Kletterroute. Von jedem Klettergebiet werden Name und Adresse gespeichert. Ein Klettergebiet hat entweder eine Garage oder einen oder mehrere Parkpl¨atze. Von der Garage wird der Preis gespeichert und wie viele Stockwerke sie hat, vom Parkplatz wird gespeichert, ob dieser ¨uberdacht ist. Jedes Klettergebiet wird von mehreren Klettervereinen genutzt, aber nur von einem Kletterverein verwaltet. Vom Kletterverein wird die Bezeichnung gespeichert. Jeder Kletterverein besch¨aftigt mehrere Bergf¨uhrer, ein Bergf¨uhrer kann in einem Kletterverein t¨atig sein. Der F¨orderverein ist ein spezieller Kletterverein, der vom Land gef¨ordert wird. Von ihm wird zus¨atzlich die Adresse und die H¨ohe der F¨orderung gespeichert.
L¨osung f¨ur I und II:
Bergführer prfDat :Date alpin :boolean
Kletterer name :String gebDat :Date
Kletterroute bezeichnung :String schwierigkeitsgrad :Level Felstyp :Typ
Klettergebiet name :String adresse :String
Kletterverein bezeichnung :String
Foerderverein adresse :String foerderung :double
Parkplatz ueberdacht :boolean
Garage preis :double stockwerke :int
«enumeration» Level leicht mittel schwer
«enumeration» Typ kalk granit sandstein
{XOR}
Weltcupsaison jahr :int
1
verwaltet
nutzt
0..
beschaeftigt
1..*
1
Sieger 0..
1
1
1
1..*
Aufgabe 3: Synchrone/Asynchrone Kommunikation
Beschreiben Sie die im folgenden Text vorkommenden Kommunikationsabl¨aufe mittels Sequenzdiagramm.
Sissi und Franz sind am Weg zur Party von Norbert, einem Freund von Franz. Im Auto schreibt Sissi ihrer Mutter noch ein SMS, um sie zu fragen, was sie sich zum Geburtstag w¨unscht. Als sie vor dem Haus von Norbert eintreffen, sehen sie schon Marianne, die mit einer Freundin vor der T¨ur steht und raucht. Sissi schreit Marianne freudig ” Hallo!“ zu, als sie sich mit Franz dem Haus n¨ahert. Es dauert einen Moment, bis Marianne aus ihrem Gespr¨ach aufhorcht und schaut, wer da ihren Namen gerufen hat. Als sie Sissi erblickt, schreit sie erfreut ” Hallo Sissi!“ zur¨uck! Nach einem kurzen Gespr¨ach mit Marianne, betreten Franz und Sissi das Haus. Sie h¨oren die laute Musik, die durch das ganze Haus schallt. Sissi weiß gar nicht, wo genau sie eigentlich herkommt.
Franz trifft seinen alten Freund Max und sie suchen sich ein stilles Pl¨atzchen, um sich ¨uber Ihr aktuelles Leben auszutauschen. Franz erz¨ahlt Max von seinem Unfall mit dem Fahrrad und dieser wiederum berichtet von seiner neuen, großen Liebe, Moritz. Pl¨otzlich l¨autet Maxs Telefon. Es ist Moritz, der etwas verzweifelt wirkt, weil er Max in der Menge nicht mehr finden kann. Max teilt ihm mit, wo er zu finden ist, legt auf und schw¨armt Franz weiter von Max vor.
Sissi schaut auf ihr Handy und stellt fest, die Mailbox meldet 2 vers¨aumte Anrufe, ein SMS von ihrer Mutter und sie findet eine WhatsApp Nachricht von Marianne, die fragt, wo im Haus sie sie finden kann. Pl¨otzlich h¨ort sie laute Sirenen von außerhalb des Hauses und weiß im ersten Moment gar nicht, wo diese herkommen. Im n¨achsten Moment steht die Polizei vor der offenen Haust¨ur und verwarnt Sissi, die gerade bei der T¨ur steht, dass sie die Musik leiser drehen soll, da die Nachbarn sich bereits beschwert haben. Sissi schreit ” Musik leiser“ durchs ganze Haus und hofft, dass jemand sie h¨ort und die Musikanlage leiser dreht. Pl¨otzlich ist es still im Haus, jemand hat die Musikanlage ausgeschaltet. Die Polizei ermahnt Sissi noch einmal, dass sie R¨ucksicht auf ihre Nachbarschaft nehmen sollen und verabschiedet sich. Sissi verspricht das und verabschiedet sich ebenfalls von der Polizei. Alles nochmal gut gegangen!
Achten Sie bei diesem Beispiel besonders darauf, ob die beschriebenen Kommunikationsabl¨aufe synchron oder asynchron sind.
Mailbox
Sissi Franz Mutter Polizei
MusikMusik
Marianne Max Moritz
Hallo!Hallo!
Hallo!Hallo!
SireneSirene
Musik leiser!
Musik leiser!
par
WhatsApp Nachricht
Anruf
SMS
SMS
2 versäumte Anrufe
Verabschiedung
Gespräch beginnen
Hallo Sissi!
Musik leiser drehen!
Gespräch fortsetzen
b) Berechnung von Traces Beschreiben Sie alle m¨oglichen Ereignisfolgen des folgenden Diagramms.
:A :B :C :D :E :F
par
opt [...]
strict
critical a b c d e f g h
M¨ogliche Sequenzen zum Beispiel: b → a → c → d → e c → a → b → d → e NICHT m¨oglich zum Beispiel: a → c → b → d → e
Aufgabe 5: Klassendiagramm aus Sequenzdiagramm
Gegeben ist folgendes Sequenzdiagramm:
x:A y:A z:B k:C m:C
on(19) do x do :"ok" x
on(6) b on(7) b("ok") b :"no" x
on(7) b b("yes") b :"maybe"
Vervollst¨andigen Sie nachfolgendes Klassendiagramm.
A b(String) :String b()
B on(int) do() :String
C x()
i f ( ok == true ) p r i n t ( ” Auszahlung e r f o l g t! ” ) ; // S i c h t b a r am B i l d s c h i r m e l s e p r i n t ( ” Nicht genug Geld v e r f ¨u g b a r! ” ) ; // S i c h t b a r am B i l d s c h i r m
... }
private void p r i n t ( S t r i n g m) {... } }
c l a s s Bankkonto ( ) { private double b a l a n c e ;
public double g e t k t o S t a n d ( ) { return b a l a n c e ; }
public boolean getMoney ( double b e t r a g ) { i f ( b a l a n c e − b e t r a g >= 0 ) { b a l a n c e = b a l a n c e − b e t r a g ; return true ; } e l s e ( b a l a n c e − b e t r a g < 0 ) return f a l s e ; } }
:Main
bApp:BankApp
:Bildschirm bk1:Bankkonto
break [error == true]
loop (0,10) [error == true]
alt [balance - betrag >= 0]
[balance - betrag < 0]
alt [ok == true]
print("Geben Sie Ihren IBAN ein!")
counter=counter+
new
openBankkonto(iban)
ok=getMoney:false
error=start:error
ktoStand=getktoStand:balance
getMoney(betrag)
error=start:error
getktoStand
ok:getMoney:true
start
print("Auszahlung erfolgt!")
run
betrag
print("Nicht genug Geld verfügbar!")
print("Zugriff fehlgeschlagen!")
iban
balance= balance-betrag
bk1=openBankkonto:bankKonto
start
print("Ihr Kontostand: ktoStand Wieviel wollen Sie beheben?")