• Keine Ergebnisse gefunden

Beispiellösung der Probeklausur WS10 / 11

N/A
N/A
Protected

Academic year: 2021

Aktie "Beispiellösung der Probeklausur WS10 / 11"

Copied!
8
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

TU Berlin Fakultät IV

Institut für Softwaretechnik und Theoretische Informatik

Beispiellösung der Probeklausur WS10 / 11

19. Februar 2011

(2)

Teil I

Teil – A

Analyse & Entwurf

1. Klassenmodell des Gegenstandsbereichs

Tourist Website LoggtSichEin

Findet Bett

Bucht Bucht

ersterTag letzterTag

Wohnung Gastgeber

IstIn

BietetAn

Hat Sekretärin

Bürorechner KommuniziertMit

Benutzt TrägtEin

FügtHinzu Kennt 0..*

1..*

0..*

1..*

0..1 1 0..*

1..*

0..*

1..* 0..*

0..*

0..*

1 1..*

1..*

1 1..* 1

*

1..* 1

1

* 1..*

1 0..*

1..*

0..1 0..*

1..*

0..1 1 0..* / 1..*

0 1 0..1

* 1..*

2. Use-Case-Diagramm

Sekretärin

Tourist Pflege von

Unterkunftsangeboten

Bettbuchungen

Bettrecherche

Touristenregistrierung

Beispiellösung Analyse & Entwurf Seite 1 /7

(3)

3. Systemklassenmodell / Entwurfsklassenmodell

Sekretärin

Tourist

<<boundary>>

Bürorechner

<<boundary>>

Website <<control>>

TouristenSteuerung

<<control>>

BüroVerwaltung

use use

<<entity>>

Touristendaten <<entity>>

Bett

<<entity>>

Wohnung

<<entity>>

Reservierung ersterTag letzterTag Benutzt

Informiert

Prüft Nutzt

Kennt

IstIn

<<entity>>

Gastgeber

KommuniziertMit Hat

Tätigt Betrifft

4. Operationsschema bett_buchen

Op. = bett_buchen

Desc. = Ein Tourist bucht ein bestimmtes Bett für einen angegebenen Zeitraum.

Vorbedingungen:Es wird davon ausgegangen, dass der Tourist mit der KennungTKennungim System bekannt ist und auf der Webseite eingeloggt ist.

Die Existenz eines Bettes mit der IdentifikationBettIDwird vorausgesetzt.

Input = TKennung : String, BettID : int, ab : Date, bis : Date Reads = ts : TouristenSteuerung, Kennt, Bett, Touristendaten,Prüft

b : Bettwithb.id = BettID∧(b,ts)∈Kennt

t : Touristendatenwitht.kennung = TKennung∧(ts,t)∈Prüft∧t.eingeloggt Changes = Reservierung,Tätigt, Betrifft,r: Reservierungtype

Sends = Tourist{buchung_bestätigt, buchung_unmöglich}, Sekretärin{buchung_gemeldet}

Pre = implicit

Post = let

bettreservierung == {r: Reservierung | (r,b) : Betrifft}

überscheidene_buchungen ==

{r:bettreservierungen | (ab≤r.ersterTag≤bis)∨(ab≤r.letzterTag≤bis)}

∨(r.ersterTag≤ab∧bis≤r.letzterTag);

buchung_möglich == #überscheidene_buchungen = 0∧ab≤bis;

buchung_nicht_möglich ==¬ buchung_möglich;

(buchung_nicht_möglich⇒

is_sent{buchung_unmöglichno_effect)∧ (buchung_möglich⇒

is_sent{buchung_bestätigtno_effect)is_sent{buchung_gemeldetr_new)∧ r.ersterTag’ = ab∧r.letzterTag’ = bis∧

Tätigt’ = Tätigt∪(t,r)∧Betriff’ = Betrifft∪(r,b))

(4)

5. Kommunikationsdiagramm bett buchen

Tourist

Sekretärin

<<control>>

TouristenSteuerung b : Bett

<collection> : Touristendaten

: Touristendaten

<collection> : Bett

: Bett 1. bett_buchen(TKennung,BettID,ab,an)

7. [rm] sent_to{reservierung_bestätigt}

9. [not rm] sent_to{reservierung_unmöglich}

<collection> : Reservierung

4. rm := reservierungMöglich(ab, bis)

6. [rm] add(r)

: Reservierung 4.1 rm = sucheÜberschneidungen(ab, bis)

6.1 add(r)

4.1.1 getErsterTag()

4.1.2 getLetzterTag()

r : Reservierung

5. [rm] r = create(ab,bis,t)

2. t = getTourist(TKennung)

2.1 getKennung()

3. b = getBett(BettID)

3.1 getID()

<<control>>

Büroverwaltung 8. [rm] reservierungMelden()

8.1 sent_to{reservierung_gemeldet}

6. Implementierungsklassenmodell

Bett -id: int

-Reservierung: <*> reservierungen +getID(): int

+addReservierung(r:Reservierung): void

+reservierungMöglich(anfang:Datum,ende:Datum): boolean -sucheÜberscheidungen(anfang:Datum,ende:Datum)

BettCollection -Bett: <*> betten +getBett(bid:int): Bett

Touristendaten -kennung: String -eingeloggt: boolean +getKennung(): Sting

Reservierung -ersterTag: Date

-letzterTag: Date -t: Tourist

+create(anfang:Date,ende:Date,tou:Touristendaten) +getErsterTag(): Date

+getLetzterTag(): Date

TouristenSteuerung -touristen: <*>Touristendaten

-betten: BettCollection -bv: Büroverwaltung

+bettBuchen(name:String,b:Bett,anfang:Date,ende:Date): void +getTourist(name:String): Tourist

Büroverwaltung +reservierungMelden(): void

Beispiellösung Analyse & Entwurf Seite 3 /7

(5)

Teil II

Teil – B Object-Z

Globale Definitionen

Nachricht::=Karte_ausgelegt|keine_Karte_ausgelegt|Karte_eingeworfen Farbe::=rot|gruen|blau|gelb

Zahl::= 1. . .10

Karte farbe:Farbe zahl:Zahl

a) Spieler

Spieler

(INIT,hand,Karte_einwerfen,Spielzug_durchfuehren) hand:FKarte

INIT

#hand= 8 Karte_auslegen

∆(hand) liegt? :Karte auslegen! :Karte spieler! :Spieler n! :Nachricht

#hand>0 redundant

∃x:hand|x.farbe=liegt?.farbe∨x.zahl=liegt?.zahl•auslegen! =x hand0=hand\ {auslegen!}

spieler! =self n! =Karte_ausgelegt

Karte_auslegen_nicht_moeglich liegt? :Karte

auslegen! :Karte spieler! :Spieler n! :Nachricht

#hand>0 redundant

(6)

Karte_ziehen

∆(hand) liegt? :Karte

#hand>0 redundant

∀x:hand•x.farbe6=liegt?.farbe∧x.zahl6=liegt?.zahl

∃k:Karte|k∈/hand•hand0=hand∪ {k}

(alternativ: #hand0 = #hand+ 1∧hand⊂hand0) Spielzug_durchfuehren=b Karte_auslegen[]

Karte_zieheno9(Karte_auslegen_nicht_moeglich[]Karte_auslegen) Karte_einwerfen

∆(hand) liegt? :Karte auslegen! :Karte spieler! :Spieler n! :Nachricht

#hand>0 redundant

∃x:hand|x.farbe=liegt?.farbe∧x.zahl=liegt?.zahl•auslegen! =x hand0=hand\ {auslegen!}

spieler! =self

n! =Karte_eingeworfen

b) Uno-Spiel

UNO_Spiel

reihenfolge:N7 Spieler liegt:Karte

dran:dom reihenfolge beendet:B

∀n:N•n<#reihenfolge⇒n∈dom reihenfolge (alternativ: #reihenfolge=max(dom reihenfolge) + 1 bzw.dom reihenfolge= 0. . .#reihenfolge−1)

INIT

liegt.farbe=rot

∀sp:ran reihenfolge•sp.INIT dran= 0

¬beendet liegende_Karte liegt! :Karte

¬beendet liegt! =liegt

Beispiellösung Object-Z UNO Seite 5 /7

(7)

Karte_ersetzen

∆(liegt)

auslegen? :Karte

¬beendet

liegt0 =auslegen?

naechster_Spieler

∆(dran)

spieler? :ran reihenfolge

#spieler?.hand>0

¬beendet

∃n:N•(

reihenfolge n=spieler?∧ n= #spieler−1⇒dran0= 0∧ n<#spieler−1⇒dran0=n+ 1) Spiel_beenden

∆(beendet) spieler? :Spieler

¬beendet

#spieler?.hand= 0 beendet0

Spielzug_abeschliessen=b Karte_ersetzeno9(naechster_Spieler[]Spiel_beenden) Spielzug=b

liegende_Kartek

reihenfolge(dran).Spielzug_durchfuehren

[alternativ:[]sp:Spieler|reihenfolge(dran) =sp•sp.Spielzug_durchfuehren]

[] ([]sp:ran reihenfolge•sp.Karte_einwerfen)

o

9Spielzug_abschliessen

(8)

2) Statechart

Aus entry: x:=0

An power

power [x=0]

Reinigung

exit x:= 0 exit sauber

danachAus

danachEin [1 minute in danachAus]

power [x>0]

rein

[1 minute in danachEin]

Kaffezubereitung

Kaffe mahlen

Wasser zuführen

Kaffee ausgeben

Kaffee weg [5 sec in

Kaffeeweg] start [anzahl<80 AND in w_aus]

/ anzahl:=anzahl+1;ub=false

[10 sec in Kaffee mahlen]

[10 sec in Wasser zuführen]

[10 sec in Kaffee ausgeben]

H

Unterbrochen

Steuerung

start OR [20sec in Unterbrochen]

stopp [ub=false]

/ ub:= true

Reinigungsstandanzeige

Wasserstandanzeige

rot gelb inaktiv

w_an w_aus

wasserstand < WasserMin wasserstand >= WasserMin sauber

sauber

anzahl = 80 anzahl >= 50

Beispiellösung Statechart Seite 7 /7

Referenzen

ÄHNLICHE DOKUMENTE

Du hast 10 Kondensatoren mit einer Kapazität von je 2 Farad, möchtest aber ein elektrisches Bauteil herstellen, welches eine Kapazität von 5 Farad aufweist. a)

Du hast 10 Kondensatoren mit einer Kapazität von je 2 Farad, möchtest aber ein elektrisches Bauteil herstellen, welches eine Kapazität von 5 Farad aufweist. a)

Schreibe sie anschließend mit Artikel (Begleiter) in dein Heft3. Verbinde die Silben

• Aufgabe 10-16 sind komplexe Aufgaben, welche mehrere Methoden kombinieren. • Aufgaben 17 &amp; 18 sind Aufgaben, welche bestimmtes Wissen abfragen. • Der Umfang der

Geben Sie für die folgenden Aufrufe jeweils an, ob sie definiert sind, und wenn ja, in welcher Klasse die aufgerufene Methode definiert wurde:. •

[r]

[r]

Durchsuchen Sie anschließend diesen Bereich mittels bin¨arer Suche, wobei in jedem Schritt die linke und rechte Grenze sowie der Index des zu pr¨ufenden Elements anzugeben