Ohjelmoinnin peruskurssien laaja oppimäärä

Koko: px
Aloita esitys sivulta:

Download "Ohjelmoinnin peruskurssien laaja oppimäärä"

Transkriptio

1 Ohjelmoinnin peruskurssien laaja oppimäärä Luento 12: Moniperintä ja rajapinnat, poikkeukset, kontinuaatioista Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä ja Juha Sorva)

2 Sisältö 1 Moniperintä ja rajapinnat 2 Poikkeukset 3 Kontinuaatioista

3 Moniperinnästä edellä luokilla on ollut vain yksi (suora) yliluokka voisiko yliluokkia olla useampi? muutamassa oliokielessä voi (esim. Common Lisp ja C++) useimmissa vain rajoituksin moniperintä sallisi joskus parempia abstraktioita kuten tavallisellakin perinnällä, sillä voi vähentää koodin kopiointia samoin ongelman mallinnus olioiksi ja luokiksi olisi joskus luonnollisempaa moniperinnän avulla, sillä luonnollinen malli ei aina ole puu mutta käytännössä kokonainen moniperinnän tuki monimutkaistaisi monia oliojärjestelmiä liikaa

4 Moniperinnän ongelmia ohjelmointikielissä moniperinnän perusongelma: jos useammassa perintäverkon haarassa on korvattu sama metodi, mitä niistä käytetään? eri moniperintää tukevilla kielillä on hieman erilainen ratkaisu, mutta yleensä ne perustuvat siihen, missä järjestyksessä yliluokkien nimet kerrotaan aliluokassa mutta toiminta ei ole aina kovin intuitiivista tai helppoa ymmärtää... kentissä on samankaltainen ongelma: jos jokin yliluokka x peritään kahta polkua pitkin, pitäisikö perivään luokkaan tulla yksi vai kaksi kappaletta yliluokan x kenttiä? näkevätkö D-oliossa alla B:n ja C:n metodit eri vai saman x:n? class A { int x; } class B extends A {... } class C extends A {... } class D extends B and C {... } molempia tapoja on käytössä eri kielissä

5 Ohjelmointikielten tekemiä ratkaisuja usein ohjelmointikieli ratkaisee em. ongelmat rajoittamalla moniperintää esim. kielletään periminen niin, että useammassa haarassa olisi korvattu samoja metodeita tai ohjelmoijan pitää erikseen kertoa, minkä yliluokan metodi aliluokan oliosta näkyy Javan ratkaisu: vain rajapintojen moniperintä on mahdollista, varsinaisia suoria yliluokkia on aina yksi rajapinnassa ei ole kenttiä eikä metodien toteutuksia, joten em. ongelmia ei esiinny Scalassa on lisäksi luokan kaltainen rakenne nimeltä trait, jolla voi tehdä eräänlaista moniperintää (lisää myöhemmin)

6 Rajapinnat Rajapinta, interface, on Javan tarjoama mekanismi, jolla voidaan määritellä tyyppi määrittelemättä sille lainkaan toteutusta Abstraktia luokkaa muistuttava rakenne, joka ei kuitenkaan saa sisältää lainkaan metoditoteutuksia tai muuttujia (paitsi vakioita) Metodien esittelyihin ei kuitenkaan tarvita tässä abstract-sanaa, sillä rajapinnan metodit ovat aina abstrakteja ja julkisia Rajapinta näyttää muuten luokkamäärittelyltä, mutta sanan class sijaan tulee merkintä interface public interface Liikkuva { } public void siirry ( Paikka p ); 10:08

7 Perintä vs. Rajapinnat Milloin käyttää perintää ja milloin rajapintoja? Perintää käytetään kun luokat jakavat yhteistä koodia, yhteisiä muuttujia. Yhteinen toiminnallisuus voidaan usein sijoittaa abstraktiin yliluokkaan. Javassa luokka voi periä vain yhden luokan. Päätös käyttää perintää voi olla (* joskus este jatkokehityksessä ratkaisu on usein toiminnan delegointi Rajapintoja käytetään kun luokilla on osittain yhteinen ulkoinen rajapinta, mutta yleensä selkeästi eroavat toteutukset yhteisille ominaisuuksille. Rajapintojen nimet ovat usein ominaisuuksia kuten Comparable, Serializable, Hashable, HasColor, CanBeSaved jne. *) Delegaatiossa osa luokan toiminnoista on siirretty johonkin toiseen, erilliseen, luokkaan. Näin eri yliluokat omaavat aliluokat voivat käyttää yhteistä toiminnallisuutta yhä hyväkseen vaikka koodia ei duplikoida. 10:08

8 Rajapinnat Rajapinnalla määritetty tyyppi on yleensä jonkinlainen ominaisuus, jonka rajapinnan täyttävät luokat omaavat Jokainen ominaisuuden täyttävä luokka kertoo toteuttavansa (implements) rajapinnassa vaaditut metoditoteutukset Jos luokka sekä täyttää rajapinnan että perii luokan merkitään perintä ensin. public class Kontti implements Liikkuva { public void siirry ( Paikka p ){...toteutus public class Kirje implements Liikkuva { public void siirry ( Paikka p ){... Kirjeille sopiva toteutus 10:08

9 Rajapinnat Rajapinta Vain abstrakteja, julkisia metodeja (ei tarvitse erikseen kertoa) Vakioita = (public final static kenttiä) jotka pitää kaikki alustaa Koko rajapinnan näkyvyys on public tai default (ei mitään) Luokka voi täyttää samanaikaisesti monta eri rajapintaa Rajapinnat luetellaan pilkuilla eroteltuna listana implements-määreen jälkeen Moniperinnän kaltaista ongelmatilannetta ei synny...paitsi jos rajapinnoissa voi olla samannimiset metodit jotka on tarkoitettu aivan eri tehtäviin...tai jos muuten samanlaiset metodit omaavat erityyppiset paluuarvot 10:08

10 Rajapinnat Abstrakti luokka voi täyttää rajapinnan vaikka jotkin tai kaikki rajapinnan vaatimat metodit olisivat abstrakteja. Tämä siksi, että luokka joka lopulta toteuttaa abstrakteiksi jääneet metodit kuitenkin täyttää rajapinnan ei voi syntyä olioita, joilla ei olisi toteutuksia näille metodeille. Rajapinta voi periä yhden tai useamman rajapinnan koska toteutusristiriitaa ei juurikaan ole public interface RajapintaA extends RajapintaB, RajapintaC... Myöskään tässä moniperinnän kaltaista ongelmatilannetta ei synny...paitsi jos rajapinnoissa voi olla samannimiset metodit jotka on tarkoitettu aivan eri tehtäviin...tai jos muuten samanlaiset metodit omaavat erityyppiset paluuarvot 10:08

11 Rajapinta Comparable Comparable-rajapinnan määrittelemä ominaisuus on nimenmukaisesti verrattavuus Tämä rajapinta määrittelee yhden metodin compareto Olion tulee verrata itseään parametriolioon ja palauttaa kokonaisluvulla tieto siitä, onko parametriolio yhtäsuuri, suurempi vai pienempi Tämä riittää useimmille tietorakenteille ja algoritmeille monenlaiseen järjestyksen ylläpitoon. Algoritmit käsittelevät rajapinnan täyttäviä olioita Comparable-olioina. public interface Comparable <VerrattavaTyyppi> { } public int compareto ( VerrattavaTyyppi o ); 10:08

12 Rajapinta Comparable Suuri määrä Javan luokista täyttää Comparable-rajapinnan String Integer Date Vastaavasti mm. Collections Frameworkista löytyy paljon metodeja ja luokkia jotka osaavat toimia Comparable-olioiden kanssa esim Collections.sort osaa järjestää listoja joiden alkiot täyttävät Comparablerajapinnan Eclipse-esimerkki livenä... 10:08

13 Muita rajapintoja Serializable ns. Marker Interface joka ei määrittele lainkaan metodeja vaan jota käytetään pelkästään tietyn ominaisuuden omaavien luokkien tunnistamiseen Serializable antaa java:lle luvan sarjallistaa olio muistista kuvaukseksi jonka voi tallentaa/siirtää jonnekin ja myöhemmin/muualla taas ladata takaisin muistiin 10:08

14 Rajapinnat ja dynaaminen tyypitys rajapinnat ovat staattiseen tyypitykseen liittyvä käsite ne tarkistetaan käännösaikana metodikutsu suostutaan kääntämään vain jos kutsuttavan olion käännösaikainen tyyppi toteuttaa metodin sisältävän rajapinnan tai metodi on määritelty yliluokissa tämä on ns. nimipohjainen tyyppijärjestelmä (nominal type system): koodissa ilmoitetut luokkien nimet määräävät, mitä metodeja saa kutsua dynaamisesti tyypitetyissä kielissä yleensä metodikutsu sallitaan, jos kutsuttavalla oliolla on (ajon aikana) halutun niminen metodi näin mm. Pythonissa, Rubyssä ja Common Lispissä siis mikä tahansa olio, joka määrittelee oikean nimiset metodit kelpaa, vaikka se olisi perintähierarkiassa aivan muualla kuin ohjelmoija alun perin ajatteli tämä on nimeltään duck typing joustavampaa, mutta vähentää kääntäjän mahdollisuuksia löytää virheitä

15 Taustaa: mitä on staattinen tyypitys? edellä on monta kertaa puhuttu staattisen ja dynaamisen tyypityksen eroista perusero on toki: dynaamisessa tyypityksessä tyypit tarkistetaan ajon aikana staattisessa tyypityksessä tyypit tarkistetaan ennen suoritusta toinen tapa kuvata eroa: staattinen tyypitys on todistus eräästä ohjelman ominaisuudesta, jonka kääntäjä tarkistaa ja voi sen avulla välttää ajon aikaisia tarkistuksia kolmas tapa: staattisessa tyypityksessä muuttujilla on tyyppi dynaamisessa tyypityksessä arvoilla on tyyppi (yksittäinen muuttuja voi osoittaa mihin tahansa arvoon, mutta arvolla on tietty tyyppi)

16 Tyypityksen erikoisuuksia usein staattinen tyypitys on vain osittaista: joitakin tyyppejä joudutaan kuitenkin tarkistamaan ajon aikana varsinkin oliokielissä, sillä olion tyyppi eli luokka on dynaamisesta metodinvalinnasta johtuen osin ajon aikainen käsite monissa kielissä (mm. Java, C, C++) staattiset tyypit kerrotaan koodissa toinen vaihtoehto on tyyppipäättely, jossa kääntäjä päättelee staattiset tyypit tai osan niistä (esim. Haskell, ML, osin Scala) staattisen ja dynaamisen tyypityksen lisäksi on myös mahdollista jättää tyypit tarkistamatta (tyypitön, untyped, kieli) tai määrätä kaikille arvoille sama tyyppi heikko tyypitys (vs. vahva): tyyppejä ei tarkisteta kaikissa tilanteissa (esim. C-kielessä)

17 Sisältö 1 Moniperintä ja rajapinnat 2 Poikkeukset 3 Kontinuaatioista

18 Mihin poikkeuksia käytetään? Usein poikkeustilanteeseen ei voida reagoida mielekkäästi juuri siellä (siinä metodissa), missä poikkeustilanne syntyy. Esim. Mitä Integer.parseInt-metodin pitäisi tehdä, jos sen parametri on kelvoton? Metodin yleishyödyllisyys laskisi ratkaisevasti, jos se itse päättäisi. Metodin palautusarvoa voi joskus käyttää (ja käytetäänkin) erikoistilanteiden kuvaamiseen, mutta sillä on rajoituksensa. Esim. Metodi palauttaa taulukon pienimmän arvon. Mitä tehdään, jos taulukko onkin tyhjä? Poikkeusten käsittely perustuu Javassa siihen, että on mahdollista heittää poikkeus (eli nostaa poikkeus; engl. throw/raise an exception) eli välittää poikkeustilanneilmoitus eteenpäin sellaisen ohjelmakohdan huoleksi, joka määrittelee, miten poikkeustilanteesta selvitään. Ellei metodi voisi heittää poikkeusta, jouduttaisiin erikoistilanteisiin aina joko reagoimaan sen metodin sisällä, jossa ne syntyvät, tai välittämään tieto tilanteesta eteenpäin jollain tarkoitukseen vähemmän luonnollisella tavalla (yleensä metodin palautusarvona). 10:08

19 Poikkeusoliot, Exception-luokka Poikkeustilanteet kuvataan Javassa olioina (yllätys). Kaikki poikkeusoliot ovat luokan java.lang.exception ilmentymiä - joko suorasti tai epäsuorasti. Yleisluontoisia poikkeusolioita on mahdollista instantioida suoraan Exception-luokasta, mutta tavallisesti on mielekkäämpää luoda erikoistuneempi olio jostakin tämän emäluokan aliluokasta. Käytännössä poikkeusolioita luodaan lähes aina juuri silloin, kun halutaan ilmoittaa suoritettavan metodin kutsujalle, että metodin suoritus jostain syystä epäonnistui, eli halutaan heittää poikkeus. Tämä kutsuja(metodi) voi sitten päättää, miten suhtautuu asiaan. Poikkeukset muodostavat kommunikointikanavan kutsutulta metodilta kutsuvalle (vrt. metodin palautusarvo). 10:08

20 Poikkeusten heittäminen Poikkeuksen heittämiseen on Javassa erikseen määritelty throw-käsky. Heittolauseelle annetaan heitettäväksi yksi poikkeusolio. throw-lause keskeyttää metodin normaalin suorituksen. Suoritusta jatketaan ensimmäisestä löydetystä ohjelmakohdasta, johon on kirjattu menettely kyseisenlaisten poikkeusten käsittelyyn. if (hommaeitoiminut) throw new Exception( Juttu X meni pieleen. ); // Näille riveille ei mennä, jos poikkeus // heitettiin. Sen sijaan hypätään sellaiseen // ohjelmakohtaan, johon on merkitty erityisiä // poikkeuksenkäsittelykäskyjä. Tässä luodaan poikkeusolio ja heitetään se saman tien. (Nämä kaksi asiaa tehdäänkin hyvin usein yhdessä.) Ei onnistunut! Sä annoit tän tehtävän, joten tiedät kai sitten mitä tälle tehdään! Siihen miten tällainen poikkeuksenkäsittelijärakenne merkitään Javaohjelmaan, palataan tuossa tuokiossa. Tavallisesti tällaista poikkeuksenkäsittelijärakennetta ei löydy samasta metodista throw-lauseen kanssa. Tällöin poikkeus heitetään ulos metodista, 10:08 eli metodin suoritus keskeytyy kokonaan ja poikkeukselle lähdetään etsimään käsittelijää sitä kutsuneesta metodista.

21 Poikkeusmahdollisuudesta varoittaminen Suuri osa Javan poikkeuksista kuuluu ns. tarkastettavien poikkeusten kategoriaan (engl. checked exceptions). Monien mielestä ohjelmoijan itse määrittelemien poikkeustyyppien tulisi sisältyä tähän joukkoon. Vastakohtana vapaasti heitettävät poikkeukset, joita käsitellään myöhemmin. Jos jokin metodi saattaa heittää ulos tarkastettavan poikkeuksen, on metodin kerrottava kutsujilleen tästä määrittelynsä yhteydessä. Metodi varoittaa mahdollisesti heittävänsä poikkeuksen. Heittämisilmoitus merkitään throws-määrellä (vrt. throw-lause) metodin puumerkin yhteyteen Jos metodin suoritus voi mennä pieleen usealla eri tavalla, voi poikkeustyyppejä luetella useita. Okei, vaan jos jokin mättää, niin se on sun ongelma. public int esimerkkimetodi() throws Poikkeustyyppi1, Poikkeustyyppi2 /* jne. */ { //... } 10:08

22 Poikkeuksiin reagoiminen Jos jokin metodi kutsuu toista metodia, joka on ilmoittanut mahdollisesti heittävänsä (tarkastettavan) poikkeuksen, on kutsuvan metodin koodiin erikseen merkittävä, miten se suhtautuu tähän mahdollisuuteen. Vaihtoehdot ovat: sieppaaminen: reagoin suorittamalla nämä ja nämä koodirivit eteenpäin syöttäminen: reagoin välittämällä homman muiden ohjelman osien huoleksi. No, okei, tää on mun homma. En minäkään tiedä mitä sille tehdään! Hoida sinä siellä! Kääntäjä esittää vastalauseensa, ellei jompaa kumpaa suhtautumistapaa ole koodiin kirjattu. Näin ohjelmoija pakotetaan ottamaan kantaa siihen, miten (tarkastettavat) poikkeustilanteet käsitellään. Vrt. palautusarvojen käyttö erikoistilanteista tiedottamiseen. Huomattava osa käytössä olevien ohjelmien bugeista johtuu siitä, ettei 10:08 erilaisiin erikoistilanteisiin ole varauduttu huolella.

23 Poikkeusten sieppaaminen try { Metodi, joka kutsuu poikkeuksen mahdollisesti heittävää metodia, voi ilmoittaa itse hoitelevansa eli sieppaavansa (engl. catch) syntyvät poikkeukset (tai ainakin tietyntyyppiset poikkeukset). Tämä toteutetaan try-catch-lauseella: yritän tehdä nämä hommat, mutta jos niitä suorittaessa jokin menee pieleen, niin sieppaan poikkeusolion ja katson mitä sillä teen. Koodia, jonka ainakin yhdestä kohdasta kutsutaan poikkeuksen mahdollisesti heittävää metodia. } catch (jonkintyyppinen poikkeus) { Koodia, joka suorittamalla reagoidaan tällaiseen poikkeukseen. } catch (toisentyyppinen poikkeus) { Koodia, joka suorittamalla reagoidaan tähän toiseen poikkeustyyppiin. } (jne.) Jos jostain try-lohkossa kutsutusta metodista heitetään poikkeus, hypätään loppuosa lohkosta ohi ja siirrytään catchlohkoon. Jos try-lohkon suoritus onnistuu mutkitta, ei mitään catch-lohkoa suoriteta. catch-lohkoja voi olla usealle eri poikkeustyypeille. Usein yksikin riittää. Kun jonkin lohkoista loppu saavutetaan, jatkuu ohjelman suoritus tavalliseen tapaan try-catch-lauseen jälkeisiin lauseisiin. 10:08

24 try-catch Esimerkki Yritetään luoda uusi opiskelijaolio ja tulostaa sen opiskelijanumero. Opiskelijaluokan konstruktorista ilmoitetaan, että se voi heittää poikkeuksen. Varautumiseen on syytä. Sijoitetaan lauseet try-lohkoon. Jos konstruktori heittää poikkeuksen, ei tulostuslausetta suoriteta, vaan hypätään catch-osioon. Tämä lohko sieppaa luokan VirheellinenOpiskelijaData olioita (mahdollisten aliluokkien ilmentymät mukaan lukien). Kun lohko aktivoituu ja sieppaa poikkeuksen, sijoittuu heitetty olio automaagisesti paikalliseen muuttujaan (tässä nimeltä dataongelma), jonka käyttöalueena on catch-lohko. Vrt. metodien parametrit. Opiskelija opiskelija; try { opiskelija = new Opiskelija( Teemu Teekkari ); System.out.println( opiskelija.kerroopiskelijanumero() ); } catch ( VirheellinenOpiskelijadata dataongelma ) { } opiskelija = null; System.out.println( dataongelma.getmessage()); System.out.println( Virheellinen datarivi oli \ + dataongelma.kerrovirheellinendata() + \. ); Opiskelijadatassa ei ollut tasan kolmea sanaa. Virheellinen datarivi oli Teemu Teekkari. Kuvausviesti saadaan Exception- luokasta perityllä getmessagemetodilla. 10:08

25 printstacktrace-metodi Luokan Exception metodi printstacktrace tulostaa luettelon, josta käy ilmi, minkä metodien kutsujen seurauksena poikkeustilanne on syntynyt. Tulostuu poikkeusta luotaessa tallennettu kutsupino (engl. call stack). printstacktrace ja getmessage-metodia sekä muita kyseiselle poikkeustyypille määriteltyjä metodeita käyttäen voidaan edesauttaa virheiden etsintää ohjelmasta. Eräs poikkeuksien vahvuuksista on se, että niillä voi kätevästi välittää kuvauksia ja lisätietoja ongelmatilanteista. public void testaile() { try { this.opiskelija = new Opiskelija( Teemu Teekkari ); System.out.println(this.opiskelija.kerroOpiskelijanumero()); } catch (VirheellinenOpiskelijadata dataongelma) { this.opiskelija = null; dataongelma.printstacktrace(); } } tulostaa esim. VirheellinenOpiskelijadata: Opiskelijadatassa ei ollut tasan kolmea sanaa. at Opiskelija.<init> (Opiskelija.java:9) at Kokeiluohjelma.testaile (Kokeiluohjelma.java:29) at Kokeiluohjelma.main (Kokeiluohjelma.java:7) 10:08

26 Poikkeuksen heittäminen eteenpäin Metodi, joka kutsuu poikkeuksen mahdollisesti heittävää metodia, voi sieppaamisen sijaan suhtautua kutsumastaan metodista heitettyihin poikkeuksiin passiivisemminkin ja heittää ne (tai ainakin tietyntyyppiset niistä) eteenpäin sitä itseään kutsuneelle metodille. Tämä edellinen kutsuja voi sitten puolestaan jälleen joko siepata poikkeuksen tai heittää sen yhä aikaisemmalle tasolle kutsujen sarjassa. Eteenpäin heittäminen tehdään yksinkertaisesti merkitsemällä kyseinen poikkeustyyppi (tai -tyypit) tämän toisenkin metodin throws-osioon. Metodi testaile ilmoittaa vain heittävänsä VirheellinenOpiskelijadatapoikkeuksia, eikä itse määrittele niille käsittelytapaa. public void testaile() throws VirheellinenOpiskelijadata { this.opiskelija = new Opiskelija( Teemu Teekkari ); System.out.println(this.opiskelija.kerroOpiskelijanumero()); } Jos opiskelijakonstruktori heittää poikkeuksen, keskeytyy testaile-metodin suoritus konstruktorikutsuun samaan tapaan kuin jos siinä kohdassa olisi throw-lause. Konstruktorin luoma poikkeusolio heitetään ulos myös testaile-metodista. 10:08

27 Poikkeuksen heittäminen ulos ohjelmasta Poikkeuksen heittäminen ulos metodista on ongelmanratkaisun siirtämistä tuonnemmaksi. Jossakin on lopulta ilmoitettava, miten pulmaan reagoidaan tai ohjelman suoritus ei voi jatkua. Poikkeuksen voi periaatteessa heittää aina ohjelman käynnistysmetodiin main saakka. Myös käynnistysmetodin voi määrätä heittämään poikkeuksen, mutta tällöin vastaanottajaksi jää loppujen lopuksi enää main-metodia tulkkiohjelman välityksellä kutsunut ohjelman käyttäjä, jonka syliin ongelma kippautuu. Tämä johtaa normaalisti ohjelman (säikeen) kaatumiseen ja Javavirtuaalikoneen tulostamaan poikkeustilanneilmoitukseen. Erittäin huonoa tyyliä safiiri ~ % java Kokeiluohjelma VirheellinenOpiskelijadata: Opiskelijadatassa ei ollut tasan kolmea sanaa. at Opiskelija.<init> (Opiskelija.java:9) at Kokeiluohjelma.testaile (Kokeiluohjelma.java:29) at Kokeiluohjelma.main (Kokeiluohjelma.java:7) 10:08

28 Vapaasti heitettävät poikkeukset Tietyt Java-kielen peruskäyttöön kytkeytyvät poikkeustapaukset ovat niin yleisiä ja perustavaa laatua olevia, ettei niitä tarvitse eksplisiittisesti huomioida ohjelmakoodissa. Näitä vapaasti heitettäviä poikkeuksia (engl. unchecked exceptions) (vrt. tarkastettavat poikkeukset) ovat mm. NullPointerException: yritetään viitata null-viittauksen läpi. ArrayIndexOutOfBoundsException: viitataan olemattomaan taulukkoalkioon ClassCastException: kelvoton tyyppimuunnos ArithmeticException: esim. jaetaan nollalla NumberFormatException: esim. yritetään tulkita kissa lukuna Exception-luokalla on (java.lang-pakkauksessa) aliluokka RuntimeException. Sen ilmentymät ovat vapaasti heitettäviä. Javan vapaasti heitettäviä poikkeuksia kuvaavat luokat ovat siis luokan RuntimeException aliluokkia. Luokalle voi itsekin luoda aliluokkia, ja kehittää omia vapaasti heitettäviä 10:08 poikkeustyyppejä. Omista poikkeustyypeistä kannattaa kuitenkin yleensä tehdä tarkastettavia.

29 Vapaasti heitettävät poikkeukset Vapaasti heitettäviä poikkeuksia ei siis tarvitse kirjata throwsmerkinnällä, vaikka metodi niitä voisikin heittää. Monet näistä poikkeuksista ovatkin sellaisia, että ne voivat syntyä lähes missä vaan, ja olisi melko tuskaisaa kirjoittaa koodia, jossa jatkuvasti catch-lohkoin varauduttaisiin niihin Tämä ei tarkoita, etteivät vapaasti heitettävät poikkeukset tulisi samalla tavalla heitetyiksi metodilta toiselle kuin muutkin poikkeukset - kunnes ne siepataan tai lentävät ulos käynnistysmetodista. Ohjelman välitön kuolinsyy onkin usein juuri sieltä ulos sinkoutunut vapaasti heitettävä poikkeus. Ohjelmoijalle jää koko vastuu hoitaa nämä poikkeukset jotenkin - estämällä niiden syntyminen tai sieppaamalla ne. Myös vapaasti heitettäviä poikkeuksia voi (ja tilanteesta riippuen saattaa kannattaakin) siepata samaan tapaan kuin tarkastettaviakin poikkeuksia. Niiden heittymisen voi myös kirjata throws-määreellä metodien toiminnan täsmentämiseksi, vaikka se ei olekaan pakollista. 10:08

30 Virheet, Luokka Error Jos ajettaessa tapahtuu virhe, josta ohjelma ei pystyne toipumaan, synnyttää ja heittää ohjelmaa ajava Javavirtuaalikone virheolion. Esim. Yritetään luoda uusi olio, mutta tietokoneen muisti loppuu kesken. Esim. Joku ohjelman luokkatiedostoista on tuhoutunut tai siihen ei pääse käsiksi. Virheen syntyminen johtaa yleensä siihen, että ohjelma kaatuu ja näytölle tulostuu jonkinlainen virheilmoitus. Virheoliot ovat java.lang.errorin (tai sen aliluokan) ilmentymiä ja niitä heitetään samaan tapaan kuin vapaasti heitettäviä poikkeuksia. Virheolioita ei niiden luonteen vuoksi aina ole mielekästä siepata. Ne kertovat sellaisista hyvin vakavista, mahdollisesti laitteistoriippuvaisista ongelmista, joiden korjaaminen ohjelman ajon aikana ei usein ole realistista. 10:08

31 Heiteltävien asioiden hierarkia Throwable Oliot, joita voi heittää ja siepata. Exception Hankaluudet ja epätavalliset tilanteet. Error Lähes varmasti kuolettavat virheet.... Esim. FileNotFoundException sekä itse määriteltyjä poikkeuksia RuntimeException Vapaasti heitettävät poikkeukset... Esim. NullPointerException, ArrayIndexOutOfBoundsException sekä itse määriteltyjä poikkeuksia Esim. OutOfMemoryError... 10:08

32 try-catch-finally Catch-osioiden lisäksi try-lohkon perään voi sijoittaa myös finally-lohkon Finally-lohko suoritetaan try-lohkosta poistuttaessa kun mahdolliset catchlohkot on suoritettu. Finally suoritetaan vaikka try-lohkosta poistuttaisiin vapaasti heitettävällä poikkeuksella tai return-lauseella. ja se suoritetaan vasta returnin jo saatua palautettavan arvon. Tämän vuoksi finally on usein turvallinen paikka suorittaa joitakin siivousoperaatioita sillä mahdolliset ajonaikaisetkaan virheet eivät voi estää rivien suoritusta Kun finally on suoritettu koodin suoritus jatkuu kuten se olisi jatkunut ilman finally-lohkoa Esimerkki finally:n käytöstä tulee tietovirtojen yhteydessä maanantaina. 10:08

33 Poikkeusten ketjuttaminen Joskus heitettävä virhe johtuu toisesta poikkeuksesta ja tieto alkuperäisestä poikkeuksesta halutaan myös säilyttää, voidaan alkuperäinen poikkeus ketjuttaa uuden perään Käytännössä luodaan uusi poikkeusolio ja metodilla initcause kerrotaan tälle alkuperäisestä poikkeuksesta ennen kuin uusi poikkeus heitetään. 10:08

34 Poikkeukset kontrollirakenteena poikkeuksilla voisi periaatteessa toteuttaa muutaman muun kontrollirakenteen: break ja continue silmukasta (tee catch silmukan ehtoon) return funktiosta tai metodista (lisää funktion rungon ympärille trycatch) käytännössä koodin selkeyden ja tehokkuuden vuoksi ei kannata yleinen käytäntö: poikkeus kuvaa poikkeuksellista tilannetta tai virhettä, ei tavanomaista suorituksen etenemistä mutta joskus poikkeuksia käytetään myös muuten esimerkiksi monimutkaisesta rekursiosta voi hypätä pois heittämällä poikkeuksen

35 Poikkeusten toteuttaminen miten poikkeukset oikeasti toimivat? poikkeus hyppää aina ylöspäin kutsupinossa tai ulommas funktion sisällä ei toisen rakenteen sisään (paitsi catch-lohkoon) eikä paikkaan, jonka sisällä ei nyt olla toteutus voisi olla: pidetään kirjaa kutsupinosta ja koodin sisäkkäisistä rakenteista poikkeuksen heittäminen purkaa osan näistä (samaan tapaan kuin myöhemmin tehtäisiin, jos poikkeusta ei olisi tullut) ja asettaa ohjelman tilaan tiedon poikkeuksesta trycatch-rakenne tarkistaa koodinsa suorittamisen jälkeen, onko joku asettanut tiedon poikkeuksesta (jos ei, siirtyy eteenpäin catch-lohkojen yli)

36 Sisältö 1 Moniperintä ja rajapinnat 2 Poikkeukset 3 Kontinuaatioista

37 Mikä on kontinuaatio? kontinuaatio (continuation) eli jatko sisältää laskennan tilan, tarkemmin sanoen: kutsupinon ja ympäristön (muuttujien arvot) paikan koodissa eli lausekkeen, jota parhaillaan evaluoidaan myös esim. tiedon jo evaluoiduista alilausekkeista kontinuaatio kertoo, mitä tämän kohdan jälkeen tehdään esimerkki: eräs kontinuaatio Scheme-lausekkeesta (let ((a 1)) (- (+ a a) (* a 2))) on kohdassa, jossa alilausekkeet - ja (+ a a) on jo evaluoitu ja lauseketta (* a 2) ollaan juuri evaluoimassa kontinuaatiota voi ajatella poikkeusten yleistyksenä: heitetty poikkeus unohtaa throw-kohdan kontinuaation ja hyppää erääseen trycatch-lauseen kontinuaatioon (catchin alkuun) kontinuaatioilla voi hyppiä muullakin tavalla ja monta kertaa samaan kohtaan käsite on varsin monimutkainen, joten ei tarvitse huolestua, jos ei ymmärrä kaikkea...

38 Eksplisiittiset kontinuaatiot Schemessä Schemessä laskennan nykyisen kontinuaation voi ottaa ohjelmassa talteen ja siihen voi myöhemmin hypätä takaisin jopa useita kertoja (palataan joka kerta samaan kohtaan) sama lauseke voi siis palata monta kertaa esim. eri paluuarvoilla kontinuaation talletusmuoto on proseduuri, jota kutsumalla kontinuaatioon hypätään kontinuaation kutsuminen ei enää palaa sinne, mistä kutsu tehtiin (samoin kuin throw) kutsussa annetaan argumentti, josta tulee kontinuaation alun perin luoneen lausekkeen arvo (sitä oltiin evaluoimassa kun kontinuaatio luotiin) samanlainen ominaisuus löytyy muutamasta muustakin kielestä (mm. Ruby), mutta kovin yleinen se ei ole

39 Schemen call-with-current-continuation Scheme-primitiivi call-with-current-continuation (lyh. call/cc) kutsuu argumenttinaan saamaansa proseduuria antaen kontinuaation sille argumentiksi käyttö yleensä: (call/cc (lambda (k)...)) tämän call/cc-lausekkeen arvo on normaalisti...-lausekkeen arvo mutta jos k:ta kutsuu, koko call/cc-lausekkeen arvoksi tulee k:lle annettu argumentti, ja evaluointi etenee niin kuin call/cc-lauseke olisi juuri palannut k:ta voi kutsua joko lausekkeen sisältä (vrt. break tai poikkeukset) tai myöhemmin

40 Scheme-esimerkki Kontinuaatioesimerkki (define (copy-list-if-positive l) (call/cc (lambda (k) (define (loop l) (cond ((null? l) '()) ((<= (car l) 0) (k '())) (else (cons (car l) (loop (cdr l)))))) (loop l)))) (copy-list-if-positive '( )) ( ) (copy-list-if-positive '( )) ()

41 Mihin kontinuaatioita käytetään? eksplisiittisillä kontinuaatioilla voi (ainakin periaatteessa) toteuttaa monia kontrollirakenteita, esimerkiksi: poikkeukset sekä break silmukasta ja return funktiosta generaattorit ja epädeterministinen laskenta (useita vaihtoehtoisia paluuarvoja, joita kokeillaan yksi kerrallaan) voi tallettaa laskennan tilan ja jatkaa siitä myöhemmin tätä käytetään joissain WWW-sovelluskehyksissä kun sovellus jää odottamaan käyttäjältä vastausta esim. lomakkeeseen, sen tila talletetaan kontinuaatioon jos/kun vastaus tulee, kontinuaatiota kutsutaan käyttäjältä saadulla syötteellä sovelluksen ohjelmoijalle tämä näyttää tavalliselta odottavalta (blocking, synchronous) I/O:lta sovellus voi palata tilassaan taaksepäin (esim. selaimen Back-napin tukemiseksi) vanhan kontinuaation kutsulla

42 Continuation-passing style ohjelmointityyli, jolla kontinuaatiot saa käyttöön, vaikka ohjelmointikieli ei tukisi eksplisiittisiä kontinuaatioita tarvitsee kuitenkin ensimmäisen luokan funktiot (käytännössä myös häntärekursio-optimoinnin) myös käännöstekniikka: jotkut funktionaalisten kielten kääntäjät muuttavat koodin CPS-muotoon eräs tapa toteuttaa eksplisiittiset kontinuaatiot ja poikkeukset CPS:ssä kaikilla proseduureilla on ylimääräinen kontinuaatioargumentti (yleensä k) proseduurit palaavat aina kutsumalla k:ta paluuarvollaan (eivät siis koskaan palauta arvoa normaalisti) tämä kutsu on aina häntärekursiivinen k vastaa call/cc:n tuottamaa kontinuaatiota sovelluksesta riippuu, kuinka pitkälle CPS-muoto viedään SICP-kirjan luvun 4.3 tulkki on kirjoitettu (noin) CPS-tyyliin

43 CPS-esimerkki Tavallinen kertoma (define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) Eräs CPS-kertoma (define (=k a b k) (k (= a b))) (define (-k a b k) (k (- a b))) (define (*k a b k) (k (* a b))) ; ''primitiivi'', ei CPS-muodossa ; ''primitiivi'', ei CPS-muodossa ; ''primitiivi'', ei CPS-muodossa (define (fact n k) (=k n 0 (lambda (pred) (if pred (k 1) (-k n 1 (lambda (arg) (fact arg (lambda (res) (*k n res k))))))))) (fact 10 display) 10

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. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Scheme-kesäkurssi luento 3

Scheme-kesäkurssi luento 3 Scheme-kesäkurssi luento 3 Riku Saikkonen 6. 7. 2009 Sisältö 1 Nelilaskin 2 Muuttujat 3 Ympäristöt 4 Scheme-tulkki 5 Kontinuaatiot 6 CPS Miksi SICP-kirjassa on Scheme-tulkkeja? tulkin näkeminen auttaa

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

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

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

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: Poikkeukset, tiedostot ja tietovirrat Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 8. 2. 2012 Sisältö 1 Poikkeukset 2 Poikkeusten

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Tulkin muokkaaminen, sisäiset määrittelyt, makrot (mm. SICP 3.2.4, 4-4.1.6) Riku Saikkonen 29. 11. 2012 Sisältö 1 Kirjan tulkin muokkaaminen 2 Yksityiskohta:

Lisätiedot

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

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

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Olioiden toteuttaminen Riku Saikkonen 28. 11. 2011 Sisältö 1 Miten oliot ja metodikutsut toimivat? 2 Oliot Minkä luokan metodia kutsutaan? Python-esimerkki

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

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

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Tulkin muokkaus, makrot, ohjelmia muokkaavat ohjelmat (mm. SICP 3.2.4, 4-4.1.6) Riku Saikkonen 22. 11. 2011 Sisältö 1 Kirjan tulkin muokkaaminen 2

Lisätiedot

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

Luento 2. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä Luento 2 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 Abstrakti luokka Abstrakti

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: Poikkeukset, tiedostot ja tietovirrat Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 28. 1. 2013 Sisältö 1 Poikkeukset 2 Poikkeusten

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Pienen ohjelmointikielen tulkki (ohjelmoitava laskin) (mm. SICP 4-4.1.5 osin) Riku Saikkonen 15. 11. 2012 Sisältö 1 Nelilaskintulkki, globaalit muuttujat

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

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

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset 815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Olioiden toteuttaminen, abstraktit luokat yms. Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 27. 1. 2011 Sisältö 1 Kertausta Scheme-tulkista

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

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

Lisätiedot

Java-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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Paikalliset muuttujat, kirjan tulkki kokonaisuutena (mm. SICP 3.2, 4.1.24.1.6) Riku Saikkonen 22. 11. 2012 Sisältö 1 Ympäristöt: miten paikalliset

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

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

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

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

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

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

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: Symbolit, derivojaesimerkki, kierroksen 1 ratkaisut (mm. SICP 2.32.3.2) Riku Saikkonen 1. 11. 2011 Sisältö 1 Symbolit ja sulkulausekkeet 2 Lisää Schemestä:

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

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, todistamisesta (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 7. 11. 2011 Sisältö 1 Muuttujan arvon muuttaminen: set! 2 SICP-oliot

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

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

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

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

Groovy. Niko Jäntti Jesper Haapalinna Group 31

Groovy. Niko Jäntti Jesper Haapalinna Group 31 Groovy Niko Jäntti Jesper Haapalinna Group 31 Johdanto Groovy on Apachen kehittämä Javaan perustuva dynaaminen oliopohjainen ohjelmointikieli. Kielen kehitys alkoi vuonna 2003, versio 1.0 julkaistiin 2007

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 9: Makrot ja dynaaminen sidonta Riku Saikkonen 7. 12. 2010 Sisältö 1 Makrot 2 Pieni esimerkki abstraktion tekemisestä 3 Dynaaminen sidonta Mikä on makro?

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 Tietorakenteet ja algoritmit (syksy 2015) 58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen

Lisätiedot

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined Ohjelmointitekniikka Tyyppiturvallisuuden tavoittelua Javascriptissa muuttujat ovat tyypittömiä, mutta arvoilla on tyyppi. Muuttuja esitellään var -avainsanalla ja muuttujan tyypin arvoa ei erikseen määritellä.

Lisätiedot

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1 12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Myöhäinen ja aikainen sidonta. Parametrinvälitys

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

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

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

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

Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1 Oliot ja luokat Javaohjelmoinnissa Vesa Laakso 22.9.2012 Sisällysluettelo Sisällysluettelo... 1 Johdanto... 2 1. Luokka... 2 2. Olio... 2 3. Luokan

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät Ohjelmoinnin peruskurssien laaja oppimäärä, kevät Luento 2: Ohjelman suunnittelua, miten oliot toimivat Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 21. 1. 2013 Sisältö 1 Suunnittelua:

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 1: Rekursiivinen ajattelutapa, Scheme-kielen perusteita (mm. SICP 11.2.4) Riku Saikkonen 16. 10. 2012 Sisältö 1 Kurssijärjestelyitä 2 Perusteita Scheme-kielestä,

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

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

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 1: SICP luku 1 Riku Saikkonen 1. 11. 2010 Sisältö 1 Kurssijärjestelyitä 2 SICP-kirjasta 3 Häntärekursio 4 Rekursio 5 Funktiot argumentteina 6 Funktiot

Lisätiedot

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

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) 1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: Funktioiden käyttöä, lisää Schemestä (mm. SICP 1.31.3.4) Riku Saikkonen 17. 10. 2011 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot argumentteina

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

Tietorakenteet (syksy 2013)

Tietorakenteet (syksy 2013) Tietorakenteet (syksy 2013) Harjoitus 1 (6.9.2013) Huom. Sinun on osallistuttava perjantain laskuharjoitustilaisuuteen ja tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. Näiden laskuharjoitusten

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

Lisätiedot

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

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

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Tulkki: proseduurit, abstrakti syntaksi, quote ja cond (mm. SICP 44.1.5 osin) Riku Saikkonen 15. 11. 2011 Sisältö 1 Argumentittomat proseduurit ja käyttöliittymä

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 1: Rekursiivinen ajattelutapa, Scheme-kielen perusteita (mm. SICP 11.2.4) Riku Saikkonen 10. 10. 2011 Sisältö 1 Kurssijärjestelyitä 2 Perusteita Scheme-kielestä,

Lisätiedot

Jatkeet. TIES341 Funktio ohjelmointi 2 Kevät 2006

Jatkeet. TIES341 Funktio ohjelmointi 2 Kevät 2006 Jatkeet TIES341 Funktio ohjelmointi 2 Kevät 2006 Havainto: häntäkutsu (1) Funktiokutsun yleinen toimintaperiaate: (koskee vain täysiä kutsuja, ts. jotka eivät palauta funktiota) kutsuja kirjaa pinoon paluuosoitteen

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

Lisätiedot

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 27. lokakuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Kääntäjän rakenne

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

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

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

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

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

Apuja ohjelmointiin» Yleisiä virheitä

Apuja ohjelmointiin» Yleisiä virheitä Apuja ohjelmointiin» Yleisiä virheitä Ohjelmaa kirjoittaessasi saattaa Visual Studio ilmoittaa monenlaisista virheistä "punakynällä". Usein tämä johtuu vain siitä, että virheitä näytetään vaikket olisi

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

16. Javan omat luokat 16.1

16. Javan omat luokat 16.1 16. Javan omat luokat 16.1 Sisällys Johdanto. Object-luokka: tostring-, equals-, clone- ja getclass-metodit. Comparable-rajapinta: compareto-metodi. Vector- ja ArrayList-luokat. 16.2 Javan omat luokat

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet Pakkaukset ja määreet Toisiinsa liittyvät luokkatiedostot voidaan koota pakkauksiksi. Luo hierarkiaa ja järjestystä ohjelmistotuotteeseen.

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ällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. 15. Lohkot. Lohkot. Lohkot Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet

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

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

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: Perinnän käyttäminen Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 4. 2. 2012 Sisältö 1 Yksinkertainen esimerkki perinnästä

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

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

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

Lisätiedot

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

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