Ohjelmoinnin peruskurssien laaja oppimäärä

Koko: px
Aloita esitys sivulta:

Download "Ohjelmoinnin peruskurssien laaja oppimäärä"

Transkriptio

1 Ohjelmoinnin peruskurssien laaja oppimäärä Luento 18: Graaset käyttöliittymät Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä)

2 Sisältö 1 Graasten käyttöliittymien oliomalli 2 Graikan piirtäminen itse 3 Komponentteja ja säiliöitä 4 Komponenttien asettelu 5 Tapahtumankäsittelijät 6 Composite- ja Observer-suunnittelumallit 7 Lisälukemista

3 Yleiskatsaus Graafinen käyttöliittymä sisältää nappeja, menuja, checkboxeja, paneeleja jne... Jotta voi rakentaa toimivan graafisen käyttöliittymän, tarvistee tietää : kuinka graafisia komponentteja luodaan kuinka ne saadaan näkyviin ruudulle kuinka ne saadaan ruudulla sinne minne halutaan kuinka ne saadaan tekemään jotain

4 Miten luodaan graafinen komponentti? Graafisia komponentteja luodaan kuten mitä tahansa muita javan olioita. JButton painike; painike = new JButton( Paina tästä! ); JFrame ikkuna; ikkuna = new JFrame( Ikkunan otsikko ); JPanel paneeli; paneeli = new JPanel(); //Paneeliin voi laittaa muita komponentteja

5 Miten komponentin saa mukaan käyttöliittymään? Osa käyttöliittymän osista on tarkoitettu toisten graafisten komponenttien säilytykseen ns. Container (säiliö) Näistä lisää myöhemmin luennolla Komponentin saa käyttöliittymän osaksi lisäämällä sen johonkin ikkunaan tai ikkunan sisältämään säiliöön komponenttien lisäämisestä säiliöihin myöhemmin luennolla Se tulee ruudulle kun ikkuna, jonka sisällä se on, laitetaan näkyviin Ikkunan laittamisesta näkyviin myöhemmin luennolla

6 Miten komponentin saa haluaansa paikkaan ruudulla? Komponenttien sijoittelu tehdään ns. Layout managerilla Layout manager yrittää parhaansa mukaan sijoitella komponentit jonkin säiliön sisällä ohjelmoijan toiveiden mukaisesti. Eri managerit asettelevat komponentit eri tavoin. Jokaisella säiliöllä on siis Layout manager, joka päättää miten sen sisältämät komponentit laitetaan esille tästä lisää myöhemmin luennolla

7 Missä graaset käyttöliittymät ovat tällaisia? melkein kaikki graaset käyttöliittymäkirjastot käyttävät samankaltaista oliomallia jopa kielissä, jotka eivät tue olioita (esim. C ja GTK) siellä olioita simuloidaan kuten kevään Scheme-tehtävissä malli on myös perusrakenteeltaan useimmiten hyvin samanlainen komponentteja, säiliöitä, sijoitteluasetuksia, painalluksiin ym. tapahtumiin reagoimista, jne. komponentitkin ovat enimmäkseen samoja, joskin eri näköisiä vaihtoehtoisia malleja (harvinaisia): matalamman tason malli: kirjasto tarjoaa vain piirtoalustan, ei komponentteja (esim. SDL, OpenGL) lomakemalli: esim. WWW-sivu tarjoaa lomakkeen ja saa sen täytettynä selaimelta (Web-sovelluksille tämä ei yleensä riitä) muitakin (esim. funktionaalisia) GUI-malleja on esitetty, mutta lähinnä tutkimusmielessä

8 Sisältö 1 Graasten käyttöliittymien oliomalli 2 Graikan piirtäminen itse 3 Komponentteja ja säiliöitä 4 Komponenttien asettelu 5 Tapahtumankäsittelijät 6 Composite- ja Observer-suunnittelumallit 7 Lisälukemista

9 AWT-kirjasto Java API:ssa on kaksi graafisten käyttöliittymien kasaamiseen tarkoitettua kirjastoa AWT Swing AWT Abstract Windowing Toolkit on Java APIn kahdesta GUIkirjastosta vanhempi Tällä kurssilla käytetty kirjasto on Swing Tulemme tarvitsemaan (ei komponentti)-luokkia myös AWT:stä Monet Swing-kirjaston luokista käyttävät AWT-luokkia tai periytyvät suoraan niistä.

10 Grafiikkaa Swingillä Oman grafiikan piirtäminen Swing-käyttöliittymässä on varsin helppoa. 1) Periytä uusi luokka JPanel-luokasta 2)Korvaa paintcomponent(graphics g)-metodi Graphics-luokan API-dokumentaatiosta selviää mitä kaikkea sillä voi tehdä piirtää ympyröitä, suorakulmioita, viivoja, tekstiä jne... Swing komponenttien paintcomponent-metodin parametri on yleensä Graphics2D-tyyppinen tyyppipakotuksen jälkeen voit piirtää myös bezier-käyriä, jne... Seuraavassa yksinkertainen esimerkki... 21:32

11 import java.awt.color; import java.awt.dimension; import java.awt.graphics; import javax.swing.jpanel; public class Ympyra extends JPanel { // piirretään Graphics-olion kautta ruudulle // punainen ympyrä ja tekstiä public void paintcomponent ( Graphics g ) { g.setcolor( Color.RED ); g.drawstring( "Maailman hienoin ympyrä!", 10, 10 ); g.drawoval(20,30,100,100); } // pyydetään vähän enemmän tilaa ettei pack // paina komponenttia kasaan. public Dimension getpreferredsize() { return new Dimension(200,200); } paintcomponent-metodia kutsutaan automaattisesti kun käyttöliittymän alue piirretään. Tyypillisesti et siis kirjoita tämän metodin kutsua minnekään itse. } 21:32

12 import javax.swing.jframe; public class PaaIkkuna extends JFrame { public static void main( String[] args ) { PaaIkkuna ikkuna = new PaaIkkuna(); ikkuna.setvisible(true); ikkuna.pack(); } public PaaIkkuna() { super("maailman hienoin ikkuna"); //Ikkunan sulkeminen lopettaa koko ohjelman this.setdefaultcloseoperation(jframe.exit_on_close); } Ympyra ympyra = new Ympyra(); this.getcontentpane().add(ympyra); } 21:32

13 Entä Scalassa? Scalassa käytetään samaa Swing-kirjastoa kuin Javassa kuitenkin hieman eri tavalla: Java-rajapinnan päälle on tehty Scala-maisempi rajapinta pakettiin scala.swing perusrakenne on sama, mutta muutama yksityiskohta on tehty eri lailla (esim. layout managerit ja tapahtumat) moni asia toimii samoin kuin Javassa (ja melkein kaikkea voi tehdä Java-tavalla, Scala-tapa vain voisi olla siistimpi) esimerkiksi piirtämiseen Scalassa ei ole varsinaisesti mitään omaa: käytetään samoja Graphics- tai Graphics2D-luokan metodeja valitettavasti dokumentaatio on (vielä?) hajallaan Java- ja Scala-kirjastojen dokumenteissa ja Scalan Swing-kirjasto on muuttunut Scalan mukana mutta tällä kurssilla ei tarvitse mennä yksityiskohtiin

14 Mitä paintcomponentin pitää tehdä? GUI-kirjastoissa piirtämistä ei yleensä voi tehdä vain kutsumalla piirroskomentoja sieltä täältä muualta ohjelmasta sillä ohjelman pitää milloin tahansa osata piirtää ikkunansa uudelleen käytännössä paintcomponent-metodia kutsutaan esim. kun käyttäjä tuo ikkunan näkyviin toisen ikkunan alta käyttöliittymäkirjasto ei siis (yleensä) talleta piirrettyä kuvaa mihinkään itse joissain käyttöliittymäkirjastoissa voidaan myös pyytää piirtämään uudelleen vain osa komponentista yleensä paintcomponent tehdään piirtämään ikkuna jossain muualla ohjelmassa tallessa olevien ohjeiden mukaan poikkeus: jos kuva vaihtuu tiheään (esim. reaaliaikainen peli, jonka kuva päivittyy monta kertaa sekunnissa), ei välttämättä ole hyötyä piirtää vanhaa kuvaa uudelleen

15 Sisältö 1 Graasten käyttöliittymien oliomalli 2 Graikan piirtäminen itse 3 Komponentteja ja säiliöitä 4 Komponenttien asettelu 5 Tapahtumankäsittelijät 6 Composite- ja Observer-suunnittelumallit 7 Lisälukemista

16 Komponenttityypit Esimerkki: www-selaimen ikkuna sisältää tyypillisesti valikkorivin, jonkinlaisen painikkeiden rivin, tilan jossa wwwsivut näytetään, sekä jonkinlaisen statusrivin ruudun alalaidassa Valikkorivi sisältää joukon valikoita Jokainen valikko taas sisältää joukon valikkoalkioita Painikerivi sisältää painikkeita sekä tekstikentän johon sivun osoitteen voi kirjoittaa Graafiset komponentit voivat sisältää toisia graafisia komponentteja. Vastaavasti näiden sisään voidaan asettaa toisia komponentteja Pohdi, millaisiin suorakaiteen muotoisiin alueisiin käyttämäsi ohjelman käyttöliittymä jakautuu

17 JPanel Mikäli olisimme rakentamassa mainitun kaltaista selainta, voisi painike/osoiteriviä kuvata luokan JPanel oliolla. JPanel on komponentti, jonka tehtävä on toimia kuin laatikko, johon voidaan lisätä joukko muita komponentteja. Säiliöt Käyttöliittymät rakennetaan tyypillisesti tällaisista laatikoista, joilla tila saadaan jaettua sopivankokoisiin ja muotoisiin suorakaiteisiin. JPanelin lisäksi monet muutkin komponentit voivat sisältää muita komponentteja: JFrame, JWindow, JScrollpane, jne.. Tällaisia komponentteja, joiden tehtävä on tavallaan säilöä muita komponentteja ja jäsentää niiden sijoittelua kutsutaan yhteisesti nimellä container, säiliö

18 Top-level Containers Top-level container on säiliö, jota ei voi (eikä tarvitse) sisällyttää muihin säiliöihin. Jotta muita komponentteja voitaisiin näyttää ruudulla, niiden täytyy sisältyä komponenttien hierarkiaan, jonka huipulla on jokin Swingin Top-level Container. JFrame Ohjelman ikkuna JApplet www-sivuille sijoitettava sovelma JDialog Apuikkuna, jolla voidaan esittää eri kysymyksiä jne. Vaikkapa ladattavan tiedoston valinta, jne. Jokainen Swing:in ylimmän tason säiliö sisältää alueen nimeltä contentpane johon lisättävät komponentit lisätään. Tähän alueeseen haetaan viittaus metodilla getcontentpane() jonka jälkeen sen kanssa voi toimia pitkälti kuin se olisi JPanel

19 JButton Ehkä helpoimmin hahmotettava Swing:in komponenteista on painonappi, JButton Napissa voi esittää joko tekstiä, kuvan tai molemmat. Halutessa teksti voi olla myös HTML-muotoista, jolloin sitä voi muotoilla vapaammin. Yleisesti tarvittavia metodeja luokassa on vähän. Alla annetulla listalla pärjää pitkälle. konstruktorit addactionlistener kuuntelijoiden lisäämiseen setenabled asettaa sen, toimiiko nappi vai onko se inaktiivinen, harmaa settext(string teksti) vaihtaa nappulan tekstin

20 Tekstikomponentteja JLabel komponentti, johon ei tyypillisesti liity mitään toiminnallisuutta. Sen avulla voi halutussa tilassa esittää jotakin tekstiä. JTextField yksirivinen tekstikenttä, jonka sisältöä voi tarvittaessa muuttaa. Tekstin muuttumista voi seurata ActionListenerillä, joka reagoi enter:in painallukseen Vastaavasti tekstin muuttumista sitä muutettaessa voi seurata liittämällä tekstikentän sisältämään tekstidokumenttiin DocumentListener:in Tekstin voi toki lukea milloin vain, esim kun muualla käyttöliittymässä painetaan jotain nappia. JPasswordField kuten edellä, mutta arvattavin muutoksin

21 Entä Scalassa? Swing-komponenteista ja säiliöistä on myös Scala-versiot paketin scala.swing luokat ja oliot yleensä sama nimi kuin Javassa mutta ilman J-kirjainta alussa Java-rajapintaakin voi käyttää (tai molempia sekaisin) Scala-rajapintakin luo taustalle samat Java-Swingin oliot Pieni graanen Scala-ohjelma HelloGUI.scala import scala.swing._ import scala.swing.event._ object HelloGUI extends SimpleSwingApplication { def top = new MainFrame { title = "Hello" val label = new Label { text = "Hello, world!" } val quit = new Button { text = "Quit" } contents = new GridBagPanel { var c = new Constraints add(label, c); add(quit, c) border = Swing.EmptyBorder(15, 15, 15, 15) } listento(quit) reactions += { case ButtonClicked(`quit`) => exit(0) } } }

22 Sisältö 1 Graasten käyttöliittymien oliomalli 2 Graikan piirtäminen itse 3 Komponentteja ja säiliöitä 4 Komponenttien asettelu 5 Tapahtumankäsittelijät 6 Composite- ja Observer-suunnittelumallit 7 Lisälukemista

23 Komponenttien asettelu Sijoittelu Kuten jo mainittiinkin, on käyttöliittymäkirjastossa ns. säiliöitä (container), jotka voivat sisältää toisia komponentteja. Komponentin voi lisätä säiliöön antamalla sen parametrina säiliön metodille add(komponentti) Vastaavasti komponentin voi poistaa metodilla remove(komponentti) Säiliö pitää listaa sisältämistään komponenteista, esim. jotta se voisi tarvittaessa välittää tapahtumia se voisi pyytää sisältämiään komponentteja piirtämään itsensä Huom: Composite-suunnittelumalli se voisi laskea komponenteille tarvittaessa uuden sijoittelun ruudulla

24 Komponenttien asettelu Milloin viimeksi näit ohjelman jonka ikkunan kokoa ei saanut muuttaa? (poislukien pelit...) Javalla rakennettujen käyttöliittymien yksi perusidea on, että komponenteille ei määrätä kiinteitä paikkoja ruudulla, vaan niiden paikat ja sijainnit muuttuvan dynaamisesti, kun säiliö, johon ne on lisätty muuttaa muotoaan. Jokaiseen Javan säiliötyyppiin on liitetty ns. Layout Manager, joka laskee säiliön sisältämille komponenteille nämä paikat

25 Komponenttien asettelu AWT API:n mukana tulee joukko erilaisia Layout Managereja, joista seuraavassa muutama yleisimmin käytetty FlowLayout Asettelee komponentit riveittäin (kuten tekstin sanat), kunnes riville ei mahdu enempää, jolloin vaihdetaan riviä. GridLayout Asettelee komponentit taulukkoon siten että jokaisen komponentin leveys ja korkeus ovat samat. Venyttää komponentit niin että ne täyttävät koko ruudun. BoxLayout Asettelee komponentit joko vaakaan tai pystyyn, niin että asettelusuunnassa komponentit ovat halutun kokoisia (preferredsize) ja toisessa suunnassa saman kokoisia. Näillä kolmella pääsee jo pitkälle...

26 Komponenttien asettelu...jatkuu GridBagLayout Monimutkaisempi layout manager, jolla voi tehdä melkein mitä vain (mm. imitoida kaikkia yllämainittuja managereja) Tällä voi asettaa osan komponenteista vakiokokoisiksi, osan kokoaan muuttaviksi jne.

27 Komponenttien asettelu Älä yritä tehdä kaikkea kerralla. Käytännössä käyttöliittymän rakentamisessa käytetään apuna säiliöitä, kuten JPanel, joilla alue ensin jaetaan osiin. luonnollisesti paneelienkin koot määrää jokin layout manager Jokaisen paneelin sisällön voi jakaa halutessaan alipaneeleihin jne. ja määritellä näille kaikille tilanteeseen sopivat layout managerit. pack() On usein kätevää kutsua ylimmän tason säiliölle juuri ennen sen asettamista näkyviin metodia pack(). pack() asettelee säiliön ja muuttaa ikkunan sen kokoiseksi että kaikki komponentit näkyvät, mikäli mahdollista.

28 Muuta asettelusta joskus asettelussa ei tueta ikkunoiden koon muuttamista vaan komponentit sijoitetaan pikselikoordinaatistoon jolloin erilaisia säiliöluokkia ja layout manageria tms. ei tarvita mutta tämän aiheuttama jäykkyys näkyy ohjelmoijallekin: esimerkiksi tekstien kääntäminen toiselle kielelle voi vaatia ikkunan skaalaamista monissa GUI-kirjastoissa on myös erillinen graanen työkalu käyttöliittymien tekemiseen useimmiten tukevat myös skaalattavien ikkunoiden tekemistä (eri säiliöluokkia yms.) tuottavat joko koodia tai datatiedoston, jonka voi ladata koodista

29 Sisältö 1 Graasten käyttöliittymien oliomalli 2 Graikan piirtäminen itse 3 Komponentteja ja säiliöitä 4 Komponenttien asettelu 5 Tapahtumankäsittelijät 6 Composite- ja Observer-suunnittelumallit 7 Lisälukemista

30 Miten GUI-ohjelmaa suoritetaan? useimmiten graasissa ohjelmissa ohjelman suoritusmalli on erilainen kuin tavallisissa ohjelman kannalta katsottuna (yksinkertaistaen): main-metodia tms. ei ole (tai siinä ei näy kaikkea) ohjelmasta ei näy suoritusjärjestystä, jossa asiat tapahtuvat vaan ohjelma toimii reagoimalla tapahtumiin (event) esim. käyttöliittymän napin painaminen käynnistää tätä tapahtumaa käsittelevän koodin ei siis niin päin, että koodin keskellä olisi read-kutsu tms., joka jäisi odottamaan ja palauttaisi käyttäjältä saadun syötteen useimmat yksittäiset tapahtumankäsittelijät ovat melko yksinkertaisia ja muuttavat ohjelman tilaa (esim. globaaleja muuttujia) tapahtuman mukaisesti

31 Mitä oikeasti tapahtuu? miten edellä kuvattu tapahtumapohjainen suoritusmalli toteutetaan? GUI-ohjelmassa on main, joka luo käyttöliittymäkomponentit ja jää lopulta silmukkaan (ns. event loop) odottamaan tapahtumia tämä silmukka on normaalisti GUI-kirjaston sisällä eli ei suoraan näy itse ohjelmassa silmukka lähettää kunkin tapahtuman sen käsittelijälle tapahtumankäsittelijä on funktio tai metodi, jonka ohjelmoija on esim. käyttöliittymäkomponenttia luodessaan antanut tee nappi, jonka painalluksista kutsutaan tätä funktiota tällainen funktio on nimeltään takaisinkutsu (callback function) sitä ei (yleensä) kutsuta suoraan ohjelmasta käsin tapoja ajatella: suoritus on asynkronista (ei siis tahdissa käsky kerrallaan) tai reaktiivista (reagoidaan tapahtumiin eikä jäädä kesken koodin odottamaan vastausta)

32 Peräkkäin vai yhtäaikaa? yleensä tapahtumankäsittelijöitä kutsutaan peräkkäin ei siis yhtäaikaa eli rinnakkain tyypillisesti käyttöliittymä ei reagoi, kun suoritus on tapahtumankäsittelijäfunktion sisällä joten funktion on syytä olla nopea entä jos GUI-ohjelmassa haluaa tehdä jotain pitkäkestoista? kirjastoissa on erikseen tapa määritellä taustalaskentaa (kutsu tätä aina kun tapahtumia ei ole saatavilla) sekä ajastettuja tapahtumia (kutsu tätä sekunnin välein) mutta näitäkin kutsutaan muun tapahtumakäsittelyn joukossa, joten yksittäisen funktion suoritus ei saa kestää kauaa (muuten käyttöliittymä jää jumiin siksi aikaa) pitkäkestoinen laskenta pitää siis paloitella lyhyisiin osiin toinen tapa on käyttää rinnakkaisuutta (josta myöhemmällä luennolla)

33 Tapahtumat - events Event Kun hiirellä tai näppäimistöllä tehdään yleensä ottaen mitä tahansa käyttöliittymässä, syntyy tapahtumia Komponentit tiedottavat niihin kohdistuneista käyttöliittymätapauksista luomalla tapahtunutta kuvaavan tapahtumaolion Tapahtumaolio sisältää kaiken olennaisen tiedon tapahtuneesta asiasta Näitä tietoja tapahtumia seuraava taho, tapahtumankuuntelija, voi käyttää miten haluaa Vrt. kirjeenvaihto Tapahtumaolio (Event) on kuin kirje jolla lähettäjä kertoo kaikille ystävilleen mitä lähettäjälle on tapahtunut EventListener (selitetään kohta) on kirjeen vastaanottaja

34 Tapahtumat - events Tapahtumatyyppejä on monia erilaisia Eri tyyppisille asioille on kaikille omat AWTEventluokan aliluokkansa ActionEvent kuvaa jotakin komponenttiin liittyvää korkean tason tapahtumaa, kuten napin painaminen jne. Tällöin komponenttia kuuntelevat oliot voivat keskittyä siihen, mitä tapahtui, sen sijaan että niiden tarvitsisi tulkita komponentin tapahtumia hiiren tai näppäimistön toiminnasta kertovista tapahtumista. ActionEvent:it lähetetään kaikille ActionListener-olioille jotka on rekisteröity komponentin kuuntelijoiksi

35 Tapahtumat - events Lisää tapahtumia MouseEvent kertoo hiiren painalluksista MouseMotionEvent hiiren liikkeistä ComponentEvent komponenttien kokojen muutoksista, näkymisestä jne AdjustmentEvent scrollbar :ien arvojen muutoksista jne... (näitä on paljon)

36 Tapahtumankuuntelijat Tapahtumankuuntelijaksi, (EventListener) kutsutaan oliota, joka: Täyttää halutun kuuntelijarajapinnan Sisältää usein vain muutaman metodin, joita kuunneltava komponentti kutsuu kun jotain tapahtuu esim ActionListener-rajapinnan void actionperformed(actionevent ae) Tyypillisesti metodi vain saa parametrina tapahtumaolion, joka kuvaa mitä tapahtui. Voidaan rekisteröidä kuuntelemaan mitä jossakin komponentissa tapahtuu. Kuuntelee vain tietyntyyppisiä tapahtumia esim public void addactionlistener(actionlistener lisattavakuuntelija)

37 TapahtumanKuuntelijat Esimerkki : painonapin (Button) painamiseen reagoiva ohjelma public class NapinKuuntelija implements ActionListener { public void actionperformed(actionevent tapahtuma){ System.out.println( Nappia painettiin!! ); } } public class JokuLuokka extends...{ private JButton painike;... painike = new JButton( Paina tästä! ); painike.addactionlistener(new NapinKuuntelija());... }

38 Tapahtumankäsittelijät Scalassa Osa edellisestä esimerkistä val quit = new Button { text = "Quit" }... listento(quit) reactions += { case ButtonClicked(`quit`) => exit(0) } } } HelloGUI.scala Scalassa on oma rajapinta tapahtumien käsittelyyn koodi on vähän Javaa lyhyempää myös Java-mallia (ActionListener) voi halutessaan käyttää listento(quit) kertoo, että quit-napin tapahtumat annetaan reactions-kokoelman funktioille reactionsiin voi lisätä funktioita niin paljon kuin haluaa ButtonClicked(`quit`) sovittaa hahmon case classiin, jossa parametrina on quit-muuttujassa oleva olio: kuten ButtonClicked(x) if x == quit { case... } on ns. osittain määritelty (partially applied) funktio: tekee jotain vain jos hahmo sopii

39 Esimerkki ajastetusta tapahtumasta Digitaalinen kello-ohjelma Clock.scala object Clock extends SimpleSwingApplication { def top = new MainFrame { title = "Clock" val label = new Label { text = " :00: " } val start = new Button { text = "Start" } val stop = new Button { text = "Stop" } contents = new GridBagPanel { var c = new Constraints c.insets = new java.awt.insets(10, 10, 10, 10) c.gridwidth = 2; add(label, c) c.gridwidth = 1; c.gridy = 1; add(start, c); add(stop, c) border = Swing.EmptyBorder(15, 15, 15, 15) } val timerlistener = new java.awt.event.actionlistener() { def actionperformed(evt: java.awt.event.actionevent) { val s = java.util.calendar.getinstance.gettime.tostring label.text = s } } val timer = new javax.swing.timer(1000, timerlistener) listento(start, stop) reactions += { case ButtonClicked(`start`) => timer.start() case ButtonClicked(`stop`) => timer.stop() } } }

40 Sisältö 1 Graasten käyttöliittymien oliomalli 2 Graikan piirtäminen itse 3 Komponentteja ja säiliöitä 4 Komponenttien asettelu 5 Tapahtumankäsittelijät 6 Composite- ja Observer-suunnittelumallit 7 Lisälukemista

41 Composite Joissakin tietorakenteissa (esim. puu) rakenteen osaset koostuvat pienemmistä osasista (lapset), jotka taas koostuvat pienemmistä osasista jne. Composite-mallissa koko rakenteelle voi suorittaa operaation tekemällä sen vain yhdelle osaselle Toteutuksessa suurempaa rakennetta ja sen osasia käsitellään samalla tavalla. Kaikki osaset täyttävät saman rajapinnan. Isomman rakenteen operaatio tehdään myös sen lapsille 10:03

42 Composite Esimerkki Tekstinkäsittelyohjelma, jossa kappaleet koostuvat alikappaleista ja tekstistä, jotka molemmat täyttävät rajapinnan TekstiRakenne TekstiRakenne-luokassa on metodi oikolue() Kappale-luokan oikolue kutsuu metodia oikolue() sisältämilleen Kappale-olioille ja sisältämälleen Teksti-oliolle Teksti-olio suorittaa oikoluvun normaalisti. Etuja: Koko tekstin tai osan siitä voi oikolukea kutsumalla metodia oikolue vain kerran. Muun osan koodia ei tarvitse toimia eri tavalla riippuen siitä, millaista tekstirakennetta käsitellään, koska toiminta on 10:03 ulospäin samanlaista.

43 Composite UML-kaavio Huomaa että toteutuksessa erilaisia Komponentti-rajapinnan täyttäviä rakenteita voi olla paljon erilaisia, tai jopa vain yksi Käyttävä Luokka <<interface>> Komponentti +operaatio( ) lapset Alkio +operaatio() Komposiitti +operaatio() Suorittaa kaikille lapsille metodin operaatio() 10:03

44 Patterns & AWT/Swing Suunnittelumallit (Design Patterns) ovat kuvauksia toimivasta ratkaisusta johonkin yleiseen ongelmaan Joitakin Swing-grafiikkakirjastossa esiintyviä suunnittelumalleja Observer-pattern Tapahtumankuuntelijat Composite-pattern Komponenttien piirtäminen Komponenttien asettelu ruudulle Abstract Factory Käyttöliittymän ulkoasun vaihtaminen

45 Observer-Malli Observer-Malli Observer mahdollistaa toiminnan, jossa muutos yhdessä oliossa aiheuttaa automaattisesti muutoksen kaikissa siitä riippuvissa olioissa Riippuvat oliot vain pyytävät kiinnostavaa oliota kertomaan muutoksista Käytännössä kiinnostavalla oliolla on lista johon kiinnostuneet (Listener, Observer) voivat ilmoittautua Kun jotain tapahtuu, käydään jokainen listallaolija läpi ja kutsutaan jokaisen kohdalla ilmoitusmetodia. Yleensä ilmoitusmetodille vielä annetaan pikku viesti (Event) joka kuvaa tapahtuneen asian Kuunneltavan ei tarvitse tietää kuuntelijasta muuta kuin että se täyttää kuuntelija -rajapinnan

46 Observer UML-kaavio UML-luokkakaavio Tästä lisää muutaman luennon kuluttua... <<interface>> Havainnoitava +lisaakuuntelija( ) +poistakuuntelija( ) +ilmoitamuutos( ) havainnoijat[] <<interface>> Havainnoija +ilmoitamuutos() sopimus: rajapinnan täyttävä luokka kutsuu kaikkien havainnoijien metodia ilmoitamuutos() SeurattavaLuokka Toteutus voi reagoida muutokseen haluamallaan tavalla HavainnoijaToteutus

47 Observer Observer-malli Yksi parhaista esimerkeistä Observer-mallin käytöstä on javan Swing- ja AWT-käyttöliittymien käyttämät tapahtumankuuntelijat Käytännössä mallia voidaan käyttää mihin tahansa tilanteeseen, jossa useamman paikan ohjelmassa tulee reagoida johonkin muutokseen. Tulostus päättyy Puuhun lisätään solmu Äänikanava suljetaan jne..

48 import java.awt.event.*; import javax.swing.jbutton; import javax.swing.jframe; public class Example extends JFrame { private JButton mybutton; } public static void main(string args[]) { Example ex = new Example(); ex.setvisible(true); ex.setdefaultcloseoperation(jframe.exit_on_close); } } public Example(){ mybutton = new JButton("Press Me"); ActionListener hello = new HelloListener(); mybutton.addactionlistener(hello); mybutton.addactionlistener(new ActionListener(){ public void actionperformed(actionevent ae){ mybutton.settext("pressed!"); } }); this.getcontentpane().add(mybutton); pack(); class HelloListener implements ActionListener { public void actionperformed(actionevent ae) { System.out.println("Hello World!"); } } Esimerkki

49 Sisältö 1 Graasten käyttöliittymien oliomalli 2 Graikan piirtäminen itse 3 Komponentteja ja säiliöitä 4 Komponenttien asettelu 5 Tapahtumankäsittelijät 6 Composite- ja Observer-suunnittelumallit 7 Lisälukemista

50 Java Swing Tutorial Itseopiskelijalle suositellaan aloituspaikaksi Sunin Java Swing Tutorial sivustoa Java Swing tutorial Yksittäisten komponenttien käyttöohjeet

51 Muuta luettavaa Javan graasista käyttöliittymistä löytyy lisää myös ei-laajan kurssin kalvoista (luento GUI 1/2) Scalan Swing-kirjastosta kerrotaan mm. kirjassa Loverdos & Syropoulos: Steps in Scala (Cambridge Univ. Press, 2010) Javan ja Scalan API-dokumentaatio Swingistä: esim. paketista scala.swing voi lähteä liikkeelle: tai hakea yksittäisiä asioita esim. Googlella (mutta Scalan Swing-kirjasto tuntuu muuttuvan tiheään) muutkin GUI-kirjastot ovat perusrakenteeltaan hyvin samanlaisia (esim. GTK, Qt ja Windowsin MFC ja Forms)

Luento 5. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Luento 5. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä Luento 5 T-106.1240 Ohjelmoinnin jatkokurssi T1 & T-106.1243 Ohjelmoinnin jatkokurssi L1 Luennoitsija: Otto Seppälä Kurssin WWW: http://www.cs.hut.fi/opinnot/t-106.1240/s2007 Patterns & AWT/Swing Observer-pattern

Lisätiedot

JAVA-OHJELMOINTI 3 op A274615

JAVA-OHJELMOINTI 3 op A274615 JAVA-OHJELMOINTI 3 op A274615 JFC & Swing, Look & Feel, Events Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä Luento 6 T-106.1240 Ohjelmoinnin jatkokurssi T1 & T-106.1243 Ohjelmoinnin jatkokurssi L1 Luennoitsija: Otto Seppälä Kurssin WWW: http://www.cs.hut.fi/opinnot/t-106.1240/s2007 Oma Grafiikka Swing-käyttöliittymässä

Lisätiedot

Olio-ohjelmointi Käyttöliittymä

Olio-ohjelmointi Käyttöliittymä Olio-ohjelmointi 2016 Käyttöliittymä n Javalla on helppo toteuttaa yksinkertainen graafinen käyttöliittymä n AWT/Swing n JFC (Java Foundation Collection) n AWT-sisältää Javan grafiikka GUI-komponmentit

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 6: Graasten käyttöliittymien ohjelmointia Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 29. 2. 2012 Sisältö 1 GUI-ohjelmointia

Lisätiedot

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä Javan Swing-tekniikan perusteet: Muistutus: Tarvitset seuraavia komponentteja harjoituksissa: otsikkoteksti (label) muokkausruutu (text field) komentopainike (button) yhdistelmäruutu (combo box) paneeli

Lisätiedot

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING Käyttöliittymäkomponentteja Sovelluksen pääikkunan luominen Rinnakkainen toiminnallisuus Miten käyttöliittymä lopetetaan? Ikkunan peruskomponentit Mihin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 12.4.2010 T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 1 / 34 Graafiset käyttöliittymät Tähän asti kirjoitetuissa ohjelmissa on ollut tekstipohjainen käyttöliittymä.

Lisätiedot

Java ja grafiikka. Ville Sundberg 12.12.2007

Java ja grafiikka. Ville Sundberg 12.12.2007 Java ja grafiikka Ville Sundberg 12.12.2007 What happen Viritetty JPanel Graphics ja Graphics2D ImageIO ja BufferedImage Animaatio ja ajastus Optimoinnista Kehykset import javax.swing.jframe; public class

Lisätiedot

Graafisen käyttöliittymän ohjelmointi

Graafisen käyttöliittymän ohjelmointi TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Luento 2 Tapahtumapohjainen ohjelmointi Juha-Matti Vanhatupa Sisältö Tapahtumapohjainen ohjelmointi Tapahtumakuuntelijoiden

Lisätiedot

Eclipse & WindowBuilder

Eclipse & WindowBuilder Eclipse & WindowBuilder Yleistä asiaa WindowBuilder on Eclipsessä oleva työkalu, jolla voi graafisesti tehdä käyttöliittymiä. Käyttö perustuu siihen, ettei varsinaista ohjelmakoodia tarvitse itse tehdä,

Lisätiedot

Graafinen käyttöliittymä, osa 2

Graafinen käyttöliittymä, osa 2 Graafinen käyttöliittymä, osa 2 Tapahtumankäsittely, käyttöliittymäkomponentteja MVC-malli M Malli V Näkymä Päivitys C Ohjain Päivitys Tapahtumat MVC-malli jakaa sovelluksen malli- ja näkymäkerroksiin.

Lisätiedot

Graafinen käyttöliittymä, osa 1

Graafinen käyttöliittymä, osa 1 Graafinen käyttöliittymä, osa 1 Idea, MVC-malli ja ensimmäinen ohjelma Graafinen käyttöliittymä Ensimmäisen kerran tavoitteena on oppia graafisen ohjelman perusidea sekä oppia laatimaan esimerkin mukaan

Lisätiedot

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä Tavoite: Opiskelija tuntee käyttöliittymän suunnittelun perusteita Opiskelija tuntee Javan Swing-tekniikan perusteet Opiskelija osaa työasemakäyttöliittymän toteutuksen perusteet käyttäen Javan Swing-tekniikkaa

Lisätiedot

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä Tavoite: Osio 4: Graafinen käyttöliittymä Opiskelija tuntee käyttöliittymän suunnittelun perusteita Opiskelija tuntee Javan Swing-tekniikan perusteet Opiskelija osaa työasemakäyttöliittymän toteutuksen

Lisätiedot

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä Javan Swing-tekniikan perusteet: Muistutus: Tarvitset seuraavia komponentteja harjoituksissa: otsikkoteksti (label) muokkausruutu (text field) komentopainike (button) yhdistelmäruutu (combo box) paneeli

Lisätiedot

Sovelmat. Janne Käki

Sovelmat. Janne Käki Sovelmat Janne Käki 24.11.2006 Sovellus extends JFrame public static void main(string[] args), joka tyypillisesti vain luo kehysluokan ilmentymän luontimetodi Sovelma extends JApplet ei main-metodia, ei

Lisätiedot

Java layoutit. Juha Järvensivu juha.jarvensivu@tut.fi 2007

Java layoutit. Juha Järvensivu juha.jarvensivu@tut.fi 2007 Java layoutit Juha Järvensivu juha.jarvensivu@tut.fi 2007 Layout Container Container LayoutManager Component Component Component Komponentin koko minimikoko setminumumsize(dimension d) Useimmat layoutmanagerit

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 7: Olio-ohjelmointia: UML ja suunnittelumallit Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 14. 3. 2012 Sisältö 1 UML-luokkakaaviot

Lisätiedot

Tapahtumapohjainen ohjelmointi

Tapahtumapohjainen ohjelmointi 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

Lisätiedot

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

Tapahtumapohjainen ohjelmointi. Juha Järvensivu juha.jarvensivu@tut.fi 2007 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

Lisätiedot

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä Tavoite: Opiskelija tuntee käyttöliittymän suunnittelun perusteita Opiskelija tuntee Javan Swing-tekniikan perusteet Opiskelija osaa työasemakäyttöliittymän toteutuksen perusteet käyttäen Javan Swing-tekniikkaa

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Keskeneräinen luento 3: Listat (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Linkitetyt listat (SICP 2.1.1, 2.2.1) funktionaalinen

Lisätiedot

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008 Tapahtumapohjainen ohjelmointi Juha Järvensivu juha.jarvensivu@tut.fi 2008 Sisältö Tapahtumapohjainen ohjelmointi Käyttöliittymän rakenne Pääikkuna (top-level window) Lapsi-ikkuna (child window) Dialogit

Lisätiedot

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä Tavoite: Opiskelija tuntee käyttöliittymän suunnittelun perusteita Opiskelija tuntee Javan Swing-tekniikan perusteet Opiskelija osaa työasemakäyttöliittymän toteutuksen perusteet käyttäen Javan Swing-tekniikkaa

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2010 Välikoe / 26.3 Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

JAVA-OHJELMOINTI 3 op A274615

JAVA-OHJELMOINTI 3 op A274615 JAVA-OHJELMOINTI 3 op A274615 Layoutit Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi, Talentum 2004. Layout

Lisätiedot

Tietorakenteet, laskuharjoitus 7,

Tietorakenteet, laskuharjoitus 7, Tietorakenteet, laskuharjoitus 7, 14.-19.3. 1. "Tira meets software engineering, osa 1" Lue luentomonisteen kalvot 233-236. Toteuta luokka Opiskelijarekisteri joka tarjoaa seuraavat palvelut: opiskelijoiden

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter Olio-ohjelmointi Suunnittelumallit Adapter ja Composite Rakennemalleissa päähuomio kohdistetaan siihen, miten luokkia ja olioita yhdistellään muodostamaan laajempia rakenteita. Rakenteelliset luokkamallit

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, tietorakenteen muuttaminen (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 6. 11. 2012 Sisältö 1 Muuttujan arvon muuttaminen:

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

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

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

Flash ActionScript osa 4

Flash ActionScript osa 4 Flash ActionScript osa 4 Tekstikentät Flash:ssa tekstikenttä voi olla tyypiltään joko TLF Text tai Classic Text. TLF Text on uusi Flash CS5 tullut tyyppi. Sen animointi ja muotoilu ominaisuudet ovat monipuolisemmat

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Graafinen käyttöliittymä, osa 3

Graafinen käyttöliittymä, osa 3 Graafinen käyttöliittymä, osa 3 Hiiritapahtumat, valikot, Look and Feel Taustaa: painikkeen käsittely Painikkeen tapahtumalähde on JButton-komponentti. Tapahtuma synnyttää aina tapahtumaolion. painikkeelle

Lisätiedot

Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016)

Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016) Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016) Tietokoneavusteinen opetus -kurssilla opetetaan Adobe Flash CS6:n käyttämistä neljänä kertana: 11.3.2016, 15.3.2016, 18.3.2016 ja 1.4.2016. Harjoituskerroilla

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

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

5 Näppäimistö. 5.1 Näppäimistön eventit 5 Näppäimistö Näppäimistö (Keyboard) on Windows Forms -ohjelmissa keskeisessä asemassa. Erityisesti erilaisissa tekstinkäsittelyohjelmissa ja ohjelmissa, joissa tarvitaan datan syöttämistä esimerkiksi

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

Vesisika. metsiemme työmyyrä. http://www.billybear4kids.com/animal/whose-toes/capybara.jpg

Vesisika. metsiemme työmyyrä. http://www.billybear4kids.com/animal/whose-toes/capybara.jpg Vesisika metsiemme työmyyrä http://www.billybear4kids.com/animal/whose-toes/capybara.jpg Faktat Vesisika tykkää vedestä ja näyttää (ja kuulemma maistuu) hieman sialta. Käyttää myös nickiä kapybara. kapiÿva

Lisätiedot

Ikkunointijärjestelmät

Ikkunointijärjestelmät Ikkunointijärjestelmät Johdanto X-ikkunointijärjestelmä Java Yhteenveto Petri Vuorimaa 1 Tehtävät Piirtorutiinit Syöttölaitteiden monitorointi Tapahtumien välitys Ikkunoiden manipulointi Petri Vuorimaa

Lisätiedot

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0 CODEONLINE Monni Oo- ja Java-harjoituksia Version 1.0 Revision History Date Version Description Author 25.10.2000 1.0 Initial version Juha Johansson Inspection History Date Version Inspectors Approved

Lisätiedot

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

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä 2016 IX Olioiden välisistä yhteyksistä Sisältö 1. Johdanto 2. Kytkentä 3. Koheesio 4. Näkyvyydestä 2 Johdanto n Ohjelmassa syntyy kytkentöjä olioiden välille Toivottuja ja epätoivottuja n Näkyvyys vaikuttaa

Lisätiedot

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

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

kertaa samat järjestykseen lukkarissa.

kertaa samat järjestykseen lukkarissa. Opetuksen toistuva varaus ryhmällee TY10S11 - Tästä tulee pitkä esimerkki, sillä pyrin nyt melko yksityiskohtaisesti kuvaamaan sen osion mikä syntyy tiedon hakemisesta vuosisuunnittelusta, sen tiedon kirjaamiseen

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi. 11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen

Lisätiedot

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3 16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: SICP kohdat 22.2.3 Riku Saikkonen 2. 11. 2010 Sisältö 1 Linkitetyt listat 2 Listaoperaatioita 3 Listarakenteet 4 Gambit-C:n Scheme-debuggeri Linkitetyt

Lisätiedot

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++ JAVA alkeet JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++ ja Javascriptin kanssa. Huom! JAVA ja JavaScript eivät silti ole sama asia, eivätkä edes sukulaiskieliä.

Lisätiedot

Javan GUI Scratchaajalle

Javan GUI Scratchaajalle Javan GUI Scratchaajalle Tehtävä: Kasvukausi_1 Kun puutarha nyt näyttää oikealta, sitä olisi hyvä alkaa ohjelmoida toimivaksi. Tehdään aluksi istutukselle kuuntelija, jotta sitä klikkaamalla multaan voi

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Rajapinnat Java-kieli ei tue luokkien moniperintää. Jokaisella luokalla voi olla vain yksi välitön yliluokka. Toisinaan olisi

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 8.11.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 8.11.2017 1 / 30 Mahdollisuus antaa luentopalautetta Luennon aikana voit kirjoittaa kommentteja ja kysymyksiä sivulle

Lisätiedot

JUnit ja EasyMock (TilaustenKäsittely)

JUnit ja EasyMock (TilaustenKäsittely) OHJELMISTOJEN TESTAUS JA HALLINTA Syksy 2015 / Auvo Häkkinen JUnit ja EasyMock (TilaustenKäsittely) Tehtävässä tarvittava koodi löytyy osoitteella http://users.metropolia.fi/~hakka/oth/mockesimerkki.zip

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

Lisätiedot

Jypelin käyttöohjeet» Ruutukentän luominen

Jypelin käyttöohjeet» Ruutukentän luominen Jypelin käyttöohjeet» Ruutukentän luominen Pelissä kentän (Level) voi luoda tekstitiedostoon "piirretyn" mallin mukaisesti. Tällöin puhutaan, että tehdään ns. ruutukenttä, sillä tekstitiedostossa jokainen

Lisätiedot

Javan GUI Scratchaajalle

Javan GUI Scratchaajalle Javan GUI Scratchaajalle Asettelu Tähän mennessä olemme luoneet ikkunan, johon voi laittaa yhden komponentin, kuten nappulan. Yksi komponentti harvoin riittää. Useampaa komponenttia lisäillessä meidän

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Suunnittelumalleja, MVC. Juha Järvensivu 2008 Suunnittelumalleja, MVC Juha Järvensivu juha.jarvensivu@tut.fi 2008 Sisältö Tarkkailija Strategia Rekursiokooste Tehdas-metodi MVC Tarkkailija suunnittelumalli Tarkkailijamalli (Observer) Määrittelee olioiden

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3 15. Lohkot 15.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.2 Lohkot Aaltosulkeet

Lisätiedot

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

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen Pedacode Pikaopas Java-kehitysympäristön pystyttäminen Pikaoppaan sisältö Pikaoppaassa kuvataan, miten Windowstyöasemalle asennetaan Java-ohjelmoinnissa tarvittavat työkalut, minkälaisia konfigurointeja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 18.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 18.3.2009 1 / 51 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java) Tavoite Opiskelija ymmärtää olio-ohjelmoinnin problematiikan. Opiskelija osaa määritellä ja käyttää itse

Lisätiedot

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

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

Laskuharjoitus 9, tehtävä 6

Laskuharjoitus 9, tehtävä 6 Aalto-yliopiston perustieteiden korkeakoulu Jouni Pousi Systeemianalyysin laboratorio Mat-2.4129 Systeemien identifiointi Laskuharjoitus 9, tehtävä 6 Tämä ohje sisältää vaihtoehtoisen tavan laskuharjoituksen

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java kahdessa tunnissa. Jyry Suvilehto Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,

Lisätiedot

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet, syksy 2006 Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen

Lisätiedot

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus: Dokumentaatio, osa 1 Tehtävämäärittely Kirjoitetaan lyhyt kuvaus toteutettavasta ohjelmasta. Kuvaus tarkentuu myöhemmin, aluksi dokumentoidaan vain ideat, joiden pohjalta työtä lähdetään tekemään. Kuvaus

Lisätiedot

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

Lisätiedot

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen package-määrettä käyttäen. Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa importlauseen avulla. Pakkaukset ja näkyvyys.

Lisätiedot

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Sisällys. 11. Rajapinnat. Johdanto. Johdanto Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.

Lisätiedot

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä Pekka Ryhänen & Erkki Pesonen 2002 BlueJ:n käyttö Nämä ohjeet on tarkoitettu tkt-laitoksen mikroluokan koneilla tapahtuvaa käyttöä varten. Samat asiat pätevät myös muissa luokissa ja kotikäytössä, joskin

Lisätiedot

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia. MagicDraw-pikaohje Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia. Alkuvalmistelut Windows (sali TC205) 1) Kirjaudu sisään TTY:n intra-tunnuksella.

Lisätiedot

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen (package). Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa (import). Pakkaukset ja näkyvyys. 13.2 Pakkauksen kokoaminen

Lisätiedot

OpenOffice.org Impress 3.1.0

OpenOffice.org Impress 3.1.0 OpenOffice.org Impress 3.1.0 Sisällysluettelo 1 Esityksen luominen...1 2 Dian rakenne...2 3 Dian lisääminen, poistaminen, siirtäminen ja kopioiminen...3 4 Diojen koon muuttaminen...3 5 Pohjatyylisivut...4

Lisätiedot

ohjeita kirjautumiseen ja käyttöön

ohjeita kirjautumiseen ja käyttöön ohjeita kirjautumiseen ja käyttöön Kirjautumisesta Opiskelijat: kirjaudu aina tietokoneelle wilmatunnuksella etunimi.sukunimi@edu.ekami.fi + wilman salasana Opettajat: kirjaudu luokan opekoneelle @edu.ekami.fi

Lisätiedot

Harjoitustyö (TKO_2023)

Harjoitustyö (TKO_2023) Harjoitustyö (TKO_2023) Jyri Lehtonen (72039) (alkuperäinen 29.1.2008) päivitetty: 8.2.2008 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee Java-appletti, joka kysyy käyttäjältä asioita Java-kielestä.

Lisätiedot

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

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki Tehtävä 1 Koherentti selitys Koherentti esimerkki ½p ½p Tehtävä 2 Täysiin pisteisiin edellytetään pelaajien tulostamista esimerkin järjestyksessä. Jos ohjelmasi tulostaa pelaajat jossain muussa järjestyksessä,

Lisätiedot

Dialogit. Juha Järvensivu 2008

Dialogit. Juha Järvensivu 2008 Dialogit Juha Järvensivu juha.jarvensivu@tut.fi 2008 Yleistä 2 vaihtoehtoista toteutusmekanismia Layoutteihin perustuva dialogi Absoluuttisiin koordinaatteihin perustuva dialogi Haasteita 1. Dialogin selkeä

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot