Tilat ja tilakoneet

Tilakoneiden käyttäminen käyttäytymisen ja tilasiirtymien määrittelemiseen – selitetään treffisovelluksilla

(20. joulukuuta 2020)

Mikä on tila?

Tietotekniikassa ja tietojenkäsittelyssä järjestelmää kuvataan nimellä tilallinen jos se on suunniteltu muistamaan edelliset tapahtumat tai käyttäjän vuorovaikutukset; muistettuja tietoja kutsutaan järjestelmän tilaksi .

Järjestelmän tilat määritellään usein käyttäjien käyttäytymismenetelmillä. Osavaltiot ovat tärkeitä, koska se on järjestelmällisempi tapa tarkistaa, ovatko tietyt käyttäytymiset tietyissä osavaltioissa päteviä vai eivät.

Liikennevalojen tilat

Harkitse esimerkkinä liikennevaloa. Jos se on ollut vihreä, kuljettajat ja matkustajat odottavat seuraavaksi keltaista – ei punaista. Kun se muuttuu keltaiseksi, he odottavat punaista eikä vihreää. Joten tilat ovat yksinkertaisia:

Green -> Yellow -> Red
^ |
|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|

Seuraa nuolia (eli tilojen sallittuja siirtymiä) ja liikennevalosi on hyvä mennä.

Treffisovellusten vastaavuuksien tilat

Otetaanpa nyt treffisovellus monimutkaisemmaksi esimerkiksi, kuvitellaan, että rakennamme sovellusta ihmisille, jotka sopivat yhteen verkossa. Oletetaan, että algoritmit ovat valmiina ja meidän on aloitettava käyttäjän logiikkaan liittyvien vastaavuuksien takana olevien logiikkojen kirjoittaminen.

Määritetään entiteetti ottelu ensin edustamaan kahden ihmisen välistä ottelua. Ottelulle on useita tiloja, jotka meidän on otettava huomioon suunnitellessamme sitä.

Tarvitsemme osavaltioita, jotta ihmiset eivät näe odottamattomia käyttäytymisiä, kuten satunnainen, ei-sovitettu henkilö. ruudulla ja sanoo hei.

Kuva: Joogasuunnittelu osoitteessa Unsplash

Ajatteluprosessini:

  1. Ensinnäkin ottelu on luotava , mikä tarkoittaa, että tietyllä algoritmijoukolla on valita kaksi henkilöä valmiina otteluun. Algoritmien on tietysti varmistettava etukäteen, että molemmat ovat ottelussa, sopivat toistensa mieltymyksiin, eivät ole kiellettyjä jne.
  2. Sitten tästä ottelusta voi tulla joko odottaa (odottaa toisen henkilön pyyhkäisyä) tai epäonnistui riippuen ensimmäisen käyttäjän toiminnasta. Jos käyttäjä pyyhkäisee oikealle (mikä tarkoittaa ”pidän sinusta” treffisovellusten termeissä), tila hyppää kohdasta luotu odottaa . Jos käyttäjä pyyhkäisee vasemmalle (mikä tarkoittaa ”en pidä sinusta”), tila muuttuu tilaan epäonnistui .
  3. Jos sitten molemmat ihmiset pitävät toisistaan, se siirtyy odottavasta -kohtaan osui .
  4. Kumpikin ottelussa olevista henkilöistä voi myös ”purkaa” ottelun, jolloin tila verraton .
  5. Luulen, että katsin kaikki tilojen muutokset. Mutta ovatko kaikki nämä? Hmm … eikö ole maksettua ominaisuutta nimeltä ”kelaus”, jonka avulla voit palata takaisin ja pyyhkäistä uudelleen? Mitä meidän pitäisi tehdä tämän kanssa?

Kuinka voimme varmistaa, että olemme sisällyttäneet kaikki muutokset? Jos on, miten se ohjelmoidaan?

Mikä on tilakone?

Menetelmä sellaisen elimen käyttäytymisen mallintamiseksi, jolla on vakiintunut elinkaari

Kun rakennetaan tilakeskeisiä järjestelmiä, tilakoneet ovat hyödyllisiä, jotta voimme paremmin määrittää monimutkaiset siirtymät ja laukaisimet.

Äärelliset tilakoneet (FSM)

Se on abstrakti kone , joka voi olla täsmälleen jossakin rajallisesta joukosta tiloja milloin tahansa. Mikronesmi voi vaihtaa tilasta toiseen vastauksena joihinkin tuloihin ; tilasta toiseen siirtymistä kutsutaan siirtymäksi . Mikronesian määrittelee luettelo sen tiloista, sen alkutilasta ja syötteistä, jotka käynnistävät jokaisen siirtymän.

Jatketaanpa treffisovellusesimerkkiämme.Jos luomme -tilakaavion logiikasta -tuloksen , se näyttää hieman tältä:

* Eri osapuolet voivat käyttää erilaisia ​​menetelmiä: joko vastaavia asiakkaita tai treffisovellusta (alustanrakentaja / yritys).

Siinä on rajallinen määrä tiloja, jotka mallintavat kaiken käyttäytymisen ottelun elinkaaressa. Tilakoneen rakentamiseksi meidän on vain noudatettava rivejä ja katsottava, kuinka entiteetti reagoi erilaisiin käyttäytymisiin.

Miksi minun pitäisi käyttää tilakonetta?

Okei, nyt tiedän sen tilakaavio on todella hyödyllinen, mutta silti miksi minun pitäisi käyttää tilakonetta kirjoittaessani koodia?

Katsotaanpa samasta esimerkistä yksinkertaistettua koodia ennen ja -tilan jälkeen.

Ennen tilakoneen käyttöä

Voit havaita paljon if/else -lausekkeet.

Tilakoneen käytön jälkeen

Anna ChangeState -menetelmän hoitaa tilasiirtymät käyttämällä StateTransition -tyyppiä. Kaikki muut menetelmät voivat nyt keskittyä ottelun käsittelylogiikkaan.

Mitä muuta voin tehdä?

Vain muutamia mainitakseni:

  • Toistaiseksi oletamme, että ”Rewind” -menetelmät ovat riittävän hyvät käyttöliittymän soittamiseen. Hienomman tavan käsitellä menetelmiä pitäisi olla tarkistaa, onko ottelu tallennettu – ja jos on, pidetäänkö siitä vai ei – ja sitten päättää, mitä komentoa käyttää. Sen sijaan, että annat käyttöliittymän päättää (ja vaarantaa sen olevan väärä), on suositeltavaa, että käsittelemme sitä luokassa MatchEntity.
  • Jos tila siirtyy tulla liian monimutkaiseksi, kokeile matriisia, jossa on nykyisten tilojen ja komentojen akseli. Matriisin tiedot voivat olla päivitetyt tilat. Näin koodista tulee luettavampi.

Yhteenveto

Miksi siis käyttää valtion konetta? Koska tilanmuutostapahtumat (eli entiteetin tärkeät käyttäytymismallit) huomioon ottaen se mallintaa järjestelmää paremmin. Lähinnä kaikki muu voidaan ratkaista CRUD-perusmenetelmillä. Se tekee koodistasi myös luettavamman ja ylläpidettävämmän.

Kun on kyse sovellusliittymien rakentamisesta, älä suunnittele niitä vain tuotepäälliköiden pyyntöjen perusteella. Suunnittele entiteettisi sovellusliittymät (vähintään vähintään API: t) kriittiset käyttäytymiset ja siirtymät – tilat huomioon ottaen.

Viite

Richard Clayton – Käytä tilakoneita!

Äärelliset tilakoneet (FSM, tai tämän viestin yhteydessä yksinkertaisesti ”valtion koneet”) ovat menetelmä…

rclaytonin mallintamiseksi. silvrback.com

Rajallinen kone

Rajallisen tilan kone (FSM) tai äärellisen tilan automaatti (FSA, monikko: automata), äärellinen automaatti tai yksinkertaisesti tila …

fi.wikipedia.org

Yksinkertainen tilakoneesimerkki kohdassa C #?

Olen juuri osallistunut tähän: https://code.google.com/p/ysharp/source/browse/#svn\%2Ftrunk\%2FStateMachinesPoC Here ”s …

stackoverflow.com

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *