8. Komponens elvű programfejlesztés. Ágens, akció, cél, kontraktus. Ágens rendszer definíciója. Példák. Fairness. (Fair tulajdonság). Gyenge fair követelmény. A fair nem determinisztikus szemantika definíciója egyszintű nem determinisztikus program esetén. Komponens elvű programfejlesztés: C. B. Jones: A pre/post specifikációkat minden sc komponens (shared component) esetén egészítsük ki "megbízhatósági / garancia" (rely / garantee) előírással is: {p, r}sc{g, q} Előfeltétel: p: Σ Σ Utófeltétel: q: Σ X Σ Σ Megbízhatósági feltétel: r: Σ X Σ Σ Garancia feltétel: g: Σ X Σ Σ Probléma: A programfejlesztés alávetése a szekvencializációs szabályoknak! Modellalkotás: 1990-es évek végén: Warmer J., Kleppe A.: The Object Constraint Language - Precise Modelling with UML. Lényege: Probléma megoldásának modelljei + korlátozások. "Forgatókönyv" (scenario) készítésekor rögzítjük a komponensekre vonatkozó megállapodásokat: contracts, scenario, prototype. Probléma megoldás számítógépes hálózaton keresztül. A problémát ágensek oldják meg úgy, hogy összehangolt akciókkal kívánják a közös célt elérni. Komponens elvűprogramfejlesztés: 8.1. Definíció (Ágens): Felhasználó, program, rendszer, stb. 8.2. Definíció (Akció): Tevékenységek végrehajtása. Például: Gomb megnyomása, üzenet, algoritmus végrehajtása, stb. 8.3. Definíció (Cél): A rendszer kívánt állapotának elérése egy jövőbeli időpontban. 8.4. Definíció (Összehangolás): Kontraktus alapján (komponensek közötti szerződés) 1
8.5. Definíció (Kontraktus, megállapodás): Dokumentum, specifikáció, program szövege 8.6. Definíció (Probléma): Adott a kontraktus, és az ágensek egy halmaza. Kérdés: Egy adott célt képesek-e elérni az ágensek az adott kontraktussal? 8.7. Definíció (Batch feldolgozás): Választás a számítógépé (belsőnem determinisztikus választás) 8.8. Definíció (Dijkstra: abort = {false} user ): Ha abort-ot hajtott végre a felhasználó, jelzi, hogy a felhasználó megsértette a megállapodást. Ugyanis a számítógép felhatalmazást kapott a további rész akár hibás végrehajtásra is. 8.9. Definíció (Interaktív program): A felhasználónak van választási lehetősége a végrehajtásnál. (Alternatívák közül választhat) A számítógép belsődöntéseket hozó mechanizmus szerint dolgozik. Példa: S = S 1 ; S 2 a felhasználó b számítógép S 1 = (x: = x + 1 a x: = x + 2 ); S 2 = (x: = x - 1 b x: = x - 2 ); A felhasználó választása attól függ, hogy mit akar elérni: x 0 vagy x 0 1. ábra. Kontraktus a felhasználó és a gép között Ágens rendszerek: Legyen Ω az ágensek egy összessége, A az ágensek egy halmaza és a, b, c A. Ekkor az ágens rendszer = (A, S, I ct, Q). A: a rendszer ágenseinek véges halmaza S: S 0 ; do b 1 S 1 a... a b n S n a S E ; exit; od; S 0, S 1,..., S n ; nem determinisztikus programok. S 0 : rendszer indulása előtt elvégzendőfeladatok végrehajtására szolgáló program (inicializálás). I ct : kontraktust rögzítőinvariáns a A: ágens a megfelelőkomponens kiválasztásáért felelős 2
Q: az ágens rendszer végrehajtása során elérendőcélállítás Példa: Kecske, farkas és káposzta átszállítása a folyón: A farkas a kecskével csak akkor lehet együtt, ha a hajós is ott van: fa = ke ha = fa A kecske a káposztával csak akkor lehet együtt, ha a hajós is ott van: ke = ká ha = ke A kontraktus invariánsa ( l ct ): (fa = ke ha = fa) (ke = ká ha = ke) ( n fa, ke, ká, ha )(n bool) Kiindulási állapot: ha = F fa = F ke = F ká = F Q Cél állapot: ha = T fa = T ke = T ká = T Ágens(ek): a hajós átkelés = ha:= F; fa:= F; ke:= F; ká:= F; do ha = fa (ha, fa):= ( ha, fa); a ha = ke (ha, ke):= ( ha, ke); a ha = ká (ha, ká):= ( ha, ká); a ha = ha; a skip; exit od; a: hajós; Példa: Raktár szimuláció: Egy raktárban háromféle áru raktározható Áruféleségek: A, B, C Raktár kapacitása: N Kikötések B és C áru vegyesen tárolható. A és C áru vegyesen tárolható. A és B áru nem tárolható vegyesen. 3
Nem determinisztikus módon érkeznek/távoznak az árúk. Készítsük el a helyes működésének szimulációját. Adott áruból raktáron lévő mennyiség n A = cont(a,ent) - count(a,ex) n B = cont(b,ent) - count(b,ex) n C = cont(c,ent) - count(c,ex) Kontraktus: B és C áru vegyesen tárolható, ha nincs a raktárban A áru N n B + n C 0 n A = 0 A és C áru vegyesen tárolható, ha nincs a raktárban B áru N n A + n C 0 n B = 0 Komponensek közötti megállapodást rögzítő I ct (N, n A, n B, n C ) invariáns ((N n 0 n A = 0) (N n 0 n B = 0)) (n = n A + n B + n C ) ) raktár = ( n A 0; n B 0; n C 0; n N; raktároz; raktároz = do beszállít a elszállít a skip; exit od; a, b, c A, ágenshalmaz beszállít = if (N > n 0 n B = 0) (<binsert(r, A); (n A, n) ( n A + 1, n + 1) > ) b (N > n 0 n A = 0) (<binsert(r, B); (n B, n) ( n B + 1, n + 1) > ) b (N > n 0) (<binsert(r, C); (n C, n) ( n C + 1, n + 1) > ) fi; elszállít = if (n A > 0) ( < bdelete(r, A); (n A, n) ( n A - 1, n - 1) > ) c (n B > 0) ( < bdelete(r, B); (n B, n) ( n B - 1, n - 1) > ) c (n C > 0) ( < bdelete(r, C); (n C, n) ( n C - 1, n - 1) > ) fi; Fair tulajdonság: Példa nem fair programra: S 1 jel:= "false"; do jel következősor nyomtatása // nyomtatás jel jel:= "true" // kilépés 4
od; A nem determinisztikus program szemantikája nem garantálja, hogy a második sor megkapja a vezérlést. 8.10. Definíció (Gyenge fair követelmény): A do...od ciklusban minden olyan őrfeltételes utasítás, amely valamely időponttól folyamatosan készen áll a végrehajtásra, annak végtelen sokszor aktiválódni kell. Az elsőkomponens ilyen feltétel esetén nem aktiválódhatott volna kizárólagosan, ha a második komponens kész a végrehajtásra. Példa erősen fair programra S 2 jel:= "false"; lap:= "false"; i:= 0; do ~ j e l > k ö v e t k e z ő s o r n y o m t a t á s a ; i := ( i +1) mod 3 0 ; l a p := ( i =0) ~ j e l és l a p > j e l := " t r u e " od ; Most is az elsőtud aktiválódni először, de 30 nyomtatás után a második komponens indulásának feltétele folyamatosan teljesül, így a második ág végrehajtásra kerül. A második ág végrehajtása után egyik komponens belépési feltétele sem teljesül, ezért az iteráció befejeződik. Ezt az esetet nevezik erő s fair (strong fairness) tulajdonságnak. 8.11. Definíció (Nem determinisztikus program): Egyszerű, egyszintű nem determinisztikus program S 0 ; do α 1 S 1... α n S n od; S 0, S 1,..., S n determinisztikus komponensek. 8.12. Definíció (Fair nem determinisztikus szemantika definíciója...): Fair nem determinisztikus szemantika definíciója... S egyszintű, nem determinisztikus program esetén σ Σ kezdőállapot mellett M fair [S](σ) = {τ < S, σ > < E, τ >} { S divergálhat σ kezdőállapotból egy fair kiszámítás esetén } { fail S hibás eredményre juthat σ kezdőállapotból } egy fair kiszámítás esetén: M tot [S](σ) és M fair [S](σ) közötti különbség 5