12/20: Bitit talteen

Samankaltaiset tiedostot
9/20: Puhu mun stdinille

5/20: Algoritmirakenteita III

19/20: Ikkuna olio-ohjelmoinnin maailmaan

4/20: Algoritmirakenteita II

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

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

3/20: Algoritmirakenteita I

13/20: Kierrätys kannattaa koodaamisessakin

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

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

11/20: Konepelti auki

Ohjelmointi 1 / syksy /20: IDE

815338A Ohjelmointikielten periaatteet

Poikkeustenkäsittely

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

14. Poikkeukset 14.1

7/20: Paketti kasassa ensimmäistä kertaa

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

4. Lausekielinen ohjelmointi 4.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

17/20: Keittokirja IV

Mitä poikkeuskäsittely tarkoittaa?

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

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

8/20: Luokat, oliot ja APIt

5. HelloWorld-ohjelma 5.1

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

Ohjelmoinnin perusteet Y Python

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

4. Lausekielinen ohjelmointi 4.1

14/20: Keittokirja I

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

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

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

Mieleni minun tekevi (tavoiteasettelua)

Olio-ohjelmointi Virhetilanteiden käsittely

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

6/20: Tietorakenteita

Harjoitus 5 (viikko 48)

Ohjelmoinnin perusteet Y Python

OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

2 Konekieli, aliohjelmat, keskeytykset

Ohjelmoinnin peruskurssien laaja oppimäärä

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin peruskurssi Y1

P e d a c o d e ohjelmointikoulutus verkossa

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

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Harjoitustyö: virtuaalikone

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

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

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

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

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

Java-kielen perusteita

Pakkauksen kokoaminen

Luokat ja oliot. Ville Sundberg

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

Harjoitus 3 (viikko 39)

Harjoitus 2 (viikko 45)

Ohjelmoinnin perusteet, syksy 2006

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

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

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

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

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

Harjoitus 5 (viikko 41)

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

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

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

Pakkauksen kokoaminen

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

ATK tähtitieteessä. Osa 4 - IDL input/output. 19. syyskuuta 2014

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin peruskurssi Y1

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

ITKP102 Ohjelmointi 1, syksy 2007

Ohjelmointi 2 / 2010 Välikoe / 26.3

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

ITKP102 Ohjelmointi 1 (6 op)

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Hakemistojen sisällöt säilötään linkitetyille listalle.

Ohjelmoinnin peruskurssien laaja oppimäärä

ITKP102 Ohjelmointi 1 (6 op)

Listarakenne (ArrayList-luokka)

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

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

Binäärioperaatiot Tiedostot ja I/O

Transkriptio:

Ohjelmointi 1 / syksy 2007 12/20: Bitit talteen Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/15

Tämän luennon rakenne Tiedosto, mikä se on Tietovirrat, mitä ne olivatkaan, ja miten niitä voi olla ohjelman ja tiedostojärjestelmän välillä. Tiedoston lukeminen Poikkeukset ja niiden käsittely try-catch-finally -rakenne. RunTimeException vs. Exception throws Jotakin API-dokumentaatiossa Poikkeuskäsittelyn suoritus: hyppy kutsupinossa alaspäin. Näkyy hyvin debuggerissa. Tiedoston tallentaminen (jos jää aikaa) Ohjelmointi 1 / syksy 2007 p.2/15

Tiedostot 1/3: Miksi ja missä tiedostoja Kone suorittaa tietokoneohjelman määräämää laskentaa keskusmuistissaan Tulokset eivät säily ohjelman suorituksen jälkeen Tietojen uudelleenkäyttö edellyttää pitkäaikaista tallennusta johonkin... Tietoja pitää voida lukea ja tallentaa. Tiedostojärjestelmä on tätä varten. Mm. kaikki dokumentit, videot, kuvat, esitysgrafiikat ja muut ovat tiedostoja. Työpöydän oikotiekuvakkeet ovat pieniä kuvaustiedostoja, WWW-sivut ovat tiedostoja,... Melkein kaikki monipuoliset sovellukset lukevat ja tallentavat tiedostoja. Ohjelmointi 1 / syksy 2007 p.3/15

Tiedostot 2/3: Tiedosto ja tiedostojärjestelmä Tiedosto on sarja tavuja. Se voi sijaita esim. kovalevyllä, USB-tikulla, DVD:llä... Hierarkkisesti jäsentyvä hakemistorakenne auttaa järjestelemään tiedostoja niiden merkityksen mukaan. Tavujen merkitys riippuu tiedostomuodosta; esim. tekstitiedostossa on vain jonkun koodauksen mukaisia tekstimerkkejä (+ rivinvaihtoja, tabulaattoreita ym. ohjausmerkkejä); kuvatiedostoon on jollain tavoin koodattu värejä ja muotoja; tekstidokumentissa on tietoja mm. fonteista ja dokumentin rakenteesta. Ohjelman lähdekoodi on tekstitiedosto. Suoritettava ohjelma on Javan tapauksessa ns. tavukooditiedosto; se sisältää virtuaalikoneen suoritettavissa olevia käskyjä biteiksi koodattuna Java-virtuaalikonekin (eli JVM) on suoritettava ohjelma; se on tiedosto, joka sisältää tietyllä tietokonelaitteistolla suoritettavia käskyjä biteiksi koodattuna Käyttöjärjestelmä (esim. Windows, Linux, Mac OS-X) hoitaa tiedostojen tallentamisen; se tarjoaa rajapinnan ohjelmien, mm. JVM:n käyttöön. Java-ohjelmasta tiedostoja käytetään olioiden avulla. Ohjelmointi 1 / syksy 2007 p.4/15

Tiedostot 3/3: Mahdolliset ongelmatilanteet I/O:ssa Tiedoston lukeminen (input) tai kirjoittaminen (output) ei välttämättä onnistu; syitä voi olla monia, esimerkiksi: Kovalevy tai muu tallennuslaite on viallinen Tallennuslaite on täynnä Luku-/kirjoitusoikeutta ei ole Joku muu ohjelma on varannut tiedoston (se on lukittu) Tiedosto ei ole sitä, mitä oletetaan; käyttäjä on muuttanut sitä vahingossa tai tahallaan Tiedosto tai hakemisto ei sijaitse oletetussa paikassa Mikä tahansa ilmiö voi tapahtua milloin vain, ja näihin poikkeuksiin on varauduttava! Ohjelmointi 1 / syksy 2007 p.5/15

Tietovirrat jälleen kerran Aiemmin nähtyjä System.in (syöttövirta / InputStream) ja System.out (tulostusvirta / PrintStream, yleisemmin OutputStream) Ne ovat virtoja, putken päitä, joista luetaan tai joihin kirjoitetaan dataa. Virrat ovat olioita. Niitä voi olla helpompi käyttää monipuolisemman olion avulla; esim. on nähty standardisyötteen (InputStream-luokan olio) lukeminen Scanner-luokan olion avulla. Virta voi yhdistyä muuallekin kuin konsoliin esimerkiksi tiedostojärjestelmässä olevaan tiedostoon. Ohjelmointi 1 / syksy 2007 p.6/15

Nyt on keinot perusohjelmointiin Standardisyöte on bittivirta, jonka sisältöä tai saapumisnopeutta ohjelma ei tiedä ennen suoritusta. Standardiulostulon ja -virheet ohjelma tulostaa itse. Tiedostot ovat määrämittaisia datan tallennuspaikkoja, joiden sisältö on tavoitettavissa tietovirtojen avulla Lisäksi tiedostoja voi hallita (poistaa, kopioida, nimetä, siirrellä) käyttöjärjestelmää komentamalla (Javassa java.io.file -luokan kautta). Ohjelmointi 1:stä rajataan pois muut kommunikointitavat kuin konsoli ja tiedostot. Ohjelmointi 1 / syksy 2007 p.7/15

Viimeinen puuttuva pala: poikkeukset Poikkeusten käsittelystä on luontevaa puhua tiedostojen yhteydessä, koska niissä mahdollisten poikkeusten todennäköisyys on suuri. Mikä siis on poikkeus? Ohjelman suorituksella on jokin odotettu lopputulema; siis oletetaan, että ohjelma toimii tietyllä tavalla. Lähtökohtaisesti havaitaan, ettei reaalimaailmassa tämä ole aina mahdollista Varaudutaan siis jo ohjelmointivaiheessa poikkeus- ja virhetilanteisiin! Ohjelmointi 1 / syksy 2007 p.8/15

Poikkeukset: Perusidea Poikkeusten perusidea: Yritetään (try) tehdä operaatio jos joku osaoperaatio kohtaa poikkeustilanteen, se heittää (throw) siitä tiedon, joka voidaan napata (catch) ja käsitellä tarvittavin tavoin. Joka tapauksessa saatetaan haluta aina lopulta (finally) tehdä jotakin lopputoimia, riippumatta aiempien toimenpiteiden onnistumisesta. Javassa poikkeukseen varaudutaan siihen tarkoitukseen syntaksista löytyvällä lauseella. Itse poikkeukset on mallinnettu olioluokkina. Ohjelmointi 1 / syksy 2007 p.9/15

Poikkeukset Javassa: try-catch-finally -rakenne Statement Block Suoritus: Aliohjelmat voivat ns. heittää poikkeuksen, mikäli tulee joku ns. poikkeava tilanne. Poikkeus on olio. throw -lauseen suorituksessa kontrolli hyppää aliohjelmien kutsupinossa taaksepäin niin kauas kunnes joku kutsuja on varautunut koppaamaan heitetynlaisia poikkeuksia. Varautuminen tapahtuu try-catch-finally -rakenteella. : Expression assert Expression ; else Statement if ParExpression Statement for ( ForControl ) Statement while ParExpression Statement do Statement while ParExpression ; Catches try Block Catches finally Block switch ParExpression { SwitchBlockStatementGroups } synchronized ParExpression Block Expression return ; throw Expression ; Identifier break Identifier continue ; StatementExpression ; Identifier : Statement Ohjelmointi 1 / syksy 2007 p.10/15

Tiedoston avaaminen ja lukeminen Katsotaan ohjelmaa, joka lisää syötetiedostoon rivinumerot ja tulostaa numeroidut rivit standardiulostuloon. Siitä löytyy tiedostonkäsittelyssä käytettäviä luokkia sekä try-catch-finally -rakenne. Samalla voisi raapustella kuvia olioilmentymistä. Käytetään notaationa taas jonkinlaista pseudo-uml:ää. Kokeillaan saada aikaan poikkeus tiedoston lukemisessa, ja katsotaan suoritusjärjestystä debuggerissa. Ohjelmointi 1 / syksy 2007 p.11/15

Poikkeusluokat Javassa Katsotaan taas Java-alustan APIa ja todetaan sieltä poikkeusolioiden luokkia sekä se, miten joissakin metodimäärittelyissä on kirjoitettu throws Poikkeus. Poikkeukset jakautuvat muutamaan pääkategoriaan: RunTimeException eli ajonaikainen poikkeus näiden tuloa ei välttämättä vaadita ennakoimaan joka tilanteessa, jossa ne ovat mahdollisia. Muut Exception -luokat nämä on pakko varautua poimimaan, jotta ohjelma menee kääntäjästä läpi. Error -luokat nämä tulkitaan kuolettaviksi virhetilanteiksi (esim. virtuaalikoneen toimintahäiriö), joita ei edes pidä yrittää poimia sovelluksista, vaan ohjelman on syytä kaatua näihin. Ohjelmointi 1 / syksy 2007 p.12/15

Tiedoston avaaminen ja tallennus. Lisätään rivinumero-ohjelmaan mahdollisuus tallentaa numeroidut rivit toiseen tiedostoon sen sijaan että standardiulostuloon. HUOM: Tiedostojen yhteydessä käyttäjä on helposti vaaraksi itselleen, ellei ohjelma tarkista hänen puolestaan esim. että onko tulostettava tiedosto jo olemassa. Aiempi sisältö tuhoutuu! Hyvin käyttäytyvä ohjelma kysyy käyttäjältä varmistuksen kaikkeen tällaiseen! Ohjelmointi 1 / syksy 2007 p.13/15

Oppikirjaviitteitä / tämä luento Mistä kohtaa oppikirjaa (Mika Vesterholm ja Jorma Kyppö: Java-ohjelmointi, 6., uudistettu painos) löytyy näitä samoja asioita: luku 11 Kun jokin menee kuitenkin pieleen poikkeukset, kokonaisuudessaan luku 20 Tiedostot ja tietovirrat, alkupuoli, sivut 461-466. Muuta ei tällä kurssilla vielä käsitellä tiedostoista. Ohjelmointi 1 / syksy 2007 p.14/15

Oppikirjaviitteet / koko kurssi Oppikirjasta (Vesterholm & Kyppö: Java-ohjelmointi, 6., uudistettu p.) muodostunee tätä kurssikertaa tukevaksi sisällöksi: luku 5 Luokat ja oliot, kaikki paitsi 5.7 Luokkakaavion luokan toteuttaminen (vielä ei itse tehdä instantoitavia luokkia eli mitään ei-staattista). luku 6 Kontrollirakenteet, kokonaisuudessaan. luku 7 Merkit ja merkkijonot, kokonaisuudessaan. luku 8 Taulukot, kokonaisuudessaan. luku 11 Kun jokin menee kuitenkin pieleen poikkeukset, kokonaisuudessaan luku 13 Mistä apua?, kokonaisuudessaan luku 20 Tiedostot ja tietovirrat, alkupuoli, sivut 461-466. Muuta ei tällä kurssilla vielä käsitellä tiedostoista. Seuraavista on rajattava sivunumeroita tarkemmin. Suunnitelma: luku 9 Javan perusteet, pistemäisesti; ei vielä olio-ohjelmoinnin syvällisyyksiä kuten periytymistä ym. luku 10 Kokoelmat olioiden säilyttäjät, köykäisesti, jos vielä lainkaan. luku 12 Testaus ja virheiden etsintä, johdantoluku, tuskin muuta Ȯhjelmointi 1 / syksy 2007 p.15/15