21.01.2015 Aufrufe

¨Ubungen zu ” Modellierung verteilter Systeme“

¨Ubungen zu ” Modellierung verteilter Systeme“

¨Ubungen zu ” Modellierung verteilter Systeme“

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

• Direkte Definition über Ein-/Ausgabe: Die Funktion wird rekursiv über das Muster der Eingabebelegungen<br />

definiert.<br />

• Definition unter Verwendung lokaler Zustände: Die Funktion wird rekursiv über das Muster von Eingabebelegungen<br />

in Abhängigkeit einer weiteren Hilfsfunktion definiert. Die Hilfsfunktion repräsentiert eine<br />

Art Daten<strong>zu</strong>stand und wird verwendet um den Kontostand der Kunden <strong>zu</strong> kapseln.<br />

Im Folgenden werden wir die stromverarbeitende Funktion für die Komponente Bargeldbe<strong>zu</strong>g als Ein-/Ausgabe<br />

Funktion definieren. Das Schnittstellenverhalten f b : −→ I b → −→ O b ist dabei wie folgt definiert, wobei das Symbol<br />

ɛ für die leere Übertragung steht und i, i ′ , i ′′ sowie o, o ′ , o ′′ Kanalbelegungen darstellen und rest ∈ −→ I b und<br />

x, id ∈ N:<br />

f b (〈〉) = 〈〉 (1)<br />

i(a) = hebeab(x, id) ∧ i(i1) = ɛ<br />

⇒ f b (〈i〉) = 〈o〉 (2)<br />

∧o(i2) = prüfe(x, id) ∧ o(b) = ɛ<br />

i(a) = hebeab(x, id) ∧ i ′ (i1) = check(true, x, id) ∧ i(i1) = i ′ (a) = ɛ<br />

⇒ f b (〈i〉) = 〈o〉 (3)<br />

∧o(i2) = prüfe(x, id) ∧ o ′ (b) = geld(x, id) ∧ o(b) = o ′ (i2) = ɛ<br />

i(a) = hebeab(x, id) ∧ (i ′ (i1) = check(false, x, id) ∧ i ′ (a) = ɛ ∨ i ′ (a) = abbruch ∧ i ′ (i1) = ɛ) ∧ i(i1) = ɛ<br />

⇒ f b (〈i〉ˆ〈i ′ 〉ˆ〈rest〉) = 〈o〉ˆ〈o ′ 〉ˆf b (〈rest〉) (4)<br />

∧o(i2) = prüfe(x, id) ∧ o(b) = o ′ (b) = o ′ (i2) = ɛ<br />

i(a) = hebeab(x, id) ∧ i ′ (i1) = check(true, x, id) ∧ i(i1) = i ′ (a) = i ′′ (a) = i ′′ (i1) = ɛ<br />

⇒ f b (〈i〉ˆ〈i ′ 〉ˆ〈i ′′ 〉ˆ〈rest〉) = 〈o〉ˆ〈o ′ 〉ˆ〈o ′′ 〉ˆf b (〈rest〉) (5)<br />

∧o(i2) = prüfe(x, id) ∧ o ′ (b) = geld(x, id) ∧ o(b) = o ′ (i2) = o ′′ (b) = o ′′ (i2) = ɛ<br />

Beachten Sie dass f b Präfix-monoton ist, also i 1 ⊑ i 2 ⇒ f b (i 1 ) ⊑ f b (i 2 ) gilt. Dies ist notwendig um sicher<strong>zu</strong>stellen<br />

dass die Funktion auch realisierbar ist. Des weiteren ist <strong>zu</strong> beachten dass die Funktion partiell ist, dass<br />

also nicht jede Eingabehistorie eine Ausgabehistorie liefert.<br />

Um sicher<strong>zu</strong>stellen dass die so definierte Funktion in der Tat eine Abstraktion der Zustandsmaschinen aus<br />

Teilaufgabe a ist, also f b = Abs((∆ b , Σ b0 )) gilt, muss die Abstraktion folgender Bedingung (siehe Foliensatz<br />

6, Folie 25) genügen, wobei Abläufe eine Funktion ist welche alle möglichen Abläufe einer Zustandsmaschine<br />

liefert:<br />

Vermutung. f b (i) = o ⇔ ∃σ n ∈ Abläufe((∆ b , Σ b0 )). σ 0 ∈ Σ b0 ∧ ∀n ∈ N.(σ n+1 , o(n + 1)) = ∆(σ n , i(n + 1))<br />

Ohne Beweis.<br />

Analog da<strong>zu</strong> können wir die stromverarbeitende Funktion der Komponente Kontoverwaltung definieren. Hier<br />

werden wir die stromverarbeitende Funktion aber als Funktion mit lokalen Zuständen definieren. Der Zustand<br />

ist in diesem Fall das Guthaben eines jeden Kunden. Wir können das Schnittstellenverhalten der Komponente

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!