választási szegmens hozzáadása

gyakran állapotgépekben csak akkor kell állapotátmenetet végezni, ha egy adott feltétel (úgynevezett őrállapot) futásidőben TRUE értékre értékel. Szintén gyakran át kell állnia a különböző állapotokra, attól függően, hogy a futási időben értékelt egyes őrségi feltételek milyen eredménnyel járnak.

az UML egy speciális konstrukciót biztosít, az úgynevezett “choice pseudostate”, amelyet ilyen helyzetekben használhat. A “choice pseudostate” lehetővé teszi az átmenet felosztását több kimenő útvonalra, mindegyiknek megvan a maga őrségi állapota.

Megjegyzés: hasznos a choice pseudostate-ra gondolni, mint például a fenti ábra (B) paneljén látható, mint az összetettif (guard1()) {...} else if (guard2()) {...}utasítás (valójában így valósítja meg a QM ++ kódgenerátor a választási szegmenseket). Figyelem mivel az őrökIFs ésELSEs kódokhoz vezetnek a kódban, ezek túlzott használata “spagetti” kódhoz vezet, és eleve meghiúsítja az állami gépek használatának célját. Ezért az őröket megfontoltan kell használni.

a legtöbb UML eszközben a választási szegmensek rajzolásának folyamata abból áll, hogy először hozzáadunk egy “választási pszeudosztátot” (gyémánt), majd egy kimenő átmeneti szegmenst csatolunk egy védővel. A QM-ben ez a folyamat leegyszerűsödik, mert az állami Szerszámgépkészlet használatra kész választási szegmens eszközt tartalmaz, amely egyesíti a “választási pszeudosztátot” egy állandóan hozzá csatolt átmeneti szegmenssel.

megjegyzés a választott szegmens az egyetlen módja a QM-ben, hogy védőfeltételt csatoljon egy átmenethez, amint azt a fenti ábra (a) panelje szemlélteti. De a qm választás szegmens erősebb, mint az egyszerű őrök átmenetek, amint azt a következő szakaszokban. Megjegyzés: választási szegmens hozzáadásához először létre kell hoznia és meg kell mutatnia egy állapotdiagramot. Ezenkívül az állapotgépnek legalább egy belső átmenettel (végződéssel ) vagy választási szegmenssel () kell rendelkeznie. Végül a választási szegmensek hozzáadásához, áthelyezéséhez, átméretezéséhez vagy szerkesztéséhez az állapotgép diagramját fel kell oldani ().

győződjön meg arról, hogy a State Machine alablaka aktív. A State Machine Toolbox-ban kattintson a választási szegmens eszközre, majd engedje el az egérgombot (ne húzza az eszközt az eszköztárról). Ezen a ponton, amikor az egeret az aktív állapotdiagram fölé viszi, az egérmutató a “tiltott” ikonnal () ellátott választási szegmens eszközre változik, mert a választási szegmens csak az átmenet () nem csatolt négyzetvégéhez vagy egy meglévő választási szegmenshez () adható hozzá. Amikor az egérmutatót egy választási szegmens engedélyezett csatolási pontja fölé viszi, az egérmutató a választási szegmens eszközre változik a horgony () segítségével. Ha hozzá szeretné adni a választási szegmenst ehhez a csatolási ponthoz, nyomja meg az egérgombot, és húzza a választási szegmens végét a célállapot kívánt szélére. Az így létrehozott átmeneti út megfelel a rendszeres állam-állam átmenetnek egy őrrel.

hozzáadhat egy választási szegmenst is, amely belső átmenet lesz egy őrrel. Ehhez egyszerűen húzza a választási szegmens végét, és ne dobja el semmilyen állapot szélén. Ezen a ponton a választási szegmens belső átmenet lesz. A belső átmenet teljes egészében a forrásállapotban történik, és soha nem vezet állapotváltozáshoz.

megjegyzés: a szabványos” normatív ” UML jelölés nem teszi lehetővé belső átmeneti szegmensek hozzáadását a választott pszeudosztátokhoz. Ezzel szemben a belső átmenetek nem normatív ábrázolása QM-ben lehetővé teszi a belső átmeneti szegmensek egyszerű hozzáadását a választott pszeudosztátokhoz, valamint az átmenet típusának gyors és intuitív megváltoztatását az átmenet végének egy állapothoz/állapothoz történő csatolásával/leválasztásával.

végül hozzáadhat egy választási szegmenst egy másik választási szegmens független végéhez is, amint azt az alábbi animáció szemlélteti:

Megjegyzés: Ez a választási szegmensek már meglévő választási szegmensekhez való hozzáadásának lehetősége azt jelenti, hogy összetett beágyazott őröket hozhat létre. Ugyanakkor, mint minden őrségi feltételnél, ezt a funkciót körültekintően kell használnia a “spagetti” kód elkerülése érdekében.

a választási szegmens elem konfigurálható a választás-specifikus Tulajdonságlap segítségével.

Choice-Segment Tulajdonságlap

a Choice Segment tulajdonságlap a következő tulajdonságokat tartalmazza:

  • Choice Guard
  • Choice Target (not editable–determined geometriailag)
  • Choice Action

Choice Guard

minden choice szegmensnek rendelkeznie kell egy explicit guard tulajdonsággal, amely két bejegyzésből áll: álkód és kód. Csak a guard tulajdonság kódbevitele releváns a kódgenerálás szempontjából. Az álkódbejegyzést csak úgy tervezték, hogy megjelenjen a diagramban, hogy elkerülje a rendetlenséget azáltal, hogy minimalizálja az átmeneti alakzat mellett megjelenítendő szöveg mennyiségét.

figyelem a guard tulajdonság pszeudokód bejegyzése csak a választási szegmenshez társított szövegmezőben való megjelenítésre szolgál, de nincs hatással a kódgenerálásra. Megjegyzés: a guard tulajdonság a választási szegmens szövegmezőjében ugyanazoknak a szabályoknak megfelelően jelenik meg, mint az átmeneti Szövegmező. Ezenkívül a diagram rendetlenségének csökkentése érdekében a védőburkolat rövidített formában jelenik meg, ahol a védőburkolatban lévő összes szóközt eltávolítják, és a kapott védőszöveget 32 karakterre csonkolják. (Az őr csonkításakor az utolsó karakter’~’).

a sikeres kódgeneráláshoz a guard tulajdonság Kódbevitelének jogi C vagy C++ logikai kifejezésnek kell lennie. A kifejezés használhatja az állapotgép attribútumait (a me mutatón keresztül), valamint a kiváltó esemény eseményparamétereit (lásd az alábbi részt).

a kiváltó esemény elérése: Az őr kifejezés hozzáférhet az eredeti kiváltó eseményhez (az átmenethez, amelyhez a választás közvetlenül vagy közvetve kapcsolódik), amelyet (QEvt const * const)típusú e mutatóként adunk meg. Ez azt jelenti, hogy csak olvasható hozzáféréssel rendelkezik az eseményhez, és nem módosíthatja a e mutatót. Az eredeti kiváltó esemény eseményparamétereinek elérése, általában le kell csökkentenie az eseménymutatót e. Ez a lehangolt mindig az átmeneti triggeren alapul (a kiváltó esemény jele, lásd az átmeneti Trigger), ami azt jelenti, hogy mindig ismernie kell a triggerhez társított eseménytípust (eseményosztályt).

választási cél

a cél tulajdonság nem szerkeszthető közvetlenül, hanem geometriailag a választási szegmens végpontja határozza meg. Állapot-állapot átmenetek esetén a cél tulajdonság felsorolja azt a célállapotot, amelyben a végpont () véget ér. A négyzetes végponttal () rendelkező belső átmeneteknél a cél tulajdonság internalértéket mutat.

választási művelet

a választási szegmensnek lehet opcionális action tulajdonsága, amely csak akkor kerül végrehajtásra, ha az őr futásidőben TRUE értékre értékel (Lásd még a művelet sorrendjének értékelését).

az action tulajdonság két bejegyzésből áll: pseudocode és code (lásd választási Tulajdonságlap). Csak a művelet tulajdonság kódrésze releváns a kódgenerálás szempontjából. A pszeudokód mezőt csak úgy tervezték, hogy megjelenjen a diagramban, hogy elkerülje a rendetlenséget azáltal, hogy minimalizálja az átmeneti alakzat mellett megjelenítendő szöveg mennyiségét.

Megjegyzés Az action tulajdonság pszeudokód bejegyzése csak a diagramon való megjelenítésre szolgál, és nincs hatással a kódgenerálásra.

mutató a kiváltó eseményhez: a választási műveletkódnak gyakran hozzá kell férnie a kiváltó eseményhez, amelyet (QEvt const * const)típusú e mutatóként adunk meg. Ez azt jelenti, hogy csak olvasható hozzáféréssel rendelkezik az eseményhez, és nem módosíthatja a e mutatót. A kiváltó esemény eseményparamétereinek elérése, általában le kell csökkentenie az eseménymutatót e. Ez a lehangolt mindig az átmeneti triggeren alapul (a kiváltó esemény jele, lásd az átmeneti Trigger), ami azt jelenti, hogy mindig ismernie kell a triggerhez társított eseménytípust (eseményosztályt).

választási Szövegmező

miután a választási szegmens elemet kijelölte aktuális elemként, láthatja a választási szegmenshez társított Szövegmező határát. A szövegdoboz lehetővé teszi a kiválasztott szöveg áthelyezését és átméretezését úgy, hogy a szövegdoboz fogantyúját az átmenet Szövegdobozával megegyező algoritmus szerint húzza.

az else Guard

a guard tulajdonság speciális else kulcsszóként definiálható. Az ilyen más őr kiegészíti az ugyanazon választási álállamhoz kapcsolódó egyéb őrségi feltételeket. Az else guard megadható a guard tulajdonság kódbejegyzésében vagy álkódbejegyzésében. Nyilvánvaló, hogy az” else ” őrnek csak egy választási álállamnak van értelme, több kimenő választási szegmenssel.

megjegyzés a kódgenerálás során az else guard mindig az ugyanazon választási pszeudosztáthoz társított összes őr csoportján belül lesz utoljára generálva, függetlenül annak sorrendjétől a modell Explorerben.

választási szegmensek else nélkül

az UML specifikáció szerint egy olyan eseményt, amelyet nem lehet feldolgozni, mivel az összes őr hamisnak értékeli, feldolgozatlannak kell tekinteni, ami azt jelenti, hogy azt a szuperállam(OK) ra kell terjeszteni. Ez a követelmény kihatással van a választási álállamokra explicit else szegmens nélkül. Pontosabban, hogy megfeleljenek az UML szemantika, a QM™ kód generátor generál ilyen esetekben implicit else ág fog okozni terjedési az esemény, hogy a szuperállam(ok).

Megjegyzés: különbség van az üres else szegmenssel rendelkező választási álállapot és az egyébként azonos választási álállapot között az else szegmens nélkül. Az explicit üres else az esemény elfogyasztását okozza(anélkül, hogy bármit is tenne), míg az else szegmens hiánya miatt az esemény továbbterjed a szuperállam (OK) ra.

Rend Őr Értékelést

Az UML specifikáció előírja, hogy az őr feltételei ugyanazt a döntést, pseudostate kölcsönösen kiegészítik egymást, így a rend értékelése az őrök nem számít. Miközben az őrök kiegészítő még mindig ajánlott a QM™, az eszköz értékeli őrök mindig az előre meghatározott sorrendben, amely számíthat.

A rend őrség értékelés határozza meg a rend a Választás Szegmens elemeket a Modell Explorer. Ez a sorrend megváltoztatható az Explorer eszköztár fel-le gombjaival. Alternatív megoldásként az aktuális elem felfelé vagy lefelé mozgatható a modell Explorerben a Ctrl-(key-up) és a Ctrl-(key-down) billentyűparancsok segítségével.

Megjegyzés átfedő védőburkolatok esetén, amikor a védőértékelés sorrendje számít, erősen ajánlott a választási szegmenseket grafikusan elrendezni a diagramon, a Model Explorer-hez hasonló sorrendben, amint azt a fenti képernyőfelvétel szemlélteti. A generált kód ezután ugyanazt a sorrendet követi, amint az a fenti ábra jobb oldalán látható.

Műveletértékelési sorrend

az átmenethez csatolt bármely választási szegmens hozzáadja a választási szegmens műveleteit az átmenet által végrehajtott művelethez. Mindezen műveletek értékelési sorrendje intuitív, és mindig a feltétel nélkül végrehajtott átmeneti művelettel kezdődik, amelyet a választott szegmens cselekvések feltételes értékelése követ.

például a fenti ábrán látható műveletértékelési sorrendet a következő pszeudokód foglalja össze:

. . .
ügy TRIG: {
/* átmeneti művelet… * /
action0 (); / * feltétel nélkül végrehajtva*/
/* választási szegmensek… * /
ha (g1()) {
Akció1();
. . .
}
else if (g2()) {
Akció2();
. . .
}
else {
. . .
}
}
. . .

beágyazott választási szegmensek

a fent leírtak szerint a választási szegmensek fészkelhetnek. Ez lehetővé teszi összetett feltételes átmeneti utak felépítését, de mint mindig az őröknél, a funkciót nem szabad túlzottan használni.

például az egyik gyakori hiba az, hogy mélyen beágyazott választási szegmenseket használunk számos lehetséges átmeneti út közül (lásd az alábbi ábra (a) paneljét):

jobb és sokkal egyszerűbb alternatíva az ugyanazon választási pszeudosztáthoz csatolt feleletválasztós szegmensek használata, amint azt a fenti ábra (B) panelje mutatja.

Megjegyzés Ne feledje, hogy számos választási szegmenst csatolhat egy adott átmenethez. A diagram kisebb számú választás pseudostates (gyémánt ) egy jobb, könnyebben érthető diagram. Figyelem a qm-kódgenerátor a kódban lévő fészkelési szintek számát 16-ra korlátozza (beleértve a fészkelő belső állapotkezelő funkciókat is). A mélyen beágyazott választási szegmensek használata könnyen meghaladhatja ezt a határt.

útválasztási választási szegmensek

A feleletválasztós szegmensekkel rendelkező átmenet, amelyek közül néhány potenciálisan beágyazott, sok elemet csoportosít egy kis diagramtérben. Egy ilyen összetett “csatlakozógömb” grafikus átrendezéséhez tisztában kell lennie az ebben a helyzetben alkalmazandó alapvető szabályokkal.

az első szabály az, hogy mielőtt bármilyen elem alakját megváltoztatná, először ki kell választania.

például, ha át szeretné helyezni a választást-pseuodstate (a gyémánt ), akkor kattintson az eredeti bejövő átmenetre a choice-pseudostate-re. Kérjük, vegye figyelembe, hogy kifejezetten nem szabad magára a gyémánt alakra kattintania, mert ez valójában a bejövő tranzion-vég, valamint az összes kimenő choce szegmens átfedéses gyűjteménye, tehát nem egyértelmű, hogy melyik alakra gondol. Ehelyett kattintson az egyik átmeneti szegmensre vagy a tranzit kezdő-végére. (Megjegyzés: a Model Explorer nézetben egyértelműen kiválaszthatja a modellelemeket is). A következő animáció szemlélteti a folyamatot:

másrészt, ha kiválaszt egy kimenő választási szegmenst, akkor nem mozgathatja a választási pszeudosztátot. Ehelyett most már csak a kiválasztott választási szegmenst mozgathatja, hogy máshová csatolja.

Leave a Reply