kanssa lisäämällä Valintasegmentti
usein valtion koneissa sinun täytyy tehdä tilasiirtymä vain silloin, kun tietty ehto (ns.guard condition) arvioidaan True-arvoksi ajon aikana. Myös melko usein, sinun täytyy siirtyä eri tiloihin, riippuen lopputuloksesta joidenkin vartija olosuhteissa arvioidaan ajon aikana.
UML: ssä on erityinen konstruktio, nimeltään “choice pseudostate”, jota voi käyttää tällaisissa tilanteissa. “Choice pseudostate” avulla voit jakaa siirtymisen useita lähteviä polkuja, joista jokaisella on oma vartija kunnossa.
huomaa, että on hyödyllistä ajatella valinnaista pseudostaattia, kuten yllä olevan kaavion paneelissa (B) olevaa, yhdisteenif (guard1()) {...} else if (guard2()) {...}
lausekkeena (näin QM™ – koodigeneraattori toteuttaa valintasegmentit). Huomio, koska vartijat johtavat koodissaIF
S: ään jaELSE
S: ään, niiden liikakäyttö johtaa “spagettikoodiin” ja kumoaa valtion koneiden käytön tarkoituksen ylipäätään. Tästä syystä vartijoita tulisi käyttää harkitusti.
useimmissa UML-työkaluissa valintasegmenttien piirtäminen tapahtuu siten, että ensin lisätään “Choice pseudostate” (timantti) ja sitten kiinnitetään lähtevä siirtymäsegmentti suojuksella. Qm™: ssä tämä prosessi on yksinkertaistettu, koska valtion työkalupakki sisältää käyttövalmiita Valintasegmenttityökaluja, joissa yhdistyvät “valintasegmentti” ja siihen pysyvästi kiinnitetty siirtymäsegmentti.
Note Choice-segmentti on qm™ – järjestelmässä ainoa tapa liittää suojusehto siirtymävaiheeseen, kuten yllä olevan kaavion paneelissa (A) on esitetty. Mutta qm™ Choice-segmentti on tehokkaampi kuin yksinkertaiset vartijat siirtymissä, kuten seuraavissa kohdissa selitetään. Huomautus, jotta voidaan lisätä valinta segmentti, sinun täytyy ensin luoda ja näyttää tilakaavio. Lisäksi valtiokoneistossa tulee olla vähintään yksi sisäinen Siirtymä (päättyneenä ) tai valintasegmentti (). Lopuksi, jos haluat lisätä, siirtää, muuttaa kokoa tai muokata valintasegmenttejä, Tilakonekaavio on avattava ().
varmista, että Valtiokoneen alaikkuna on aktiivinen. Vuonna State Machine Toolbox klikkaa valinta segmentti työkalu ja vapauta hiiren painiketta (älä vedä työkalua työkaluriviltä). Tässä vaiheessa, kun viet hiiren aktiivisen tilan kaavion päälle, hiiren osoitin muuttuu choice-segment-työkaluksi “kielletty” -kuvakkeella (), koska choice-segmentti voidaan lisätä vain siirtymän () irralliseen neliönpäähän tai olemassa olevaan valintasegmenttiin (). Kun viet hiiren choice-segmentin sallitun kiinnityspisteen päälle, hiiren osoitin muuttuu choice-segmentin työkaluksi ankkurin kanssa (). Jos haluat lisätä valintasegmentin tähän kiinnityspisteeseen, paina hiiren painiketta ja vedä valintasegmentin pääty kohdetilan haluttuun reunaan. Näin luotu siirtymätie vastaa säännöllistä valtiosta toiseen tapahtuvaa siirtymää, jossa on vartija.
voit myös lisätä valinta segmentti, joka tulee sisäinen siirtyminen vartija. Voit tehdä tämän, voit yksinkertaisesti vetää loppuun valinta segmentin ja pudota se ei missään valtion reunalla. Tässä vaiheessa valinnanvapaussegmentistä tulee sisäinen murros. Sisäinen Siirtymä toteutetaan kokonaan lähdevaltion sisällä, eikä se koskaan johda tilan vaihtumiseen.
huomaa standardi” normatiivinen ” UML notaatio ei salli lisätä sisäisen siirtymisen segmenttien valinta pseudostates. Sen sijaan qm™: n sisäisten siirtymien ei-normatiivinen esitys mahdollistaa sisäisten siirtymäsegmenttien lisäämisen helposti valittuihin pseudostaatteihin ja siirtymätyypin muuttamisen nopeasti ja intuitiivisesti liittämällä/irrottamalla siirtymäpää tilaan/tilasta.
lopuksi voit myös lisätä choice-segmentin toisen Choice-segmentin irralliseen päähän, kuten alla olevasta animaatiosta käy ilmi:
huomaa, että tämä mahdollisuus lisätä Valintasegmenttejä jo olemassa oleviin Valintasegmentteihin tarkoittaa, että voit rakentaa monimutkaisia sisäkkäisiä suojuksia. Kuitenkin, kuten kaikissa vartija olosuhteissa, sinun pitäisi käyttää tätä ominaisuutta harkitusti välttää “spagetti” koodi.
Valintasegmentin kohde voidaan määrittää Valintakohtaisella Ominaisuuslomakkeella.
Valintasegmentin ominaisuustaulukko sisältää seuraavat ominaisuudet:
- Choice Guard
- Choice Target (ei muokattavissa geometrisesti)
- Choice Action
Choice Guard
jokaisella qm™ – segmentillä on oltava eksplisiittinen guard-ominaisuus, joka koostuu kahdesta merkinnästä: pseudokoodi ja koodi. Ainoastaan vartijan ominaisuuden koodimerkinnällä on merkitystä koodin muodostamisen kannalta. Pseudokoodimerkintä on suunniteltu näytettäväksi vain kaaviossa, jotta vältyttäisiin sotkuilta minimoimalla siirtymämuodon vieressä näytettävän tekstin määrä.
huomio vartijan ominaisuuden Pseudokoodimerkintä on tarkoitettu esitettäväksi vain valintasegmenttiin liittyvässä tekstikentässä, mutta sillä ei ole mitään merkitystä koodin tuottamiseen. Huomaa, että guard-ominaisuus näkyy valintasegmentin tekstikentässä samojen sääntöjen mukaan kuin Siirtymätekstikentässä. Lisäksi kaavion sotkujen vähentämiseksi vartija esitetään lyhennetyssä muodossa, jossa kaikki vartijan välilyönnit poistetaan ja tuloksena oleva vartijan teksti typistetään 32 merkillä. (Kun vartija typistetään, viimeinen merkki on”~”).
onnistuneen koodin muodostamisen vuoksi vartijan ominaisuuden koodisyötteen on oltava juridinen C-tai C++ – Boolen lauseke. Lausekkeessa voidaan käyttää valtion koneen attribuutteja (me-osoittimen kautta) ja laukaisevan tapahtuman tapahtumaparametreja (KS.kohta alla).
pääsy Laukaisevaan Tapahtumaan: Suojusilmaisu pääsee käsiksi alkuperäiseen laukaisutapahtumaan (siirtymätapahtumaan, johon valinta on liitetty suoraan tai epäsuorasti), joka annetaan tyypin (QEvt const * const)
e-osoittimena. Tämä tarkoittaa, että sinulla on vain lukuoikeus tapahtumaan, etkä voi muuttaa e
osoitinta. Jos haluat käyttää alkuperäisen laukaisutapahtuman tapahtumaparametreja, sinun on yleensä laskettava tapahtuman osoitin e. Tämä alaskirjaus perustuu aina siirtymäkäynnistimeen (käynnistystapahtuman signaali, katso Siirtymäkäynnistin), mikä tarkoittaa, että sinun on aina tiedettävä laukaisimeen liittyvä tapahtumatyyppi (tapahtumaluokka).
Valintakohde
kohteen ominaisuus ei ole suoraan muokattavissa, vaan se määräytyy geometrisesti valintasegmentin päätepisteen mukaan. Tilan ja tilan välisissä siirtymissä kohdeomaisuus listaa kohdetilan, jossa päätepiste () päättyy. Sisäisissä siirtymissä, joissa on neliön päätepiste (), kohdeomaisuus näyttää internal
.
Choice Action
a Choice-segmentillä voi olla valinnaisominaisuus, joka suoritetaan vain, kun vartija arvioi toiminnon todeksi suorituksen aikana (Katso myös toimintajärjestys Evaluation).
toiminnon ominaisuus koostuu kahdesta merkinnästä: pseudokoodi ja koodi (katso Valintaominaisuuslomake). Ainoastaan toiminnon ominaisuuden koodiosalla on merkitystä koodin muodostamisen kannalta. Pseudokoodikenttä on suunniteltu näytettäväksi vain kaaviossa, jotta vältyttäisiin sotkuilta minimoimalla siirtymämuodon vieressä näytettävän tekstin määrä.
huomaa, että toiminnon ominaisuuden Pseudokoodisyöttö on tarkoitettu vain esitettäväksi kaaviossa, eikä sillä ole vaikutusta koodin luomiseen.
osoitin Laukaisevaan Tapahtumaan: valintatoimikoodin on usein päästävä käsiksi laukaisevaan tapahtumaan, joka annetaan tyypin (QEvt const * const)
e-osoittimena. Tämä tarkoittaa, että sinulla on vain lukuoikeus tapahtumaan, etkä voi muuttaa e
osoitinta. Jos haluat käyttää laukaisevan tapahtuman tapahtumaparametreja, sinun on yleensä laskettava tapahtuman osoitin e. Tämä alaskirjaus perustuu aina siirtymäkäynnistimeen (käynnistystapahtuman signaali, katso Siirtymäkäynnistin), mikä tarkoittaa, että sinun on aina tiedettävä laukaisimeen liittyvä tapahtumatyyppi (tapahtumaluokka).
valintaruutu
kun Valintasegmentin kohde on valittu nykyiseksi kohteeksi, näet valintasegmenttiin liittyvän tekstiruudun rajan. Tekstikentän avulla voit siirtää ja muuttaa valitun tekstin kokoa vetämällä sitä ympäri tai vetämällä tekstikentän kahvaa saman algoritmin mukaan kuin Siirtymätekstikenttä.
else-vartija
vartijan ominaisuus voidaan määritellä erityiseksi else-avainsanaksi. Tällainen else guard täydentää muita vartija ehtoja liitetty samaan valinta pseudostate. Else guard voidaan määrittää joko guard-ominaisuuden koodisyöttöön tai pseudokoodisyöttöön. Ilmeisesti, “else” vartija on järkevää vain valinta pseudostate useita lähtevien valinta segmenttien.
huomaa koodin generoinnin aikana, else guard luodaan aina viimeisenä kaikkien saman valinnan pseudostaattiin liittyvien vartijoiden ryhmässä riippumatta sen järjestyksestä Model Explorerissa.
Valintasegmentit ilman muuta
UML-spesifikaation mukaan tapahtumaa, jota ei voida käsitellä kaikkien vääräksi arvioivien vartijoiden vuoksi, on käsiteltävä käsittelemättömänä, eli se on levitettävä supervaltioon(supervaltioihin). Tämä vaatimus vaikuttaa valinnaisiin pseudostaatteihin, joilla ei ole nimenomaista else-segmenttiä. Erityisesti UML-semantiikan noudattamiseksi qm™ – koodigeneraattori tuottaa tällaisissa tapauksissa implisiittisen else
– haaran, joka aiheuttaa tapahtuman leviämisen supervaltioon (- valtioihin).
huomaa, että on olemassa ero tyhjän else-segmentin valinnaisen pseudostaatin ja muuten identtisen pseudostaatin välillä ilman else-segmenttiä. Nimenomainen tyhjä else aiheuttaa tapahtuman kulumisen (tekemättä mitään), kun taas else-segmentin puuttuminen aiheuttaa tapahtuman etenemisen supervaltioon(supervaltioihin).
vartijoiden Arviointijärjestys
UML: n määrittelyssä edellytetään, että samaan valintanumeroon liitetyt vartioehdot täydentävät toisiaan, jolloin vartijoiden arviointijärjestyksellä ei ole merkitystä. Vaikka vartijoiden täydentäminen on edelleen suositeltavaa qm™ – järjestelmässä, työkalu arvioi vartijat aina ennalta määrätyssä järjestyksessä, johon voit luottaa.
vartijan arviointijärjestys määräytyy Malliavaruudessa valittujen Segmenttierien järjestyksen mukaan. Tätä järjestystä voidaan muuttaa Explorer-työkalupalkin ylös-ja alas-painikkeiden avulla. Vaihtoehtoisesti, nykyinen kohde voidaan siirtää ylös tai alas Model Explorer avulla pikanäppäimet: Ctrl-(key-up) ja Ctrl-(key-down).
Huomaa, Jos suojukset ovat päällekkäisiä, kun vartijan arviointijärjestys on tärkeä, on erittäin suositeltavaa järjestää valitut segmentit graafisesti kaaviossa samassa järjestyksessä kuin Explorer-mallissa, kuten yllä olevassa kuvassa. Luotu koodi seuraa sitten samassa järjestyksessä, kuten yllä olevan kaavion oikealla puolella on esitetty.
toiminnan Arviointijärjestys
kaikki siirtymäajan valintasegmentit lisäävät valintasegmenttitoimet siirtymäajan suorittamaan toimeen. Kaikkien näiden toimintojen arviointijärjestys on intuitiivinen, ja se alkaa aina ehdoitta suoritetusta siirtymätoimesta, jota seuraa valintasegmenttitoimintojen ehdollinen arviointi.
esimerkiksi yllä olevan kaavion vaikutusarvioinnin järjestys tiivistetään seuraavalla pseudokoodilla:
pesivät Valinnaisainesegmentit
kuten edellä on kuvattu, Valinnaisainesegmentit voivat pesiä. Näin voit rakentaa monimutkaisia ehdollisia siirtymäpolkuja, mutta kuten aina vartijoiden kanssa, ominaisuutta ei saa käyttää liikaa.
esimerkiksi yksi yleinen virhe on käyttää syvälle sisäkkäisiä valintasegmenttejä valittaessa useiden mahdollisten siirtymäpolkujen joukosta (katso alla olevan kaavion paneeli (a) ):
parempi ja paljon yksinkertaisempi vaihtoehto on käyttää samaan pseudostaattiin liitettyjä monivalintasegmenttejä, kuten yllä olevan kaavion paneelissa (B) on esitetty.
huomaa, että annettuun siirtymävaiheeseen voi liittää monta valintasegmenttiä. Diagrammi, jossa on pienempi määrä pseudostaatteja (timantteja), on parempi, helpompi ymmärtää Diagrammi. Huomio qm™ koodigeneraattori rajoittaa määrä pesintä tasoilla koodi 16 (mukaan lukien pesintä sisällä valtion käsittelijä toimintoja). Syvästi sisäkkäisten Valintasegmenttien käyttö voi helposti ylittää tämän rajan.
Reititysvalintasegmentit
monivalintasegmentit, joista osa on mahdollisesti sisäkkäisiä, ryhmittävät monia elementtejä pieneen diagrammiavaruuteen. Jos haluat järjestää graafisesti uudelleen tällaisen monimutkaisen “liittimien pallon”, sinun on oltava tietoinen perussäännöistä, joita sovelletaan tässä tilanteessa.
ensimmäinen sääntö on, että ennen kuin minkään alkuaineen muotoa voi muuttaa, se on ensin valittava.
esimerkiksi, jos haluat siirtää choice-psuodstatea (timanttia), sinun täytyy klikata alkuperäistä tulevaa siirtymää choice-pseudostateen. Huomaa, että sinun ei aivan erityisesti pitäisi klikata itse timanttimuotoa, koska se on itse asiassa päällekkäinen kokoelma saapuvasta transion-lopusta sekä kaikista lähtevistä valintasegmenteistä, joten on epäselvää, mitä muotoa todella tarkoitat. Sen sijaan, sinun pitäisi klikata yksi siirtymäsegmenteistä tai alkaa-end transiton. (Huomautus: Voit myös yksiselitteisesti valita minkä tahansa mallin kohteen Model Explorer-näkymässä). Seuraava animaatio kuvaa prosessia:
toisaalta, jos valitset lähtevän valinta-segmentin, et voi siirtää valinta-pseudostaattia. Sen sijaan, voit nyt siirtää vain valitun valinta-segmentti uudelleen liittää sen jonnekin muualle.
Leave a Reply