Poikkeusten ja tapahtumien käsittely
|
|
- Eija Penttilä
- 7 vuotta sitten
- Katselukertoja:
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 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ätiedot14. 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ätiedotSisä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ätiedotSisä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ätiedot14. 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ätiedotOpintojakso 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ätiedot812347A 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ätiedotOlio-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ätiedotOlio-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ätiedotPoikkeustenkä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ätiedotOhjelmoinnin 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ätiedot15. 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ätiedotOlio-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ätiedotJAVA-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ätiedot5. 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ätiedotMitä 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ätiedot15. 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ätiedot8. 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ätiedot1. 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ätiedot8. 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ätiedotTietojen 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ätiedot4. 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ätiedotJAVA-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ätiedotSisä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ätiedotJava-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ätiedotSisä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ätiedotRinnakkaisohjelmointi 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ätiedotYleistä. 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ätiedot815338A 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ätiedotSisä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ätiedotSisä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ätiedotOhjelmoinnin 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ätiedot12. 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ätiedotMetodit. 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ätiedotOhjelmointi 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ätiedotOhjelmassa 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ätiedot812347A 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ätiedot5. 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ätiedotOhjelman 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ätiedotOlio-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ätiedot815338A 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ätiedotSisä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ätiedot815338A 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ätiedotITKP102 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ätiedotJava-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ätiedotOhjelmointi 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ätiedotSisä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ätiedot7. 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ätiedot812341A 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ätiedot11/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ätiedotOhjelmointitaito (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ätiedotSisä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ätiedotSisä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ätiedotOlio-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ätiedotTaulukot. 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ätiedotJava-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ätiedotITKP102 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ätiedotOhjelmoinnin 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ätiedotTapahtumapohjainen 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ätiedotMetodien 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ätiedot5/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ätiedotOhjelmoinnin 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ätiedotOlion 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ätiedotSisä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ätiedotOhjelmoinnin 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ätiedotLohkot. 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ätiedotTehtä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ätiedotGRAAFISEN 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ätiedot7. 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ätiedotInformaatioteknologian 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ätiedot9. 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ätiedotJavan 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ätiedotRINNAKKAINEN 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ätiedotRajapinta (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.
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ätiedotITKP102 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ätiedotJava 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ätiedotGraafisen 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ätiedotITKP102 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ätiedotHarjoitus 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ätiedotOsio 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ätiedotOsoitin 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ätiedotSisä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ätiedotTä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ätiedotSisä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ätiedotLohkot. 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ätiedot1.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ätiedotProjekti 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ätiedotJAVA 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ätiedot812341A 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ätiedotSisä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ätiedotToisessa 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ätiedotSisä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ätiedotOhjelmoinnin 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ätiedot9. 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ätiedotOhjelmoinnin 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ätiedotRinnakkaisohjelmointi, 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ätiedotTIE 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ätiedotLuento 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ätiedotOhjelmointitaito (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