Tapahtumapohjainen ohjelmointi. Juha Järvensivu juha.jarvensivu@tut.fi 2007



Samankaltaiset tiedostot
Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Graafisen käyttöliittymän ohjelmointi

Tapahtumapohjainen ohjelmointi

Windowsin sanomanvälitys. Juha Järvensivu 2007

Mikä yhteyssuhde on?

Winapi. Juha Järvensivu 2007

Windowsin sanomanvälitys. Juha Järvensivu 2008

Olio-ohjelmointi Käyttöliittymä

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

11. Javan valintarakenteet 11.1

Olio-ohjelmointi Javalla

Metodien tekeminen Javalla

11. Javan valintarakenteet 11.1

Listarakenne (ArrayList-luokka)

public static void main (String [] args)

Java-kielen perusteet

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Rinnakkaisuus (.NET) Juha Järvensivu 2007

Osio 4: Graafinen käyttöliittymä

Graafisen käyttöliittymän ohjelmointi

17. Javan omat luokat 17.1

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

Rajapinta (interface)

YHTEYSSUHDE (assosiation)

Java UI-komponentit (JTable) Juha Järvensivu 2007

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Delegaatit ja tapahtumakäsittelijät

Java ja grafiikka. Ville Sundberg

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

JAVA-OHJELMOINTI 3 op A274615

Lista luokan sisällä

1. Omat operaatiot 1.1

Harjoitustyö (TKO_2023)

1 Tehtävän kuvaus ja analysointi

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

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

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

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

20. Javan omat luokat 20.1

Valikot ja työkalupalkit. 2008

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Osio 4: Graafinen käyttöliittymä

Ohjelmistotekniikan menetelmät, koe

Luokan sisällä on lista

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

QT framework. Juha Järvensivu 2007

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

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

7. Näytölle tulostaminen 7.1

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Periytyminen (inheritance)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Java-kielen perusteita

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

19. Olio-ohjelmointia Javalla 19.1

ITKP102 Ohjelmointi 1 (6 op)

Muuttujat ja kontrolli. Ville Sundberg

<applet code="simpleaudioapplet.class" width=300 height=300>

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Web Services tietokantaohjelmoinnin perusteet

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Luokan muodostimet (Constructors)

LUKU 17 MUUTAMIA JAVA FX -SOVELLUKSIA. Tässä dokumentissa esitellään muutamia Java FX -sovelluksia.

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

Microsoft Visual Studio 2005

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

9. Periytyminen Javassa 9.1

Metodien tekeminen Javalla

9. Periytyminen Javassa 9.1

Java-kielen perusteet

Ohjelmointiharjoituksia Arduino-ympäristössä

XNA grafiikka laajennus opas. Paavo Räisänen. Tämän oppaan lähdekoodit ovat ladattavissa näiden sivujen Ladattavat osiossa.

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Javan GUI Scratchaajalle

Rinnakkaisohjelmointi, Syksy 2006

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

Java kahdessa tunnissa. Jyry Suvilehto

C# ja.net. Juha Järvensivu 2007

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

5 Näppäimistö. 5.1 Näppäimistön eventit

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

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

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

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

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

ITKP102 Ohjelmointi 1 (6 op)

Transkriptio:

Tapahtumapohjainen ohjelmointi Juha Järvensivu juha.jarvensivu@tut.fi 2007

Sisältö Tapahtumapohjainen ohjelmointi Käyttöliittymän rakenne Pääikkuna (top-level window) Lapsi-ikkuna (child window) Dialogit (owned window) Unkarilainen notaatio

Hollywood Principle "Don't call us; we'll call you." You implement the interfaces, you get registered. You get called when the time is right. This requires a distinctly different way of thinking to that which is taught in introductory programming where the student dictates the flow of control. Dafydd Rees

Tapahtumapohjaisuus käyttöliittymissä Timer Sovellus

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. Button btnok = new Button(); btnok.click += new EventHandler(OnOKClicked); public void OnOKClicked(object sender, EventArgs e) //

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(object sender, EventArgs e) nimi = ((TextBox)sender).Text; private void hetu_handler(object sender, EventArgs e) hetu = ((TextBox)sender).Text; private void osoite_handler(object sender, EventArgs e) osoite = ((TextBox)sender).Text; private void tallenna_click(object sender, EventArgs e) Save(nimi, hetu, osoite); Close();

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

Esimerkki.NET public class MyWindow : System.Windows.Form Button btn = new Button(); public void MyWindow() //... btn.click += new EventHandler(BtnClick); public void BtnClick(object sender, EventArgs e) //

Esimerkki Java public class MyWindow extends JFrame implements ActionListener Button btn = new Button(); public void MyWindow() // btn.addactionlistener(this); public void actionperformed(actionevent e) //

// CMyDlg.h class CMyDlg : public CDialog afx_msg void OnBnClick() DECLARE_MESSAGE_MAP() Esimerkki MFC // CMyDlg.cpp BEGIN_MESSAGE_MAP( CMyDlg, CDialog ) ON_BN_CLICKED(IDC_BTN, &CMyDlg::OnBnClicked) END_MESSAGE_MAP() void CMyDlg::OnBnClick () //

Esimerkki GTK int main(int argc, char *argv[]) // GtkWidget *button = gtk_button_new(); g_signal_connect(g_object(button), clicked, G_CALLBACK(btnclick),NULL); void btnclick(gtkwidget* w, gpointer data) //

Esimerkki WinApi int WinMain( ) CALLBACK WndProc(HWND hwnd, UIT message, WPARAM wparam, LPARAM lparam) HWND hwndbtn; switch( message ) case WM_CREATE: hwndbtn = CreateWindow( button, nimi", WS_CHILD WS_VISIBLE, 0, 30, 100, 30, hwnd, (HMENU) 1, hinst, NULL); break; case WM_COMMAND: if ( LOWORD(wParam) == BN_CLICKED ) if( HIWORD(wParam) == hwndbtn ) //

Esimerkki

Sisältö Tapahtumapohjainen ohjelmointi Käyttöliittymän rakenne Pääikkuna (top-level window) Lapsi-ikkuna (child window) Dialogit (owned window) Unkarilainen notaatio

Pääikkuna (top-level window) Jokaisella sovelluksella on pääikkuna (main window), joka luodaan ohjelman käynnistyessä Pääikkuna sisältää yleensä otsikon, valikon, reunukset sekä minimize- ja maximize-painikkeet Kun pääikkuna suljetaan, myös sovellus sulkeutuu 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 (owner window) Dialogeilla voi kysyä käyttäjältä tietoa ja antaa käyttäjälle palautetta (keskustelu) Dialogi voi olla modaalinen tai modaaliton Omistus-suhde (owner)

Z-järjestys

Ikkunan fokus Valittuna oleva ikkuna (kuvassa btn1) Komponentti, joka ottaa vastaan näppäinpainallukset jne. Fokus voi olla yhdellä komponentilla kerrallaan Fokus voidaan vaihtaa hiirellä klikkaamalla

Tab-järjestys Tabulaattori-näppäimellä voidaan vaihtaa aktiivista komponenttia.net TabIndex TabStop Tab

Sisältö Tapahtumapohjainen ohjelmointi Käyttöliittymän rakenne Pääikkuna (top-level window) Lapsi-ikkuna (child window) Dialogit (owned window) Unkarilainen notaatio

Unkarilainen notaatio class Class1 void createcopy(int & nid, Class1*& pclass); bool copy(class1* pclass); int m_nid; bool Class1::createCopy(int & nid, Class1*& pclass) bool bret = false; nid = m_nid; pclass = new Class1(); if( pclass ) if( pclass->copy(this) ) bret = true; else delete pclass; pclass = NULL; nid = 0; return bret;

Esimerkkejä Tyyppi Etuliite Esimerkki int n nage char ch chinitial float fl flangle double d dsalary unsigned u uid long l lhours BOOL b bdone WORD w wsize DWORD dw dwerror osoitin p pbutton

Lähteitä Event-driven programming (wikipedia) http://en.wikipedia.org/wiki/event-driven_programming Event-Driven programming: Introduction, Tutorial, History http://eventdrivenpgm.sourceforge.net/event_driven_programming.pdf Hollywood principle http://c2.com/cgi/wiki?hollywoodprinciple Windows overviews (top-level, child, owner) http://msdn.microsoft.com/library/default.asp?url=/library/enus/winui/winui/windowsuserinterface/windowing/windows/aboutw indows.asp

Lähteitä Window features http://msdn.microsoft.com/library/default.asp?u rl=/library/enus/winui/winui/windowsuserinterface/windowi ng/windows/windowfeatures.asp Ikkunan fokus http://en.wikipedia.org/wiki/focus_(computing )