Tapahtumapohjainen ohjelmointi



Samankaltaiset tiedostot
Graafisen käyttöliittymän ohjelmointi

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Graafisen käyttöliittymän ohjelmointi

Mikä yhteyssuhde on?

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

4. Luokan testaus ja käyttö olion kautta 4.1

Osio 4: Graafinen käyttöliittymä

Olio-ohjelmointi Javalla

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Qt perusteet. Juha-Matti Vanhatupa. (vanhan kurssin Graafisen käyttöliittymän ohjelmointi materiaalia)

Rajapinta (interface)

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Valikot ja työkalupalkit. 2008

YHTEYSSUHDE (assosiation)

Metodien tekeminen Javalla

Luokat ja oliot. Ville Sundberg

Dialogit. Juha Järvensivu 2008

1 Tehtävän kuvaus ja analysointi

1. Omat operaatiot 1.1

Pakkauksen kokoaminen

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

1. Olio-ohjelmointi 1.1

Osio 4: Graafinen käyttöliittymä

5. HelloWorld-ohjelma 5.1

9. Periytyminen Javassa 9.1

HELIA 1 (1) Outi Virkki Käyttöliittymät ja ohjelmiston suunnittelu :04

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

8. Näppäimistöltä lukeminen 8.1

C# Windows ohjelmointi perusopas

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

Pakkauksen kokoaminen

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

812347A Olio-ohjelmointi, X Reflektiivisyys

Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Ta

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

Olio-ohjelmointi Käyttöliittymä

7. Näytölle tulostaminen 7.1

5. HelloWorld-ohjelma 5.1

Metodien tekeminen Javalla

Listarakenne (ArrayList-luokka)

public static void main (String [] args)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Periytyminen (inheritance)

Eclipse 3.2 pikku opas versio 1.0. Esittely Uuden projektin perustaminen Sovelluksen luominen Koodin siistiminen Vinkkejä

19. Olio-ohjelmointia Javalla 19.1

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

8. Näppäimistöltä lukeminen 8.1

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Javan perusteita. Janne Käki

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

1. Mitä tehdään ensiksi?

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Pedacode Pikaopas. Tietokantaa hyödyntävän sovelluksen luominen

Ohjelmointi 2 / 2010 Välikoe / 26.3

QT framework. Juha Järvensivu 2007

17. Javan omat luokat 17.1

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Graafinen käyttöliittymä, osa 1

JAVA-OHJELMOINTI 3 op A274615

Ohjelmistotekniikan menetelmät, koe

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Rinnakkaisuus (.NET) Juha Järvensivu 2007

Java-kielen perusteet

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

9. Periytyminen Javassa 9.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisällys. 15. Lohkot. Lohkot. Lohkot

Ohjelmoinnin peruskurssien laaja oppimäärä

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

15. Ohjelmoinnin tekniikkaa 15.1

UML ja luokkien väliset suhteet

Tiedostonkäsittely ja asetusten tallentaminen. Graafisen käyttöliittymän ohjelmointi Luento 14

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Dialogit. Juha Järvensivu 2007

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

11. Javan valintarakenteet 11.1

Olio-ohjelmointi Virhetilanteiden käsittely

14. Poikkeukset 14.1

Luokan sisällä on lista

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Tietokannat II -kurssin harjoitustyö

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

Transkriptio:

Tapahtumapohjainen ohjelmointi Juha-Matti Vanhatupa (vanhan kurssin Graafisen käyttöliittymän ohjelmointi materiaalia)

Erot perinteisiin sovelluksiin Sovelluksen kulku ei ole ennalta tiedossa. Start A B C D End Dispatcher A C B D End

Perinteinen sovellus void main(string[] args ) { string nimi, hetu, osoite; Console.WriteLine("Anna nimi: "); nimi = Console.ReadLine(); Console.WriteLine("Anna henkilötunnus: "); hetu = Console.ReadLine(); Console.WriteLine("Anna osoite: "); osoite = Console.ReadLine(); } Save(nimi, hetu, osoite);

Tapahtumapohjainen sovellus string nimi, osoite, hetu; static void main() { Application.Run( new Form1() ); } private void nimi_handler(string text){ nimi = text; } private void hetu_handler(string text){ hetu = text; } private void osoite_handler(string text){ osoite = text; } private void tallenna_click(){ Save(nimi, hetu, osoite); Close(); }

Ohjelmoijalle Ohjelman suoritus ei etene alusta loppuun Testaaminen vaikeutuu Kaikkia ohjelman toimintoja ei välttämättä edes koskaan käytetä

Tapahtumia synnyttävät Käyttäjän toimet, hiiren- ja näppäimistön painallukset Ajastimet Käyttöjärjestelmä (Sovellus itse)

Tapahtuman kulku Event generator Event Dispatcher Handler1 Handler2 Handler n

Tapahtuma Tapahtumille ei yleensä määritellä paluuarvoa Windowsissa yleinen tapa on merkitä tapahtuman kuuntelija onetuliitteellä Kuuntelijat tietynlaisia funktioita, jotka rekisteröidään kuuntelemaan tapahtumaa Esim. (Qt4): QPushButton* btnok = new QPushButton(this); connect(btnok, SIGNAL(clicked()), this, SLOT(OnOKCLicked()); void OnOKClicked() { // }

Tapahtumakuuntelijan toteutus QT signaalien ja slottien avulla.net eventtien avulla Java rajapintojen avulla GTK signaalien avulla WinApi sanomien avulla MFC makrojen avulla

Qt esimerkki Tapahtumakuuntelija luodaan kytkemällä olion lähettämä signaali (esim. nappulan clicked signaali) slot-funktioon. Kytkettyjen olioiden ei tarvitse tuntea toisiaan. Signaali lähetetään kun tietty tapahtuma tapahtuu (esim. nappulaa painetaan) ja tällöin kytkettyä slotfunktiota kutsutaan. Luokkien tulee periytyä QObject luokasta (joko suoraan tai periytyen jostain QObjectin aliluokasta) Luokkien esittelyssä tulee olla Q_OBJECT makro

Qt esimerkki class MainWindow : public QMainWindow { Q_OBJECT public: public slots: void helloworld(); };

Qt esimerkki MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { } ui->setupui(this); connect(ui->pushbutton, SIGNAL(clicked()), this, SLOT(helloWorld())); void MainWindow::helloWorld() { } ui->label->settext("hello World!");

Pääikkuna (top-level window) Jokaisella sovelluksella on pääikkuna (main window), joka luodaan ohjelman käynnistyessä. Esim. Qt:ssä mainfunktiossa. Pääikkuna sisältää yleensä otsikon, valikon, reunukset sekä minimize- ja maximize-painikkeet Kun pääikkuna suljetaan, myös sovelluksen suoritus päättyy Pääikkunalla ei ole parent-ikkunaa

Pääikkuna (top-level window)

Lapsikkuna (child window) Lapsi-ikkunalla (child window) on aina yksi isäntäikkuna (parent window) Paikkakoordinaatit suhteessa isäntäikkunaan Lapsi-ikkuna ei voi sijaita isäntäikkunan ulkopuolella

Dialogit Modaalinen vs modaaliton ikkuna Omistus-suhde (owner) Tarkoitettu lyhytaikaiseen kommunikaatioon käyttäjän kanssa Tyypillisesti ei menua, eikä minimize, mazimize painikkeita.

Z-järjestys

Ikkunan fokus Valittuna oleva ikkuna (kuvassa btn1) Komponentti, joka ottaa vastaan näppäinpainallukset jne. Käyttäjä voi vaihtaa focusta esim hiiren tai näppäimistön avulla

Tab-järjestys Tabulaattori-näppäimellä voidaan vaihtaa focus seuraavalle (lapsi)ikkunalle Suunnittele käyttöliittymä aina siten että sitä voidaan käyttää pelkän näppäimistönkin avulla! Tab