C-, C++, PC osana mittausjärjestelmää 

Moi oon Olli. Ollaanko nähty jossain?

Opintojakson suoritus

  • Saattaa kuulostaa tutulta
    • 60p: Viope, Tuubi/Wikitehtävät, tentti
  • Tuubi/wikitehtäviä ei tarvitse tehdä järjestyksessä
  • Viope: Olio-ohjelmoinnin perusteet C++ -kielellä
  • Tentti n. 24p, läpipääsyraja 6p

Aihealueet

  • Olio-ohjelmointi
    • Viope-kurssi
    • Qt/moodle-tehtävät
  • Tilakoneet
    • Tilat, tilojen komennot, siirtymät, haarautuminen, sisäkkäiset tilakoneet, ks. teoria
    • Tilakoneiden toteutus
      • Switch case
      • Qt
      • Twincat?

Ohjelmointi on... (Viope)

  • Ongelman määrittelemistä
  • Ongelman ratkaisemista
  • Ratkaisun muuttamista toimintasuunnitelmaksi eli algoritmiksi
  • Algoritmin muuttamista lähdekoodiksi ohjelmoimalla/koodaamalla
  • Lähdekoodin kääntämistä konekieliseksi ohjelmaksi
  • Ohjelman testausta
  • Ohjelman virheiden korjaamista
  • Dokumentointia

Vaatimusmäärittely

mieleenpalautusta

Viope:
Vaatimusmäärittely, algoritmin rajaus

  • Tahvo haluaisi tulla Helsinkiin 
  • Rajaus: Lentäen
  • Mitkä ovat askeleet?

Viope, Algoritmi 1.0: Matka Rovaniemeltä Helsinkiin

  • Mene lentoasemalle

  • Osta lippu
  • Mene lentokoneeseen
  • Juo kahvit
  • Poistu lentokoneesta
  • Mene lentoaseman pääsisäänkäynnille
  • Odota, kunnes tulen hakemaan

Yksityiskohtaisesti!

1. Mene lentoasemalle:
	1.1. Astu kotiovesta ulos 
	1.2. Ota matkapuhelin taskusta 
		1.2.1. Jos matkapuhelin ei ole taskussa, hae se sisältä ja palaa kohtaan 1.1. 
		1.2.2. Jos matkapuhelin on taskussa, soita taksikeskukseen ja tilaa taksi 
	1.3. Odota, kunnes taksi saapuu 
	1.4. Astu taksiin 
	1.5. Kerro kuskille meneväsi Rovaniemen lentoasemalle 
	1.6. Odota, kunnes taksi on perillä ja taksimies kertoo hinnan 
	1.8. Maksa taksimatka
	1.9. Astu ulos taksista 
	1.10. Astu sisään lentoasemalle 

2. Osta lippu: 

	2.1. Etsi lipunmyyntipiste 
	2.2. Mene jonoon, kun olet löytänyt pisteen 
	2.3. Odota jonossa 
	2.4. Kun pääset luukulle, pyydä lentolippua Helsinkiin 
	2.5. Kysy lipun hinta 
	2.6. Kun myyjä ojentaa lipun, anna rahat ja ota lippu 
  
3. Mene lentokoneeseen: 
	3.1. ... 
	3.2. ... 
	3.3. ...
	... 

Vaatimusten määrittely?

  • Miten liikennevalot toimii?
  • Sanallinen kuvaus: mitä tulee ensin mieleen

Tilakoneet

Vaatimusmäärittely

Osion tavoitteet

Perusymmärrys tilakoneista

Osion tavoitteet

Perusymmärrys tilakoneista 2

 

  • Jos tilakoneessa ei ole sisäkkäisiä tiloja, tilakone voi olla vain yhdessä tilassa kerralla
  • Tilakoneiden toteutus Switch casella, QTimerillä

Pidemmälle menevää asiaa

(Tentissä lisäpisteitä)

 

  • Sisäkkäiset tilakoneet
  • Qt:n käyttöliittymät
  • Ikuinen luuppi -tilakoneet

 

Vaatimusten määrittely

  • Tarkempi kuvaus
  • Toiminnallisuuden vaiheittainen kuvaus
  • Mitä informaatiota järjestelmä sisältää?

Tilakonemalli

UML-kaavio

Caps lock?

-> Mallinna

Piirto-ohjelma

Tilakoneen toteuttaminen

  • Switch case
  • Qt:n QStateMachine ja QState -luokat

Tilakoneen toteutus

typedef enum
{
    STATE_1 = 0,
    STATE_2,
    STATE_3
} my_state_t;

my_state_t state = STATE_1;

void foo(char input)
{
    ...
    switch(state)
    {
    	case STATE_1:
    		if(input)
    			state = STATE_2;
    		break;
    	case STATE_2:
    		if(input)
    			state = STATE_3;
    		else
    			state = STATE_1;
    		break;
    	case STATE_3:
    		...
    		break;
    }
    ...
}

Tilakoneiden käytettävyydestä

  • Tiloja voidaan kutsua myös moodeiksi
  • Käyttöliittymäsuunnittelussa usein ongelmallisia
  • Käyttöliittymässä on tila, jos käyttöliittymässä sama kontrolli (widget, esim painike) tekee eri tilanteissa eri asioita
  • Tilat, niiden vaihtuminen, ja tilojen vaihtumisen seuraukset kannattaa tehdä hyvin näkyviksi ja ennustettaviksi
  • Valikot? Tabit? Ikkunat?

 

http://savolai.net/software/moodle/2011/08/27/dangers-of-moded-user-interfaces/

 

Tilakoneen toteutus Qt:ssa

Tilakoneet Qt:ssa

  • Qt:n oman ajastimen QTimerin käyttö vaatii että on luokkia ja niissä sloteja, joita ajastin voi laukoa
     
  • Tilakoneen tilan välittäminen erikseen tapahtumankäsittelijäfunktiolle on kömpelöä. Luokassa tila voi olla luokan jäsenmuuttujana
     
  • Esim. reaaliaikajärjestelmissä tilakone tikkaa tietyn millisekuntimäärän välein. Tehdään tilakone, joka havainnollistaa tätä logiikkaa

Isompi tilakone

Alitilakoneet

Tehtävät

PC osana mittausjärjestelmää

By Olli Savolainen

PC osana mittausjärjestelmää

  • 2,640