¨Ubungen zu â Modellierung verteilter Systemeâ
¨Ubungen zu â Modellierung verteilter Systemeâ
¨Ubungen zu â Modellierung verteilter Systemeâ
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