Poikkeusten ja tapahtumien käsittely

Koko: px
Aloita esitys sivulta:

Download "Poikkeusten ja tapahtumien käsittely"

Transkriptio

1 Poikkeusten ja tapahtumien käsittely Tässä osassa tarkastellaan poikkeusten ja tapahtumien käsittelyä. Aluksi esitellään poikkeusten käsittelyä yleisesti sekä tarkastellaan siihen liittyviä käsitteitä Sebestan (ks. [Seb], kappale 14.1) pohjalta. Tämän jälkeen perehdytään hieman poikkeusten käsittelyn toteutukseen esimerkkikielissä Java ja C++. Lopuksi perehdytään pintapuolisesti Javan tapahtumien käsittelyyn. 1. Poikkeusten käsittelyn käsitteitä ja suunnittelukriteerejä Useimmat tietokonejärjestelmät havaitsevat erilaiset ohjelman ajon aikana syntyneet virhetilanteet (esimerkiksi laskentaoperaatioissa tapahtuvat nollalla jakamiset jne.). Varhaisemmissa ohjelmointikielissä tällaisiin virhetilanteisiin ei reagoitu millään tavoin, vaan virhe aiheutti suorituksen keskeytymisen ja kontrollin siirtymisen käyttöjärjestelmälle eli ohjelman kaatumisen. Yleensä käyttäjä näkee tällöin käyttöjärjestelmän generoiman virheilmoituksen, joka voi olla varsin hankalasti tulkittava. Ensimmäisissä ohjelmointikielissä ei ollut menetelmiä käsitellä ajon aikaisia virhetilanteita lukuun ottamatta syöttö- ja tulostustoimenpiteitä. Varsinainen poikkeustenkäsittelymekanismi toteutettiin ensimmäiseksi PL/I -kielessä jo luvulla ([Seb], kappale 2.8.3); poikkeusten käsittely on kuitenkin yleistynyt vasta luvulla ja nykykieliin on yleensä sisällytetty jonkinlainen yleinen poikkeustilanteiden käsittelymekanismi. Tässä poikkeuksilla (exceptions) tarkoitetaan sekä laitteistotasolla havaittavia että ohjelmatasolla havaittavia epänormaaleja tapahtumia. Ensin mainittuja ovat esimerkiksi oheislaitteiden lukuvirheet ja jälkimmäisiä taulukon rajojen ylitykset. Poikkeus ei välttämättä ole virheellinen toiminto, ainoastaan jokin epätavallinen tapahtuma, joka voidaan havaita joko laite- tai ohjelmatasolla. Poikkeusten käsittely (exception handling) tarkoittaa toimenpiteitä, jotka poikkeusten havaitseminen aiheuttaa. Nykyisiin kieliin on toteutettu erilaisia poikkeustilanteiden käsittelymenetelmiä, jotka mahdollistavat poikkeustilanteiden paikantamisen (detecting) ja niistä toipumisen (recovering), kun näihin tilanteisiin on varauduttu

2 ohjelmointikoodissa. Poikkeuksen käsittelyn suorittaa koodissa yleensä oma syntaktinen yksikkö jota kutsutaan poikkeuksien käsittelijäksi (exception handler). Kun poikkeukseen liittyvä epänormaali tapahtuma sattuu, sanotaan että poikkeus virittyy (raise). Sellaisessakin kielessä, jossa ei ole sisäänrakennettua poikkeuksenkäsittelymekanismia, voidaan toteuttaa käyttäjän määrittelemien ohjelmatason poikkeusten käsittely. Aliohjelmakutsuissa voidaan esimerkiksi käyttää ylimääräistä tilaparametria, jonka arvo annetaan aliohjelmassa ja on jokin virhekoodi epänormaalissa tilanteessa. Välittömästi palattaessa aliohjelmasta kutsuja testaa parametrin arvon ja käynnistää poikkeuksen käsittelyn virhekoodin mukaan. Funktioiden tapauksessa paluuarvo voi myös sisältää virhekoodin (kuten C-kielen kirjastofunktioissa on tapana). Sellaisissa kielissä, joissa aliohjelmia voidaan välittää aliohjelmaparametreina, voidaan myös itse poikkeusten käsittelijä antaa parametrina kutsuttavalle aliohjelmalle. On kuitenkin monia syitä, miksi kieleen kannattaisi rakentaa poikkeusten käsittelymekanismi jo olennaiseksi osaksi kieltä. Usein ohjelmissa virheen käsittely muodostaa suuren osan koodista. Tämä muodostuu koodin luettavuuden ja ylläpidon kannalta ongelmaksi, mikäli jokainen virhetilanne joudutaan havaitsemaan ja käsittelemään koodissa sen tapahtumispaikassa. Erillisen poikkeustenkäsittelymekanismin avulla koodi muodostuu selkeämmäksi. Edelleen poikkeuksen eteneminen (exception propagation) on ohjelman normaalista suorituspolusta erillinen suorituspolku. Tämä mahdollistaa sen, että poikkeuksen käsittely suoritetaan omassa käsittely-yksikössään, joka voi olla yleishyödyllinen ja siten edistää koodin uudelleen käytettävyyttä. Kieleen sisällytetty poikkeustenkäsittely myös tekee ohjelmoijalle helpommaksi ottaa koodissa huomioon sellaiset poikkeustilanteet, jotka muuten jäisivät vaille käsittelyä.

3 Kun kieleen (tai poikkeusten käsittelyä sisältämättömällä kielellä kirjoitettavaan ohjelmaan) suunnitellaan poikkeustenkäsittelymekanismia, joudutaan kiinnittämään huomio ainakin seuraaviin seikkoihin: 1. Miten (käyttäjän generoimat) poikkeustenkäsittelijät määritellään koodissa ja miten niiden viiteympäristö määräytyy? Käsittelijät voivat yleensä olla joko koodilohkoja tai itsenäisiä yksikköjä. Edellisessä tapauksessa poikkeuksen käsittely voidaan tehdä tapahtumapaikalla, ja jälkimmäisessä tapauksessa poikkeus pitää lähettää eteenpäin käsiteltäväksi. 2. Miten tapahtunut poikkeus sidotaan poikkeuksen käsittelijään? Joissakin olosuhteissa sama poikkeus pitäisi pystyä käsittelemään eri tilanteissa eri tavoin, jolloin tarvitaan mekanismi valita käsittelijä. Toisaalta saattaa käydä niin, että poikkeustilanteen kohtaavassa yksikössä ei olekaan sopivaa käsittelijää poikkeukselle; on ratkaistava, miten tässä tapauksessa poikkeus etenee ohjelmassa. 3. Miten ohjelman suoritus jatkuu poikkeuksen käsittelyn jälkeen? Ohjelma voidaan yksinkertaisesti päättää aina poikkeustilanteessa. Tämä ei kuitenkaan ole kaikissa tapauksissa paras ratkaisu, esimerkiksi poikkeus voi aiheutua virheellisestä syötteestä, joka voidaan antaa uudestaan. Tällaisissa tapauksissa ohjelmaa voidaan jatkaa, mahdollisesti poikkeustilanteen aiheuttaman lauseen jälkeisestä lauseesta tai kokonaan toisesta ohjelmayksiköstä. 4. Voiko käyttäjä määritellä omia poikkeuksia ja jos, niin mikä on niiden muoto? 5. Onko kielessä lainkaan standardipoikkeuksia? Jos on, niin voiko käyttäjä virittää kielen omia poikkeuksia? 6. Miten laitteistotason virhetilanteita käsitellään? Nämä voidaan rajata kokonaan poikkeusten käsittelyn ulkopuolelle (ts. niitä ei pidetä poikkeuksina vaan virheinä) ja pitää poikkeuksina ainoastaan ohjelmatason epänormaaleja tilanteita. 7. Voidaanko poikkeusten havaitsemista rajoittaa, joko kokonaan tai väliaikaisesti? Esimerkiksi taulukon rajojen tarkistamisesta luopuminen voi tehostaa koodia.

4 2. Poikkeusten käsittely esimerkkikielissä Tässä kappaleessa tarkastellaan hieman C++:n ja Javan poikkeusten käsittelyn toteutusta C++ C++ -kielessä (ks. [Strou], luku 14 tai [Seb] kappale 14.3) poikkeuksen käsittelijä määritellään 'try-catch' - rakenteen catch -lohkossa: try <Code that is expected to raise an exception> catch (exception_type_descpriction) <exception handler body>... catch (exception_type_descpriction) <exception handler body> Yllä try-lohkossa on koodi, joka voi aiheuttaa poikkeuksen ja sitä seuraavissa catch - lohkoissa kussakin voidaan käsitellä parametrilla määritelty poikkeus. Mikäli poikkeus sattuu, sitä verrataan järjestyksessä catch -lohkojen parametrityyppeihin ja ensimmäinen sopiva suoritetaan. Mikäli catch -lauseen parametrina käytetään kolmea pistettä (...) [ellipsis ], se käsittelee minkä tahansa poikkeuksen. Käytettäessä useita catch -lohkoja tällainen lohko on siis syytä kirjoittaa viimeiseksi. C++ -kielessä catch - lohko voi sisältää mitä tahansa laillista C++ -koodia. C++ -kielessä poikkeus voi virittyä ainoastaan eksplisiittisesti käyttämällä throw - lausetta: throw [lauseke] Tällöin sanotaan, että poikkeus heitetään. Ohjelmoijalle voi usein tulla poikkeuksia oman koodin ulkopuolelta; tällöin ne heitetään yleensä jostakin kirjastofunktiosta. Esimerkiksi tiedostojen käsittelyssä voi syntyä poikkeuksia. Pelkkä throw voi esiintyä

5 ainoastaan käsittelijässä, jolloin se heittää saamansa poikkeuksen edelleen. C++:ssa voidaan poikkeuksena heittää minkä tahansa tyypin tietoa. Poikkeus liitetään käsittelijään seuraavalla periaatteella: Kun heitetty poikkeus on tyyppiä E ja catch - lohkon parametri tyyppiä X, niin lohko käsittelee poikkeuksen jos 1. X on samaa tyyppiä kuin E tai 2. X on luokan E yksikäsitteinen julkinen kantaluokka 3. X ja E ovat osoitintyyppejä, joiden tarkoitetyypeille pätee 1 tai 2 4. X ja E ovat referenssityyppejä, joiden tarkoitetyypeille pätee 1 tai 2 ([Strou] 14.3.) Kun poikkeus virittyy try -lohkossa, tämän suoritus keskeytyy välittömästi ja poikkeukselle etsitään sopivaa käsittelijää järjestyksessä try -lohkoon liittyvistä catch - lohkoista. Mikäli paikallisesti ei löydy sopivaa käsittelijää, poikkeus etenee kutsuvalle yksikölle jne., kunnes sopiva käsittelijä löytyy tai ohjelma kaatuu. C++ -kielen poikkeustenkäsittely on varsin yksinkertainen, kielessä ei ole standardipoikkeuksia; tosin C++:n standardikirjastossa on määritelty mittava määrä erilaisia poikkeuksia. Minkä tahansa tietotyypin alkiota voidaan käyttää poikkeuksena. Poikkeuksien virittymistä ei voi rajoittaa, mutta funktiot voivat määritellä poikkeustyypit, jotka funktio voi virittää.

6 Tämä tapahtuu antamalla lista poikkeustyypeistä funktion otsikossa, esimerkiksi class A ; void heitto(int argh) throw(a,int) A mya; int x = 100; if (argh < 0) throw myc; else throw x; Mikäli funktio heittää poikkeuksen joka ei esiinny sen poikkeuslistassa, aiheutuu ajonaikainen virhe. Jos siis funktion otsikossa muutettaisiin tyyppi int floatiksi ja funktiota kutsuttaisiin ohjelmassa positiivisella parametrilla, ohjelma kaatuisi, vaikka kutsuja olisikin varautunut float -tyyppiseen poikkeukseen. Huomaa, että try- ja catch -lohkot muodostavat omat näkyvyysalueensa, joten try - lohkon paikallisia muuttujia ei voi käsitellä catch -lohkossa. Lisäksi kaikki try -lohkon paikalliset pinodynaamiset muuttujat tuhotaan poikkeuksen sattuessa Java Javan poikkeuksien käsittelymekanismi pohjautuu C++ -kielen try-catch-lohkorakenteen syntaksiin, mutta Javan toteutus on puhtaasti oliopohjainen ja noudattaa monelta osin erilaista semantiikkaa (ks. esimerkiksi [Arn], luku 7). Javassa ohjelman suoritusaikaiset virhetilanteet jakautuvat kahteen osaan: Virheisiin (Error) ja poikkeuksiin (Exception). Virheet ovat yleensä vakavia häiriöitä, joiden kannattaa antaa kaataa ohjelma. Poikkeukset ovat sen sijaan yleensä käsiteltävissä muutenkin - käsittelemättöminä nekin kaatavat ohjelman. Kaikki Javan poikkeukset ovat olioita. Virheet ovat Error-luokan (ja sen aliluokkien) olioita ja poikkeukset

7 Exception -luokan (ja sen aliluokkien) olioita. Sekä Error että Exception -luokka periytyy luokasta Throwable. Javan poikkeukset jakautuvat tarkistettaviin (checked) ja ei-tarkistettaviin (unchecked). Tarkistettavat poikkeukset on aina käsiteltävä tai heitettävä eteenpäin; eteenpäin heittämisen voi tehdä throws-komennolla metodin otsikossa. Error-luokan poikkeukset ovat ei-tarkistettavia, samoin Exception-luokasta periytyvät RuntimeException-poikkeukset. Kaikki muut poikkeukset ovat tarkistettavia poikkeuksia, esimerkiksi luku- ja kirjoitustapahtumiin liittyvä IOException. Näin ollen metodissa, joka tekee mainittuja operaatioita, on joko käsiteltävä IOException tai heitettävä se eteenpäin. Poikkeus voidaan ottaa kiinni ohjelmassa try -catch -finally -rakenteen catch -lohkossa. Sen syntaksi on seuraava: try lauseet catch(poikkeusluokka1 var1) poikkeuslauseet1 [catch(poikkeusluokka2 var2) poikkeuslauseet2 catch... finally lopetuslauseet ] Tässä yritetään suorittaa lauseet ja mikäli poikkeuksia ei ilmene, jatketaan ohjelman suoritusta normaalisti. Jos sen sijaan poikkeusluokka1 -tyyppinen poikkeus sattuu, suoritetaan siitä lähtien poikkeuslauseet1 ja kontrolli siirtyy catch -lauseiden jälkeiseen

8 koodiin. Jos taas sattuu poikkeusluokka2 -tyyppinen poikkeus, suoritetaan poikkeuslauseet2 ja kontrolli siirtyy catch -lauseiden jälkeiseen koodiin jne. Mikäli haluaa jonkin operaation suoritettavaksi riippumatta siitä, minkälainen virhetilanne sattuu, voi try - catch -lauseeseen lisätä finally-osan. Tämä koodi suoritetaan joka tapauksessa; myös siinä tapauksessa, että poikkeusta ei satu! Käsittelijä voi myös heittää uuden poikkeuksen, jonka ei tarvitse olla samaa tyyppiä kuin saatu poikkeus. Kun poikkeus heitetään, eikä koodissa ole siihen sopivaa catch -lausetta, ohjelman kontrolli siirtyy välittömästi poikkeuksen aiheuttanutta metodia kutsuvalle metodille, jossa puolestaan tarkastetaan onko sopivaa catch -lausetta jne. Prosessi jatkuu, kunnes poikkeus käsitellään tai kontrolli siirtyy main -metodin ulkopuolelle, jolloin ohjelma kaatuu ja konsolille tulostuu virheilmoitus, joka kertoo, mikä poikkeus sattui ja missä. Esimerkiksi ohjelma public class NollaJako public static void main(string[] args) int luku1=1000,luku2=0,jako; jako = luku1/luku2; System.out.println(jako); Tulostaa ennen päättymistään: Exception in thread "main" java.lang.arithmeticexception: / by zero at NollaJako.main(NollaJako.java:6) Ensimmäisellä rivillä ilmoitetaan poikkeuksen nimi (java.lang.arithmeticexception) ja sen syy (/ by zero) sekä toisella rivillä (sekä tarvittaessa siitä eteenpäin) poikkeuksen tapahtumapaikka (NollaJako.java:6). Tapahtumapaikka saadaan kutsupinosta (call stack trace) ja se voidaan aina kysyä poikkeusoliolta. Jos käsittelee ohjelmassaan syvältä tulleita poikkeuksia, voi olla hyödyllistä käyttää Exception -luokan metodia

9 printstacktrace(), joka tulostaa poikkeuksen kulkeman polun. Lisäksi metodilla getmessage() saa näkyviin poikkeuksen virheilmoituksen. Javassa on huomattava määrä määriteltyjä poikkeuksia. Esimerkiksi taulukon rajojen yli kirjoittaminen antaa ArrayIndexOutOfBoundsExceptionin, nollalla jakaminen ArithmeticExceptionin ja olioon viittaaminen ennen sen luomista NullPointerExceptionin. Lisäksi ohjelmoija voi itse määritellä uusia poikkeuksia tarpeen mukaan. Esimerkki 1. Seuraavassa ohjelmassa otetaan kiinni kaksi poikkeusta: ArrayIndexOutOfBoundsException sattuu, jos käytetään ensimmäistä versiota taulukosta nelja. Jos taas käytetään toista versiota, jaetaan nollalla, ennen kuin taulukon ylikirjoitus tapahtuu ja saadaan ArithmeticException.

10 public class KaxPoikkeus public static void main(string[] args) int i,jako; int[] nelja = 1,2,3,4; //int[] nelja = 1,2,0,4; int[] kolme = new int[3]; try for(i=0;i<3;i++) kolme[i] = nelja[i]; jako = kolme[i]/nelja[i]; catch(arithmeticexception ae) System.out.println("Jaoinpa nollalla!"); catch(arrayindexoutofboundsexception aibe) System.out.println("Ylitinpä taulukon!"); finally System.out.println("Meniköhän kaikki hyvin?"); System.out.println("Suoritus loppuu!");

11 Yleensä Javan omat poikkeukset ja niiden käsittely suovat riittävän kontrollin ohjelmoijalle. Joskus kuitenkin tarvitaan itse määriteltyjä poikkeuksia; niitä voidaan kirjoittaa tekemällä oma luokka, joka perii Exception-luokan seuraavasti: class MyException extends Exception public MyException( ) public MyException( String msg) super (msg); Poikkeusten käyttäminen antaa myös olio-ohjelmointiin uusia mahdollisuuksia. Koska luokan muodostimella ei ole paluuarvoa, ei olion luomisen voida palauttaa yhteydessä virhearvoa, jos luominen ei onnistu. Poikkeus voidaan silti heittää ja näin välittää oliota luovalle ohjelmalle tieto siitä ettei olion tekeminen onnistunutkaan. Lisäksi poikkeuksen virheilmoitus kertoo epäonnistumisen syyn. Kannattaa myös panna merkille, että oliota ei lainkaan luoda, jos muodostimessa heitetään poikkeus. Esimerkki 2. Oletetaan, että tarvitaan luokkaa, joka sisältää ainoana kenttänään parittoman kokonaisluvun. Tällöin voidaan määritellä oma poikkeus ja heittää se muodostimessa, jos yritetään syöttää parillista lukua. // Oma poikkeusluokka class ParillisPoikkeus extends Exception public ParillisPoikkeus() public ParillisPoikkeus(String msg) super(msg);

12 // Oma luokka, jossa pariton kokonaisluku muuttujan arvona class Pariton public int oddluku; public Pariton(int odd) throws ParillisPoikkeus if( (odd % 2) == 0 ) throw new ParillisPoikkeus("Luku "+odd +" ei ole pariton."); else oddluku = odd; // Poikkeusta testaava pääohjelma public class ParitonTesti public static void main(string[] args) Pariton p=null; try p = new Pariton(2); catch(parillispoikkeus pp) System.out.println(pp.getMessage() );

13 Mikäli tarkistettava poikkeus halutaan jättää käsittelemättä metodissa, sen lähettäminen kutsujalle edellyttää metodin otsikossa poikkeuksen esittelyn throwslauseella. Esimerkiksi int some_method( ) throws MyException, IOException <function body> Javan throws-lauseen semantiikka poikkeaa C++ -kielen vastaavasta throw-lauseesta. Javassa metodi, jossa ei esitellä throws-lauseella poikkeuksia, ei voi välittää mitään tarkistettavaa poikkeusta. Javassa ei ole oletuskäsittelijöitä poikkeuksille eikä poikkeuksien syntymistä voida rajoittaa. 3. Tapahtumien käsittely Tapahtumien käsittely muistuttaa suuresti poikkeusten käsittelyä. Myös tapahtumalla on käsittelijä, jota kutsutaan tapahtuman sattuessa. Toisin kuin poikkeuksia, tapahtumia virittyy ulkoisten toimintojen, kuten graafiseen käyttöliittymään kohdistumien toimenpiteiden, seurauksena. Tapahtumaohjatussa ohjelmoinnissa joitakin osia ohjelmassa suoritetaan aikoina, joita ei voida ennalta tietää, koska tapahtumien käsittelijät aktivoituvat joidenkin ulkoisten ärsykkeiden johdosta. Tapahtuma (event) on ilmoitus, että jotain erityistä on sattunut, kuten jonkin graafisen elementin valinta hiirellä. Tapahtuman käsittelijä (event handler) on koodin osa, joka suoritetaan vastaavan tapahtuman ilmetessä. Tapahtuman käsittelijöiden avulla ohjelma saadaan vastaamaan käyttäjän toimenpiteisiin. Tarkastellaan esimerkinomaisesti Javan tapahtumankäsittelyä. Javassa tapahtumat liitetään tapahtumien käsittelijöihin niin sanottujen tapahtumien kuuntelijoiden (event listeners) avulla. Tapahtuman kuuntelija rekisteröidään kuuntelemaan jotain määrättyä tapahtumaa. Rekisteröinti tapahtuu kutsumalla tarkkailtavan olion sopivaa metodia. Kuuntelijan on toteutettava metodi, joka käsittelee tapahtuman. Mikäli luokkaa aiotaan käyttää tapahtuman käsittelijänä, sen on toteutettava tapahtumia

14 vastaava rajapinta. Seuraava esimerkki havainnollistaa asiaa. Esimerkissä on Javaohjelma, joka avaa ikkunan. Ohjelma voidaan lopettaa ikkuna sulkemalla. Lisäksi ikkunassa on painonappi, jonka painallus avaa dialogi-ikkunan. import javax.swing.*; import java.awt.*; import java.awt.event.*; class TapahtumaIkkuna extends JFrame implements WindowListener, ActionListener JButton omanappi; public TapahtumaIkkuna() setlayout(new GridLayout(3,1)); this.settitle("tapahtumia tarkkaileva ikkuna."); this.setsize(400,200); // Lisätään Button -olio omanappi = new JButton("Painonappi"); add(omanappi); public void laitaesiin() // Laitetaan ikkuna näkyviin this.setvisible(true); // Lisätään ikkunaan kuuntelijaksi se itse! this.addwindowlistener(this); // Lisätään napille kuuntelijaksi ikkunaolio omanappi.addactionlistener(this); public static void main(string[] args) // Luodaan uusi TapahtumaIkkuna-olio final TapahtumaIkkuna akkuna = new TapahtumaIkkuna(); ); // Näytetään ikkuna omassa säikeessään javax.swing.swingutilities.invokelater(new Runnable() public void run() akkuna.laitaesiin();

15 /* Nämä metodit on rajapinnan takia implementoitava, mutta niiden rungot voidaan jättää tyhjiksi */ public void windowopened(windowevent e) public void windowclosed(windowevent e) public void windowactivated(windowevent e) public void windowdeactivated(windowevent e) public void windowiconified(windowevent e) public void windowdeiconified(windowevent e) // Vain tähän metodiin tarvitaan koodia! public void windowclosing(windowevent e) System.exit(0); // ActionListener -rajapinnan metodi public void actionperformed(actionevent e) // Tapahtuman lähdeolio Object olio = e.getsource(); // Tutkitaan miltä napilta tapahtuma lähti // ja näytetään dialogi if(olio == omanappi) JOptionPane.showMessageDialog(this,"Painoit nappia!"); Ohjelmassa on merkitty lihavoidulla fontilla tapahtumien käsittelyn kannalta olennaiset osat. Ohjelman ikkunan luokka on TapahtumaIkkuna. Tapahtumien käsittelijät implementoidaan sen metodeina, joten sen on toteutettava rajapinnat WindowListener ja ActionListener. class TapahtumaIkkuna extends JFrame implements WindowListener, ActionListener Rajapinta WindowListener sisältää ikkunatapahtumiin liittyvien metodien rajapinnan; ActionListener sisältää ainoastaan yhden, painonapin painallukseen liittyvän metodin prototyypin. Luokan muodostimessa luodaan painonappi (omanappi) ja lisätään se ikkunaan. Ikkunan näyttävässä metodissa (laitaesiin()) rekisteröidään ikkunaolio kuuntelemaan sekä ikkunaan että painonappiin liittyviä tapahtumia:

16 this.addwindowlistener(this); omanappi.addactionlistener(this); Ikkunan tapahtumiin liittyy monta metodia, mutta näistä useimmat voidaan jättää tässä tyhjiksi, koska halutaan reagoida ainoastaan siten, että ohjelma päätetään, kun ikkuna suljetaan. Tarvitaan koodia vain metodiin public void windowclosing(windowevent e) System.exit(0); Kun käyttäjä sulkee ikkunan, siihen liittyvä tapahtuma ohjautuu edelliselle metodille. Kun painonappia painetaan, kutsutaan ActionListener-rajapinnan metodia, jonka koodi on seuraava: public void actionperformed(actionevent e) // Tapahtuman lähdeolio Object olio = e.getsource(); // Tutkitaan miltä napilta tapahtuma lähti // ja näytetään dialogi if(olio == omanappi) JOptionPane.showMessageDialog(this,"Painoit nappia!"); Metodin parametriksi saadaan tapahtumaolio, jonka avulla saadaan selville, minkä olion tapahtumasta on kyse. Jos tapahtuma aiheutui painonapin omanappi painalluksesta, näytetään dialogi.

17 Lähteet [Arn] Arnold, Ken Gosling, James. The Java Programming Language, Second Edition, Addison-Wesley [Seb] Sebesta, Robert W. Concepts of Programming Languages 10th edition, Pearson [Strou] Stroustrup, Bjarne. The C++ Programming Language, 3rd edition, Murray Hill 1997.

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 VIII Poikkeusten ja tapahtumien käsittely Sisältö 1. Poikkeusten käsittelyn käsitteitä ja suunnittelukriteerejä 2. Poikkeusten käsittely C++:ssa 3. Poikkeusten

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Poikkeukset Poikkeuksella tarkoitetaan yllättävää ajonaikaista tilannetta, joka

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

Olio-ohjelmointi Virhetilanteiden käsittely

Olio-ohjelmointi Virhetilanteiden käsittely Olio-ohjelmointi 2016 Virhetilanteiden käsittely Poikkeustilanteet n Java-järjestelmässä voidaan ottaa kiinni ohjelman suoritusaikana tapahtuvia virhetilanteita, joita ei saada kiinni tavanomaisilla ohjausrakenteilla

Lisätiedot

Olio-ohjelmointi Poikkeusten käsittelystä. 1. Johdanto

Olio-ohjelmointi Poikkeusten käsittelystä. 1. Johdanto Olio-ohjelmointi Poikkeusten käsittelystä Virheiden käsittely liittyy olennaisesti kaikkeen ohjelmointiin. Monissa sovelluksissa virhetilanteiden käsittelemiseen liittyvää koodia on merkittävä osuus koko

Lisätiedot

Poikkeustenkäsittely

Poikkeustenkäsittely 1 Poikkeustenkäsittely Mitä poikkeustenkäsittely tarkoittaa? Poikkeuksen käsitteleminen Poikkeusluokkien hierarkia Poikkeuksen heittäminen 1 Mitä poikkeustenkäsittely tarkoittaa? Poikkeus (Exception) on

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

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

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

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

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

Mitä poikkeuskäsittely tarkoittaa?

Mitä poikkeuskäsittely tarkoittaa? Poikkeuskäsittely Mitä poikkeuskäsittely tarkoittaa? Poikkeuskäsittelyluokkien hierakkia Poikkeuksen sieppaaminen Mihin järjestykseen try-catch-lauseen ExceptionType-poikkeukset laitetaan? Poikkeuksen

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

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

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

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään

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

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

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

Java-API, rajapinnat, poikkeukset, UML,...

Java-API, rajapinnat, poikkeukset, UML,... Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)

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

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi

Lisätiedot

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

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

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

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

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

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

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite 2015 syksy 2. vsk VII Suunnittelumallit Adapter ja Composite Sisältö 1. Johdanto rakennemalleihin 2. Adapter (Sovitin) 3. Composite (Rekursiokooste) Suunnittelumallit Adapter ja Composite 2 VII.1 Johdanto

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

Ohjelman virheet ja poikkeusten käsittely

Ohjelman virheet ja poikkeusten käsittely Ohjelman virheet ja poikkeusten käsittely 17 Ohjelman virheet ja poikkeusten käsittely Poikkeukset ovat tapa ilmoittaa virheistä ja odottamattomista tilanteista C++-ohjelmassasi. Poikkeusten käyttö virheiden

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma. Välikoe / 20.3 Vastaa neljään (4) tehtävään. Jos vastaat 5:een, 4 huonointa arvostellaan. Kunkin tehtävän vastaus eri konseptille. 1. Pöytätesti Pöytätestaa seuraava ohjelma. Tutki ohjelman toimintaa pöytätestillä

Lisätiedot

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

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöteja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

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

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

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

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely

Lisätiedot

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

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

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

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,

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

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

5/20: Algoritmirakenteita III

5/20: Algoritmirakenteita III Ohjelmointi 1 / syksy 2007 5/20: Algoritmirakenteita III Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/17 Tämän

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

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

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

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

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

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

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

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

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

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

RINNAKKAINEN OHJELMOINTI A,

RINNAKKAINEN OHJELMOINTI A, RINNAKKAINEN OHJELMOINTI 815301A, 18.6.2005 1. Vastaa lyhyesti (2p kustakin): a) Mitkä ovat rinnakkaisen ohjelman oikeellisuuskriteerit? b) Mitä tarkoittaa laiska säikeen luominen? c) Mitä ovat kohtaaminen

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

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

// Tulostetaan double-tyyppiseen muuttujaan hinta tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf(%.1f euros. Lue kukin tehtävänanto huolellisesti ja kokonaisuudessaan ennen kuin aloitat vastaamisen. Kustakin tehtävästä voi saada 0 6 pistettä. Tentin läpipääsyraja on 12 / 24 pistettä. Ratkaisut palautetaan WETO-järjestelmään

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

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

ITKP102 Ohjelmointi 1 (6 op)

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

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

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

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

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

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 26. Tiedostot 26.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python 7. helmikuuta 2009 Ohjelmoinnista Ohjelman peruselementtejä Koodin kommentointi Lohkorakenne Ohjausrakenteet If For While Try Funktiot Käyttö

Lisätiedot

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance) Sisällys JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys Periytyminen (inheritance) Näkyvyys (visibility) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E. Hyvönen: Java Osa

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

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla Lasse Leino ja Marko Kahilakoski Helsingin Yliopisto Tietojenkäsittelytieteen laitos Rinnakkaisohjelmointi 18. joulukuuta 2006 Sisältö 1 Säikeet

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

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

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

Lisätiedot

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

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä. Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä. JUnit-ympäristö 1. Luo tests -pakkaukseen uusi luokka. Nimeä VHTestit. 2. Laita VHTestit periytymään TestCase:sta

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot

Ohjelmoinnin perusteet, kurssikoe

Ohjelmoinnin perusteet, kurssikoe Ohjelmoinnin perusteet, kurssikoe 18.6.2014 Kirjoita jokaiseen konseptiin kurssin nimi, kokeen päivämäärä, nimi, TMC-tunnus ja opiskelijanumero tai henkilötunnus. Vastaukset palautetaan tehtäväkohtaisiin

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ä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

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

Rinnakkaisohjelmointi, Syksy 2006

Rinnakkaisohjelmointi, Syksy 2006 Rinnakkaisohjelmointi, Syksy 2006 17.12.2006 Opintopiiri WTF Mika Holmström Paula Kemppi Janne Piippo Lasse Lukkari Javan semaforit 1. Menetelmän käyttötarkoitus ja sovellusalue Semaforin idea kehitettiin

Lisätiedot

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2

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

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

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

Lisätiedot