6. Állapotdiagram (statechart diagram)

iDevice ikon Bevezetés

Az állapotdiagram építőelemeinek megismerése, ezen felül annak a képességnek megszerzése, mely segítségével egy objektum működését ezzel a modellező eszközzel le tudjuk írni. A videó segítségével annak elsajátítása, hogy a diagramot az ArgoUML fejlesztő eszköz használatával össze tudjuk állítani.

 


 


iDevice ikon

A szekvencia-diagram már sokat elárult az objektumok működéséről: milyen üzeneteket küldenek (milyen műveletek elvégzésére kérik fel társaikat), és milyen üzeneteket kapnak (milyen műveleteket kell nekik elvégezni). Azonban vannak olyan objektumok, melyek teljes működése nem írható le az egyéb objektumokkal való kölcsönhatásaival, mert külön belsőéletet is élnek (pl. mérik az eltelt időt, adatokat kérnek be stb.). Az állapotdiagram már csak egyetlen objektummal foglalkozik, és annak teljes működését feltárja.

Az állapotdiagram kialakítását is eddigi gyakorlatunkhoz hűen egy konkrét példán mutatjuk be: a már megismert :TagUrlap működését fogjuk modellezni. Ezt az űrlapot a kialakítandó rendszer arra fogja használni, hogy egy tagsággal rendelkező ügyfél adatait megjelenítse a képernyőn akár információközlés, akár adatjavítás céljából, vagy egy ügyfél adatait bekérje azzal a céllal, hogy új tagként kerülhessen a rendszerbe. Az elemzett objektum miután elvégezte feladatát, megszűnik, az általa begyűjtött vagy megjelenített adatokat egy másik, a Tag osztályba tartozó objektum őrzi a további feladatokhoz.

Vizsgáljuk meg a kész diagramot, és elemezzük a modellelemek szerepét. Most már csak az eddig ismeretlen elemeknél említjük az ArgoUML angol megnevezéseit.

 

21. ábra
A :TagUrlap működésének modellje állapotdiagramon

A kezdő és záró állapot szimbóluma már a tevékenység-diagramról ismerős, itt az objektum életének kezdetét és végét jelenti. Az állapotdiagramon csak egy kezdőállapot lehet.

A lekerekített téglalapok az állapotok (state). A téglalap felső részében csak az állapot neve található, az összes többi információ az alsó felébe kerül. A különböző állapotokat az választja el egymástól, hogy az objektum másképp reagál ezekben az őt érő külső vagy belső eseményekre. Egy állapotban várakozhat az objektum, de tevékenykedhet is. A tevékenységet do: bevezetéssel írjuk a téglalap alsó részébe. (Diagramunkról leolvasható, hogy mind a négy állapotában várakozik az űrlap.) Ha tevékenysége olyan mérvű változást okoz, amire az objektumnak valahogy reagálnia kell, azt nevezzük belső eseménynek. Ezt egy when bevezetőszó és az a feltétel jelzi, melynek teljesülése esetén kell bekövetkezni a reakciónak. A belső esemény másik esete, amikor egy bizonyos idő eltelte vált ki reakciót. Ezt az after és az adott időtartam jelzi a diagramon.

Külső esemény egy másik objektum üzenete. Erről már beszéltünk az előző fejezetben. Diagramunkon csak ilyen eseményeket találunk: a megjelenites, az adatjavitas, az adatkeres hívásjellegű üzenetek (call event), az űrlap műveletei, melyekre való felkérést csak a rejtett állapotában tudja fogadni, hiszen a másik három állapot pont e műveletek végrehajtása közbeni állapot, és tudjuk, hogy hívásjellegű üzenetre csak passzív állapotában tud reagálni egy objektum. Az OK és a Megse az űrlap megfelelő gombjaitól érkező aszinkron üzenetek (signal event). Az ilyen jellegű eseményeket egy művelet végrehajtása közben is tudnak kezelni az objektumok, és a hatásukra végrehajtott műveletek után nem kell visszaadniuk a vezérlést az üzenetet küldő objektumnak. Az OK és a Megse események azért nem érhetik a rejtett állapotában az űrlapot, mert ekkor nem látszik, így a gombjait sem lehet lenyomni. A mutat állapotban pedig a mégse gomb inaktív, tehát itt sem érheti megse esemény.

Tehát a javit és a kerdez állapotokat azért kellett megkülönböztetni, mert a Megse eseményre másképp reagálnak (az adatkeres művelet visszatérési értéket is szolgáltat), a mutat már az OK-ra is másképp reagál, a rejtett állapotot pedig eleve más események érhetik, mint az előbbieket. Igen ám, de az elsőként említett kettőből az OK azonos reakciót vált ki, és ezt a kitoltes főállapot használatával fejezzük ki, mely egybefoglalja őket. Az OK hatására kiváltott átmenet ebből indul ki, ami azt jelenti, hogy a benne lévő állapotok mindegyikére egyaránt vonatkozik ez az átmenet.

Az elágazás és az abból kiinduló átmeneteken elhelyezett őrszemek már a tevékenység-diagramokról ismerősek. Az őrszemeket itt is szögletes zárójelek jelzik. Konkrétan itt arról van szó, hogyha adatjavításra vagy adatkérésre használjuk az űrlapot, az OK gomb lenyomása után megvizsgálja, hogy megfelelőek-e az űrlapmezőkről beolvasott adatok, és az eredménynek megfelelően más és más következik ezt követően.

A / jelek az akciókat vezetik be. Az akciók olyan műveletek, melyeket nem szakíthat meg esemény. Nézzünk erre példákat a diagramon. Az elágazás után, ha megfelelőek az adatok az űrlap a t objektum setAdatok műveletét hívja meg a hívás paramétereként elküldve az űrlapmezőkről beolvasott adatokat. (A t egy a Tag osztályból való objektum, melynek szerepe az űrlapon kért illetve ott megjelenített adatok hordozása más objektumok felé illetve felől. A setAdatok művelete a paraméterével kapott adatokat gazdája attribútumaiba tölti.) A másik ágon ([kulonben] őrszemmel jelölt) hibaüzenetet küld a kezelőfelületre szintén eljáráshívás formájában.

Akciókat találunk még a rejtett, a mutat és a javit állapotok dobozában. Itt a kiváltó esemény helyett a / előtt az exit illetve az entry kulcsszavakat találjuk, ami azt jelenti, hogy az űrlap automatikusan előtűnik a kezelőfelületen a rejtett állapot elhagyásakor, illetve a javit és a mutat állapotokba érkezéskor az adatok elkérése a t objektumtól, és kiírása az űrlap mezőibe rögtön megtörténik. Ez a jelölés teljesen egyenértékű lenne az akciónak az állapotból illetve az állapotba vezető átmeneten való feltüntetésével (ekkor nem lenne szükség az említett kulcsszavakra). Az ismételt leírás elkerülése és az áttekinthetőség vezetett a jelen megoldásra. Esemény / akció összeállítás is előfordulhat állapotdobozban, ami azt jelentené, hogy egy esemény hatására olyan művelet elvégzése történik, mely nem vezet az állapotból való kilépésre.

Összefoglalva: az akciókat / jel előzi meg, az őrszemek szögletes zárójelek közé írt feltételek, az eseményt nem jelöljük meg sehogy, innen lehet felismerni a diagramon. Az őrszemek nem csak az elágazások kivezető ágainál fordulhatnak elő, hanem bárhol egy eseményt követve alkalmazásuk azt jelenti, hogy az esemény csak akkor váltja ki az őt követő akciót illetve a megjelölt átmenetet, ha az őrszemmel adott feltétel is teljesül.

A diagram egy elemének magyarázatával még adósok maradtunk. Ha az űrlappal bevitt adatok nem megfelelőek, akkor vissza kell térni a javit vagy a kerdez állapotba, annak megfelelően, hogy melyikben voltunk utoljára a kitoltes főállapot elhagyása előtt. Ezt jelzi a körbe írt H betű, az úgynevezett emlékező állapot (history).