Esittelin kirjoituksen edellisessä osassa kaksi erilaista tapaa toteuttaa tilakone ohjelmointikielen tasolla. Ensimmäistä tapaa kutsuimme tapahtumapohjaiseksi malliksi. Sitten esittelin tästä ”standardimallista” hieman poikkeavan mallin, jota kutsuimme tilaa lukevaksi tai pollaavaksi malliksi. Tässä sarjan viimeissä osassa kuvaan minkälaisia käytännön ongelmia tilakoneen toteutuksessa voi olla, ja miten mallit pystyvät vastaamaan näihin haasteisiin.

Tilaräjähdysongelma

Kun erilaisten tapahtumien ja niitä lähettävien rinnakkaisten toimijoiden lukumäärä kasvaa, tapahtuu tilakoneen tilasiirtymien sekä ulospäin lähtevien käskyjen kaikkien mahdollisten lomitusten määrässä tyypillisesti eksponentiaalinen kasvu. Lue lisää

Kuten sarjan ensimmäisessä osassa lupasin, esittelen tässä osassa kaksi hieman toisistaan poikkeavaa lähestymistapaa siihen, miten tilakone voidaan käytännössä toteuttaa ohjelmointikielellä. 

Ensimmäiseksi tarkastelemme melko suoraviivaista tapaa toteuttaa tilakone. Oletamme, että kielenä on Javan tai C#:n tapainen olio-ohjelmointikieli. Lähestymistavassa tilat ovat luokkia ja tapahtumat niiden metodeja. Esimerkkinä käytämme 1. osassa esiteltyä suljetun tilan valvontajärjestelmää. Lue lisää

Tilakonetta voi käyttää reaktiivisen ohjelmistojärjestelmän mallintamiseen ja toteutukseen tilanteessa, jossa täytyy sekä reagoida reaalimaailmasta tuleviin tapahtumiin että saada vastineeksi aikaan muutoksia maailmassa. Esimerkkinä käytän valvontajärjestelmää suljetulle tilalle.

Tilakoneella tarkoitetaan systeemiä, joka koostuu tiloista ja niiden välisistä tilasiirtymistä. Tilasiirtymiä aiheuttavat yleensä jotkin ulkoa tulevat syötteet, ja ne voivat tuottaa ulospäin näkyviä tuloksia.

Yksinkertaisimmillaan tilakone lukee jonoa symboleita, suorittaa tilasiirtymiä syötteiden mukaisesti ja joko hyväksyy tai hylkää tietyt syötejonot tai tuottaa siirtymien tuloksena jonon tulosarvoja. Lue lisää