1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT MATERIAALIT JA OHJELMISTOT... 5

Koko: px
Aloita esitys sivulta:

Download "1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT... 4 2. MATERIAALIT JA OHJELMISTOT... 5"

Transkriptio

1 1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT MATERIAALIT JA OHJELMISTOT SUORITUSTAVAT Tentistä Tietokonetyöstä OPISKELUN ETENEMINEN... 6 VIIKKO Luokka Object. Kirjastoluokkia osa I: String, StringBuffer, StringBuilder, StringTokenizer, DecimalFormat, Math ja Random. Pakkaukset ja import-lause Alustus 8 equals-metodi olioiden yhteydessä 14 Luokat StringBuffer ja StringBuilder 15 Luokka StringTokenizer ja luokan String metodi split 18 Tulostuksen muotoilu ja DecimalFormat 20 Merkkijonon ja tekstitiedoston läpikäynti käyttäen luokkaa Scanner 20 Random 22 Luokakirjastojen toteutukset 23 Harjoitustehtävät VIIKKO Kirjastoluokkia osa II: Integer (ja muut kuori- eli kääreluokat). Dynaamiset geneeriset listat: luokat Vector, ArrayList ja LinkedList. Automaattiset tyypinmuunnokset kuoriluokkien ja vastaavien perustyyppien välillä. for-each rakenne ja iteraattorit. Luokat Arrays ja Collections Integer 25 Tyypinmuunnokset sekä autoboxing ja unboxing 27 Johdanto dynaamisiin listoihin (oliokokoelmat) ja geneerisyyteen 29 Java 5.0:sta lähtien: Geneeriset luokat Vector <E>, ArrayList<E> ja LinkedList<E> 31 Esimerkki: Lisäyslajittelu 37 Taulukoiden ja listojen läpikäynti käyttäen ns. for-each lausetta (Java 5.0:sta lähtien) ja iteraattoria 39 Luokat Arrays ja Collections staattisten ja dynaamisten listojen käsittelyyn (mm. lajittelu käyttäen kirjastometodia sort) 41 Harjoitustehtävät VIIKKO Olio-ohjelmoinnin peruskäsitteet: oliot ja luokat, olioiden tietosisältö ja käyttäytyminen, luokan määrittely, olioiden luonti ja käsittely Alustus 43 Johdatus: tietueen käsitteestä luokan käsitteeseen käyttäen esimerkkinä henkilötietoja 44 Luokan Henkilo oikeaoppinen määrittely sekä this ja tostring 50 Harjoitustehtävät

2 VIIKKO Oman tietotyypin määrittely luokan avulla: Olio-ohjelmointiin liittyvät käsitteet ja niiden ilmaiseminen Javassa Alustus 55 Tietotyypin määrittely 56 Luokan tietokentät: esiintymämuuttuja / luokkamuuttuja tai -vakio 57 Luokassa määritellyt metodit: esiintymämetodi / luokkametodi 57 Näkyvyys 58 Kuinka luokan tietokenttiin ja metodeihin voidaan viitata 58 Käytännön ohjeita: main-metodin sisältävä luokka vs. muut luokat 60 Yhteenveto sopivista tietotyypin tietokenttien ja metodien määreistä, kun noudatamme kapselointiperiaatetta 60 Harjoitustehtävät VIIKKO Olio-ohjelmien suunnittelu, oliot koostuvat olioista, sisäluokka Olio-ohjelmoinnin idea lyhyesti 63 Tunnuksien nimeämiskäytäntö 63 Miksi tietosisältö pitäisi kätkeä? 64 Olioiden koostuminen olioista 64 Sisäluokka 65 Harjoitustehtävät LUENTOPÄIVÄ Joitakin Javan valmiita luokkia Olio-ohjelmoinnin periaatteita Kokoava esimerkki Luokka Tili 72 Luokka Pankki ja sen testaus 75 Perintä: Luokan Tili aliluokka ShekkiTili, staattinen ja dynaaminen tyyppi 82 Tehtäviä VIIKKO Periytyminen ja luokkahierarkia, abstrakti metodi ja luokka, rajapintaluokka ja Comparable<T>. Tietokonetyön valinta Alustus periytymisestä ja luokkahierarkiasta 90 Luokat Employee ja Boss 91 Polymorfismi ja dynaaminen sidonta 93 Abstrakti luokka ja metodi (abstract class and method) 94 Rajapintaluokka (Interface class) 97 Rajapintaluokka Comparable<T> 99 Harjoitustehtävät Tietokonetyön valinta

3 VIIKKO Poikkeukset. Määre final. Graafiset käyttöliittymät (GUI). Tietokonetyö Alustus 104 Poikkeukset Javassa 105 Javan poikkeusluokat 106 try catch lause 107 Esimerkki poikkeusten käsittelystä: metodi lueint luokkaa Scanner käyttäen 108 Määre final: sen merkitys eri tilanteissa 109 Harjoitustehtävät VIIKKO Tietokonetyö, hajautustaulu: luokka HashMap<K,V> Tietokonetyö 111 Luokka HashMap 111 Harjoitustehtävät Liite 1 ja 2. Kurssisivuilla. 3

4 1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT Opintojaksolla laajennetaan opintojaksolla Algoritmien ja ohjelmoinnin peruskurssi (AOP) annettua kuvaa ohjelmoinnista tutustumalla olio-ohjelmointiin. Kurssin jälkeen opiskelija tuntee olio-ohjelmointikielten käsitteet ja osaa käyttää Javan luokkakirjastoa (esim. merkkijonojen käsittelyyn ja dynaamisten listojen suunnitellut luokat). Opiskelija osaa tehdä olio-ohjelmia, määritellä luokkien avulla omia tietotyyppejä sekä hyödyntää myös perintää ja tuntee poikkeusten käsittelyn perusteet. Keskeisin sisältö on kuitenkin omien tietotyyppien määrittelemisessä. Kurssilla opetetaan myös perintä ja siihen liittyvät käsitteet sekä johdannonomaisesti poikkeukset. Tavoitteena on antaa olio-ohjelmoinnista sellainen kuva, jonka perusteella muiden (olio-)ohjelmointikielten opiskelu sujuu muitta mutkitta. Olio-ohjelmoinnin opiskelussa voidaan edetä joko menemällä heti luokkien ja olioiden maailmaan tai unohtamalla aluksi oliot tarkastelemalla ensin ns. perinteellistä ohjelmointia, jossa käsitellään vain primitiivistä tietoa (ns. perustyypit, esim. luvut). Tällä opintokokonaisuudella noudatetaan jälkimmäistä lähestymistapaa, koska tällöin ei tarvitse haukata koko kakkua yhdellä kertaa. Nimittäin olio-ohjelmoinnissa tarvitaan myös kaikki perinteellisen ohjelmoinnin välineet: algoritmeja ohjataan peräkkäis-, valinta- ja toistorakenteilla tallettamalla arvoja muistipaikkoihin, joita käsiteltiin jaksolla AOP. Esimerkiksi tehtävissä laske syötettyjen lukujen keskiarvo ja tutki onko annettu luku alkuluku ei ole juurikaan sijaa olioille. Tämän jälkeen huomaamme, että maailma ei koostu pelkästään luvuista ja merkeistä, vaan että asioiden mallinnus tapahtuu paljon korkeammalla tasolla. Tarvitsemme siis keinon, millä voimme esittää, mallintaa (abstrahointi) ja käsitellä suurempia tietoja yhtenä kokonaisuutena. Tähän tarpeeseen vastaa abstraktin tietotyypin (ADT) käsite, joka olio-ohjelmoinnissa toteutetaan luokkana. Näin ollen tällä opintojaksolla Olioohjelmoinnin perusteet (OOP) siirrymme motivoidusti olio-ohjelmoinnin peruskäsitteisiin: luokka ja olio. Esitiedot: Tämän opintojakson esitietoina vaaditaan opintojakson Algoritmien ja ohjelmoinnin peruskurssi (AOP) tiedot. Jakso OOP jatkaa siitä, mihin jaksolla AOP jäätiin. Tällä jaksolla oletetaan, että Javan peruskontrollirakenteet, perustyypit, oliotyypit, taulukot, luokan String ja Random käsittely hallitaan, joskin tällä jaksolla syvennetään luokkien String ja Random ominaisuuksia. 4

5 2. MATERIAALIT JA OHJELMISTOT Opintojaksolla ei ole käytössä opintomonistetta, vaan päämateriaali on tämä opiskeluopas ja sen lisäksi harjoitustehtävät ja niiden malliratkaisut, jotka ovat usein laajoja. jakson Algoritmien ja ohjelmoinnin peruskurssin opintomonisteen tiettyjä osia käsitellään tällä kurssilla uudestaan perusteellisemmin. Liite 1, joka on kurssisivuilla (se on ote Ville Leppäsen opintomonisteesta Ohjelmointi I). Liite 1 sisältää viittauksia kohtiin, joita liitteessä ei ole, mutta nämä eivät ole oleellisia tämän kurssin kannalta. Liite 2, joka on kurssisivuilla (se on ote kirjasta Simo Silander, Vesa Ollikainen, Juha Peltomäki: Java, ISBN: Julkaistu: 03/2010, Sivuja: 498 (ks. kurssisivut). Kurssisivuille tulee kurssin edetessä lisämateriaalia, joista osa vaaditaan myös tentissä. Vaadittavat osat on merkitty selvästi kurssisivuilla. Kurssisivuilla on useita linkkejä, joita voi käyttää opiskelun apuna. Java-ohjelmointiympäristönä olisi hyvä käyttää JCreatoria tai jotain muuta kehittyneempää ympäristöä, esim. NetBeans. Esim. JCreatorin avulla voidaan havainnollistaa luokan rakennetta käyttäen Class View näkymää: tietokentät ja metodit näkyvät omassa ikkunassaan eri värisinä. Myös NetBeans (Members view) ja Eclipse näyttävät nämä ja vieläpä tarkemmin. Myös DrJavaa voi käyttää, joskin siinä ei ole edellä mainittuja ominaisuuksia. 3. SUORITUSTAVAT Opintojaksoon kuuluu tentti ja yksi tietokoneella tehtävä tietokonetyö. 3.1 Tentistä Tenttioikeuden saa jos on tehnyt hyväksytysti vähintään 30% tehtävistä. Tentin läpäisemiseen vaaditaan n. 50 % maksimipistemäärästä. Tentissä on myös ns. essee-kysymyksiä, jossa ei ole tärkeintä pelkästään muistaa kaikki aiheeseen liittyvät asiat, vaan ymmärtää ne, ja esittää ne jäsentyneesti. Essee-kysymyksessä pyydetään pääasiassa selittämään tiettyjä käsitteitä/asioita tai Javan tiettyjen tärkeiden avainsanojen merkitys. Kysytyt ohjelmointitehtävät ovat hyvin 5

6 paljon tässä opiskeluoppaassa esitettyjen esimerkkien ja tehtävien kaltaisia. Tenttiin kannattaa valmistautua lukemalla erityisesti oppimateriaalin esimerkit ja harjoitustehtävät. Huomaa, että ohjelmien teko tentissä melko lyhyessä ajassa ei kerta kaikkiaan onnistu, ellei omaa minkäänlaista ohjelmointirutiinia. Sen vuoksi tenttiin valmistautuessa kannattaa yrittää ratkaista harjoitustehtäviä uudestaan katsomatta valmista ratkaisua, testata niitä koneella ja tutkia tarkasti niiden toimintaa eikä pelkästään lukea valmiita ohjelmia. Valmiin ohjelman ymmärtäminen ei vielä takaa sitä, että pystyisi itse tuottamaan vastaavan toimivan ohjelman; ei, kaukana siitä. Ohjelmien toiminnassa ei ole mitään selittämätöntä, vaan jokaisen lauseen suoritus muuttaa ohjelman tilaa (eli ohjelmien muuttujien arvoja) lauseen toiminnan määräämällä tavalla edeten ohjelman ensimmäisestä lauseesta aina viimeiseen lauseeseen saakka. Yritä aina ymmärtää jokaisen lauseen suorituksen aiheuttama muutos ohjelman tilaan (eli muuttujien arvoihin). Tentissä annetaan lainaksi joitakin Javan kirjastoluokkien kuvauksia. Ne ovat myös kurssisivuilla, joten tutustu niihin etukäteen. Tenttipäivät: Ensimmäinen on maanantaina Muut ilmoitetaan kurssisivuillamme. Huom. Jakso AOP tulee olla suoritettu kokonaisuudessaan ennen kun voi tenttiä OOPin. Jakson OOP tietokonetyön suunnitelma tulee palauttaa sähköpostitse ennen tenttiä ja olisi hyvä jos koodikin olisi lähes valmis. Katso kurssisivuilla esitetyt vaatimukset tenttien suhteen. 3.2 Tietokonetyöstä Tehtävän määrittelyt ja viimeinen palautuspäivämäärä kerrotaan kurssisivuilla linkin Tiekonetyö takana. Huomaa, että voitte itse valita työn yksin tai pareittain. Työstä tehdään ensin suunnitelma, jonka muoto kerrotaan kurssisivuilla ja esimerkki suunnitelmasta on s. 66 Murtoluku-tehtävässä. Töitä ohjataan kuten kurssisivuilla kerrotaan. Saat palautteen työstäsi sähköpostitse. Huomaa, että luentopäivällä käsiteltävä pankkisovellus on hyvä lähtökohta tietokonetyölle. Työn nopeata tekemistä kannustetaan antamalla myös ylimääräisiä bonuksia (katso kahden viimeisen viikon Harjoitustehtävät). 4. OPISKELUN ETENEMINEN Opintoryhmäkokoontumisten lisäksi järjestetään yksi lähiopetustilaisuus, jolloin yliopiston opettaja kertaa siihen mennessä käsitellyistä asioista tärkeimmät. Lisäksi tällöin opiskelijoilla on mahdollisuus kysyä opintojakson epäselviksi jääneistä kohdista. Opiskelu perustuu itseopiskeluun opiskeluoppaan avustamana, viikoittaisten harjoitustehtävien itsenäiseen laatimiseen ja niistä annettavaan palautteeseen. Lisäksi Moodlessa annetaan vinkkejä tehtävien tekemiseen ja siellä voi myös keskustella tehtävistä. 6

7 Harjoitustehtävät on jaettu aiheen perusteella kullekin viikolle niin, että ne kattavat viikon asiat. Harjoitustehtävien huolellinen läpikäynti on opiskelun keskeisin osa. Koska opintoryhmäkokoontumisten sisältö on aina hyvin samantapainen, ei niiden sisältöä ole aina esitetty ohjelman yhteydessä. Opintoryhmäkokoontumisen yhteydessä käsitellään viikolle tarkoitetut harjoitustehtävät joiden yhteydessä varmistetaan, että viikon asiat ja tässä oppaassa esitetyt esimerkit on ymmärretty. Tällöin opiskelijan tulee olla itse aktiivinen ja kysyä viikon epäselvistä asioista ja esimerkeistä. Ryhmäkokoontumisissa tuutori jakaa vastuuopettajan laatimat harjoitustehtävien mallivastaukset ja ne tulevat myös Moodleen takautuvasti. Mikäli opintoryhmäkokoontumisiin on suunniteltu jotakin muuta edellisen lisäksi, on siitä maininta viikoittaisen ohjelman kuvauksen yhteydessä. Ohjelmoinnin oppimisessa ei voi liikaa korostaa itsenäisen opiskelun osuutta. Viikolle merkittyjen harjoitustehtävien miettiminen, tekeminen ja koneella suorittaminen on todella tärkeätä. Laskemalla suoraan opintojakson laajuus opintopisteinä ja sen kesto, niin voimme arvioida, että opiskelijan tulisi käyttää tämän opintojakson opiskeluun keskimäärin n. 14 tuntia viikossa (ryhmäkokoontuminen mukaan lukien) ja kokemuksieni mukaan tämä on aika oikeaan osuva arvio. Tämä arvio edellyttää sen, että jakson AOP asiat ovat hallinnassa. On tietenkin selvää, että arvioitu tuntimäärä vaihtelee hyvinkin paljon riippuen opiskelijasta. Huomaa taas, että käsitteet ovat hyvin tärkeitä. Ne tarkoittavat tarkasti määriteltyä asiaa tai ominaisuutta. AOP:ssa meillä oli jo mm. seuraavia käsitteitä: muuttuja, tyyppi, perus- eli primitiivityyppi, olio- eli viittaus- eli viitetyyppi), lause, lauseke, lausekelause, toistolause, valintalause, metodi, muodollinen parametri, todellinen parametri, esiintymämetodi, luokkametodi (eli staattinen metodi). Tällä kurssilla oletetaan että yo. käsitteet hallitaan. Sinun kannattaa tehdä itsellesi käsiteluettelo, johon kirjaat aina vastaantulevat uudet käsitteet. Ohjelmointia opeteltaessa on erittäin tärkeätä testata ohjelmia koneella. Pelkällä ohjelmien lukemisella ei opi ohjelmoimaan. Sen vuoksi sinun kannattaakin kirjoittaa ohjelmia koneella, muuttaa niitä usealla eri tavalla ja katsoa mitä muutoksesi saa aikaan. Tällöin on kuitenkin erityisen tärkeätä se, että ymmärrät miten ohjelma toimii. Huom. Viikolla 8 ei ole ohjelmaa lainkaan. 7

8 VIIKKO 4 Luokka Object. Kirjastoluokkia osa I: String, StringBuffer, StringBuilder, StringTokenizer, DecimalFormat, Math ja Random. Pakkaukset ja import-lause. Alustus Jaksolla AOP luokat sisälsivät vain metodeja ja luokissa oli aina main-metodi. Tällöin luokilla ei mallinnettu tietotyyppejä eli tarkastelimme tällöin 'perinteellisiä' ohjelmia. Tämän ja seuraavan viikon tärkeä tavoite on valaista ja tutustuttaa valmiiden luokkien Javan luokkakirjaston käyttöön. Kuten muistanette, luokkakirjaston (API eli Application Programming Interface) käyttö on keskeinen osa olio-ohjelmointia. Seuraavassa sanomme kaikkien valmiina olevien luokkien (joita voimme siis käyttää suoraan omissa ohjelmissamme) joukkoa siis luokkakirjastoksi ja sen yksittäistä luokkaa (esim. String) kirjastoluokaksi. Viikkoina 4 ja 5 käsittelemme luokkia, joissa on main-metodi ja luokat eivät vielä määrittele omia tietotyyppejä. Sen sijaan viikkojen 4 ja 5 jälkeen käsitellään olio-ohjelmoinnin peruskäsitteet (näitä asioita ja käsitteitä tulee tietenkin esille jo viikoilla 4 ja 5) ja määrittelemme itse luokkia, jotka mallintavat tiettyjä asioita ja määrittelevät tietotyypin (eivätkä sisällä main-metodia). Tämän viikon materiaali on suoraa jatkoa jakson AOPin viimeiselle viikolle ja tässä esitetään kertauksena useita jakson AOP asioita. Kertaa siis aluksi jakson AOP viimeisen viikon sisältö. Perus- ja oliotyyppisen muuttujan ero ja asetuslauseen toiminta tulee myös kerrata lukemalla AOP-opintomonisteen luku Edellisellä kurssilla meillä oli käytössä luokan String lyhennetty kuvaus. Niin nytkin, mutta tällä kurssilla keskeisenä kuvauksien lähteinä ovat java-kansioissa (hakemistoissa) olevat englanninkieliset kuvaukset, joiden tiivistelmä on käytössä myös tentissä. Jaksolla AOP kerrottiin, että Javassa muuttujat ovat joko perustyyppisiä (esim. int) tai viittauseli oliotyyppisiä (esim. taulukot, String ja itse tehtyjen luokkien mukaiset oliot). On hyvä huomata, että vaikka taulukot ovat oliotyyppisiä, niin niiden käsittely ei ole samanlaista kuin muiden olioiden käsittely. Nimittäin taulukko-olioiden sisällön tarkastelemiseksi tai muuttamiseksi ei tarvitse käyttää mitään tiettyä metodia, vaan taulukon komponentteihin viitataan Javassa (perinteellisesti) hakasuljenotaatiolla; esim. vek[2]. Näin ollen taulukoiden 8

9 käsittely ei näytä siltä, että ne olisivat olioita, joskin new:n käyttö taulukkoa luotaessa paljastaa, että kyseessä on olio. Myös luokan String-olioille voidaan suorittaa operaatioita, jotka eivät noudata yleisiä olion käsittelyperiaatteita: oliota voidaan käsitellä vain ko. luokan metodien avulla. Esimerkiksi vakiomerkkijono voidaan luoda ilman new:tä ja luokan konstruktoria; esim. String st= java ; Lisäksi String-tyyppisiä merkkijonoja voidaan liittää peräkkäin eli katenoida käyttäen + operaattoria. Lisäksi voimme muodostaa lausekkeita, joissa on sekaisin lukutyyppisiä ja Stringtyyppisiä arvoja, jolloin tuloksena on String-tyyppinen olio. Näin olemme jo tehneet tulostuslauseissa, mutta niin voidaan menetellä muuallakin: voimme esim. kirjoittaa 1 : String st = y ; jossa yhdistetään kolme erityyppistä (double, String, char) arvoa. Tuloksena on String-olio y. Yhdistyksen tyypinmuunnoksien ehtona on se, että lausekkeessa tulee olla mukana vähintään yksi String-tyyppinen lauseke ja tämähän saadaan helposti aikaan liittämällä lausekkeeseen tarvittaessa tyhjä merkkijono (kaksi lainausmerkkiä peräkkäin). Kaikki nämä temput ovat kiellettyjä muiden oliotyyppien (esim. StringBuffer) yhteydessä. Taulukoiden ja osin myös merkkijonojen käsittely ovat kielikohtaisia eivätkä tue aina yleisiä olio-ohjelmoinnin periaatteita. Sen sijaan kaikkia muita oliotyyppisiä muuttujia käsitellään aina luokan metodien avulla ja metodin kutsu kohdistetaan ko. luokan mukaiseen olioon käyttäen ns. pistenotaatiota: esim. st.charat(2), missä st on String-tyyppinen muuttuja (olio) ja charat on kirjastoluokan String metodi. Kyseinen lauseke palauttaa merkkijonon st kohdassa 2 olevan merkin. Ensiksi olio täytyy kuitenkin luoda 1) käyttäen new-lauseketta tai 2) luokan Stringoliota luotaessa suoraan asetuslauseella käyttämättä new-lauseketta. Javaan kuuluu lukuisa määrä valmiita kirjastoluokkia, jotka ovat ohjelmoijan käytettävissä. Jaksolla AOP käsiteltiin jo luokkia String, Random ja Math (kertaa nämä asiat jakson AOP opintomonisteesta ja opiskeluoppaasta) ja tällä viikolla keskitytään näiden lisäksi kirjastoluokkiin StringBuffer, StringBuilder ja StringTokenizer, joiden avulla voidaan käsitellä merkkijonoja (tekstiä). On tärkeätä ymmärtää, että jokainen kirjastoluokka (poislukien metodikirjastot, esim. Math) määrittelee tietotyypin. Kyseessä on jonkin abstraktin tietotyypin valmis implementointi Javan luokan avulla. Esimerkiksi merkkijonojen käsittelyyn on useita erilaisia tietotyyppejä, jotka tarjoavat erilaisia ja eri tavalla implementoituja työkaluja (metodeja) merkkijonojen käsittelyyn. Kaikkien luokkien yliluokka on Object. Se sisältää useita metodeja, jotka kuitenkin ovat usein uudelleenmääriteltyjä sen aliluokissa (esim. luokassa String), koska luokan Object metodit ovat usein liian yleisiä ja eivät sovellu suoraan aliluokkaan sellaisenaan. Jokainen Javan luokka (siis myös meidän itse määrittelemät tietotyypit) perii 2 automaattisesti luokan Object kaikki metodit. Perintä tarkoittaa sitä, että aliluokka saa käyttöönsä perittävän luokan määrittelemiä 1 Tämä näyttää aivan järjettömältä! 2 Luokkahierarkiaan ja luokkien väliseen perintään palataan myöhemmin tarkemmin. 9

10 toiminnallisuuksia ja ominaisuuksia. Luokka Object sisältää muun muassa metodin tostring, joka palauttaa olion merkkijonoesityksen. Näin ollen se periytyy kaikkiin luokkiin. Kuitenkin sen tuottama merkkijono on usein aika kelvoton ja siksi se määritellään aliluokassa uudelleen niin, että se tuottaa aliluokalle sopivan merkkijonon. Tästä saadaan esimerkkejä jo tällä viikolla ja myös itse määrittelemämme tietotyypin Henkilo yhteydessä. Opiskeluohje: Liite 1 sisältää näiden tietotyyppien ja niiden tärkeimpien metodien kuvaukset. Lue ensin alla oleva alla ja sen jälkeen Liitteen 1 s (voit lukea niitä myös rinnakkain), mutta huomaa, että metodien kuvaukset ovat Liitteessä 1. Luokan String metodien vahvasti yksinkertaistettu kuvaus on jakson AOP opintomonisteessa, mutta kaikkien luokkien täydellinen kuvaus löytyy koneessasi (ja netissä) olevien kirjastoluokkien kuvauksista. Ns. pakkaus (package) on Javan väline esittää jollain tavalla yhteenkuuluvat luokat (tai oikeastaan niitä vastaavat class-tiedostot) kokonaisuutena. Tämä esitetään kirjoittamalla luokan alkuun package-määre. Pakkaus ei liity olio-ohjelmointiin, vaan se on käytännön ohjelmistotuotannon väline. Omien pakkausten määrittely ja käyttö eivät kuulu tämän kurssin vaatimuksiin. Yksinkertaisimmillaan pakkaus on hakemisto, johon luokat on sijoitettu. Tietyn pakkauksen saa käyttöönsä missä luokassa tahansa kirjoittamalla luokkaan import-lauseen. Myös valmisluokat on koottu pakkauksiksi. Toisia valmisluokkia voidaan käyttää suoraan ilman mitään erityisiä toimenpiteitä (nämä luokat kuuluvat pakkaukseen java.lang 3 ), kun taas toisten valmisluokkien käyttö vaatii import -lauseen, joka kirjoitetaan ennen sen luokan määrittelyä, jossa kirjastoluokkaa käytetään. Ensiksi mainittuja luokkia edustaa mm. luokat String, StringBuffer, Math ja Integer. Sen sijaan luokan Random käyttö vaatii import-lauseen: import java.util.random; ja luokan StringTokenizer käyttö vaatii import-lauseen 4 : import java.util.stringtokenizer; tai import java.util.*; jolloin saa käyttöönsä kummankin ja paljon muutakin eli kaikki pakkauksen java.util luokat. *:n käyttö ei vaikuta ohjelman tehokkuuteen tai kokoon eli kaikki luokkia ei ladata. Pakkaukset java.util ja java.lang ovat pakkauksen java alipakkauksia. Jos tiedoston alussa ei ole package-määrettä, class-tiedostot asetetaan ns. nimettömään pakkaukseen. Se on Java-toteutuksissa nykyhakemisto, so. hakemisto, jossa class-tiedosto sijaitsee. Tällöin ohjelmoija voi käyttää luokassa vain tässä hakemistossa olevia luokkia. Lisätietoja ja esimerkkejä pakkauksista on mm. kursssivujen kohdassa Muita hyödyllisiä linkkejä". Luokan esiintymä eli olio luodaan kirjoittamalla: new <konstruktorin kutsu>; missä konstruktorin nimi on aina sama kuin luokan nimi. Mahdolliset konstruktorimetodit esitetään luokkakirjastossa ja huomaa, että niitä on yleensä useita (metodin ylikuormitus!) ja että ne ovat usein parametrisoitu. Katso String-olioiden luontiesimerkkejä jaksolta AOP. Luokkakirjastossa luokkien kuvauksessa on annettu luokan 3 Jos installoit Javan dokumentaation, näiden luokkien kuvaukset löytyvät koneesi java-kansion alta kansiosta..\docs\api\java\lang tai netistä. Luokkien kuvaukset ovat html-tiedostoja, jotka voi avata kaksoisklikkaamalla. 4 Näiden luokkien kuvaukset löytyvät taas kansiosta..\docs\api\java\util 10

11 tietokenttien (Field Summary), konstruktorien (Constuctor Summary) ja metodien (Method Summary) kuvaukset. Tietokenttien ja metodien kuvauksessa voi olla määre static, jolloin se on ns. luokkamuuttuja tai luokkametodi 5. Näitä käytetään muodossa <luokan nimi>.<kentän nimi tai metodi kutsu> Tällöin ei luoda luokan oliota, vaan metodia käytetään perinteellisen aliohjelman tavoin. Jos taas kuvauksessa ei ole määrettä static, niin kyseessä on ns. esiintymämetodi, joita käytetään muodossa <olio>.<metodin kutsu> Näistä puhutaan lisää myös seuraavan esimerkin yhteydessä. Olioita käsitellään kohdistamalla olioon luokan metodin kutsu edellä mainitulla tavalla (poikkeuksena taulukoiden käsittely ja String-olioiden jotkut toiminnot) ja sen vuoksi esiintymämetodeja sanotaan myös olioiden metodeiksi (kuten Liitteessä 1). Terminologia vaihtelee jonkun verran eri lähteissä. Tässä oppaassa puhutaan aina esiintymämuuttujista ja esiintymämetodeista, mutta muualla saattaa termin esiintymä tilalla olla ilmentymä tai instanssi (vastaava eng. kielinen termi on instance) eli voidaan puhua esim. ilmentymämetodista. Huomaa siis, että ominaisuus: "onko kuvauksessa määre static tai ei ole" määrää sen onko kyseessä luokka- vai esiintymämetodi, joka määrää taas sen miten metodia käytetään (kutsutaan). Huom. Liitteessä 1 on vain osa luokkien kuvauksista ja ne eivät siis sisällä kaikkia luokkien metodeja. Opettele siis heti lukemaan tietokoneessasi olevia kirjastoluokkien kuvauksia. Kun luet alla olevaa, niin katso luokkakirjastosta käytetyn konstruktorin tai metodin kuvaus. Aloitamme yksinkertaisilla AOP-kurssin tasoisilla esimerkeillä, jotka käsittelevät luokkaa String. 5 Sanan luokka käyttö tässä yhteydessä (esim. luokkamuuttuja) viittaa siihen, että ko. asiaa käytetään ilman luokan oliota. Sen sijaan sana esiintymä (esim. esiintymämetodi), viittaa siihen että, ko. asiaa voidaan käyttää vain luokan olion esiintymän kanssa. Myöhemmin kun määrittelemme omia tietotyyppejä, otamme käyttöön myös termin esiintymämuuttuja. 11

12 Esimerkki. Tehdään ohjelma, joka tulostaa annetun merkin esiintymien sijainnit annetussa merkkijonossa. Merkkijono luetaan String-tyyppiseen muuttujaan kohde ja tarkasteltava merkki char-tyyppiseen muuttujaan c käyttäen luokkaa OmaIO. Merkkijono kohde käydään läpi merkeittäin silmukassa. Esimerkiksi jos kohde= java ja c= a, niin sijainnit ovat 1 ja 3. public class FindPositions /** Tulostetaan annetun merkin esiintymät annetussa merkkijonossa. */ public static void main(string[] args) System.out.println("Anna merkkijono"); String kohde = OmaIO.lueString( ); System.out.println("Anna etsittava merkki "); char c = OmaIO.lueChar( ); System.out.println("Etsitaan merkin " + c + esiintymat merkkijonosta " + kohde); for (int i=0; i<kohde.length( ); i++) if (kohde.charat(i)==c) System.out.println("Loytyi kohdasta " + i + "."); // if // for // main // class FindPositions Edellä for-lauseen runko ja if-lauseen then-haara koostuvat vain yhdestä lauseesta, joten niiden ympärillä ei tarvittaisi lausesulkuja ja. Yllä charat on luokan String esiintymämetodi ja sen ulkoinen kuvaus luokkakirjastossa (APIdokumentointi ) on: char charat(int index) Returns the char value at the specified index. Vasemmalla on metodin tulostyyppi, joka on tässä char. Koska tässä ei ole sanaa static ennen tyyppiä char, niin kyseessä on esiintymämetodi. Näin ollen metodin kutsu kohdistetaan aina luokan String-olioon ja näin ollen lausekkeen kohde.charat(i) arvo on tyyppiä char. Metodin nimi on siis charat ja sillä on yksi int-tyyppinen parametri, jolla viitataan merkkijonon tiettyyn positioon ja tässäkin merkkijonon indeksointi alkaa nollasta. Klikkaamalla metodin nimeä saa näkyviin tarkemman kuvauksen metodista (tässä tapauksessa lyhyt kuvaus on kuitenkin riittävä): 12

13 public char charat(int index) Metodin otsikkorivi Returns the char value at the specified index. An index ranges from 0 to length() - 1. The first char value of the sequence is at index 0, the next at index 1, and so on, as for array indexing. If the char value specified by the index is a surrogate, the surrogate value is returned. Specified by: Parameters: Returns: Throws: charat in interface CharSequence (CharSequence on interface eli rajapintaluokka, käsitellään myöhemmin) index - the index of the char value. the char value at the specified index of this string. The first char value is at index 0. IndexOutOfBoundsException - if the index argument is negative or not less than the length of this string. Nostaa poikkeuksen eli virheen (käsitellään myöhemmin), jos index<0 tai index>=kohdemerkkijonon pituus. Seuraavassa on vielä ratkaisu, jossa lukemiseen ei käytetä itsetehtyä luokkaa OmaIO, vaan Javan versiosta 5.0:sta lähtien 6 mukana olevaa kirjastoluokkaa Scanner. Luokkaa Scanner on käsitelty tarkemmin edellisellä kurssin AOP opiskeluoppaan liitteessä ja se löytyy myös OOPin sivuilta. import java.util.scanner; public class FindPositions2 /* Tulostetaan annetun merkin esiintymät annetussa merkkijonossa. */ public static void main(string[] args) Scanner lukija = new Scanner(System.in); System.out.println("Anna merkkijono"); String kohde = lukija.nextline(); System.out.println("Anna etsittava merkki "); char c = (lukija.nextline()).charat(0); // rivin ensimmäinen ja ainoa merkki System.out.println("Etsitaan merkin " + c +" esiintymat merkkijonosta " + kohde); 6 Javan kehitystyössä on yleensä voimassa seuraava ominaisuus: uudesta versiosta ei poisteta aiemman version ominaisuuksia. Tällä taataan vanhojen Java-ohjelmien toimivuus uudessa ympäristössä. 13

14 for (int i=0; i<kohde.length( ); i++) if (kohde.charat(i)==c) System.out.println("Loytyi kohdasta " + i + "."); // if // for // main // class FindPositions2 Lauseke (lukija.nextline()).charat(0) voidaan kirjoittaa myös ilman sulkeita muodossa lukija.nextline().charat(0), koska lauseketta jäsennetään vasemmalta oikealle. Tässä lauseke lukija.nextline() on tyyppiä String ja siihen kohdistetaan luokan String metodi charat. Huomaa, että luokassa Scanner ei ole metodia yhden merkin lukemiseen, joten yhden merkin lukeminen tulee suorittaa tässä esitetyllä tavalla. Edellä tarkasteltava merkki tallennettiin char-tyyppiseen muuttujaan c ja se onkin luonnollista. Voimme tarkastella sitä myös yhden merkin mittaisena String-tyyppisenä merkkijonona (alla muuttuja st). Tällöin meidän tulee tutkia onko ko. merkin muodostava merkkijono st alkuperäisen merkkijonon kohde osajono eli onko kohde.substring(i,i+1) sama kuin st. Merkkijonojen yhtäsuuruutta tulee tutkia luokan String metodilla equals eli meidän tulee kirjoittaa: st.equals(kohde.substring(i,i+1)). Voimme siis kirjoittaa: public static void main(string[] args) Scanner lukija = new Scanner(System.in); System.out.println("Anna merkkijono"); String kohde = lukija.nextline(); System.out.println("Anna etsittava merkki "); String st = lukija.nextline(); System.out.println("Etsitään merkin " + st + " esiintymät merkkijonosta " + kohde); for (int i=0; i<kohde.length( ); i++) if (st.equals(kohde.substring(i,i+1))) System.out.println("Löytyi kohdasta " + i + "."); // for // main (*** esimerkin loppu ***) equals-metodi olioiden yhteydessä Kaikilla luokilla on metodi equals, joka on määritely valmisluokassa Object, joka on kaikkien luokkien (myös itsetehtyjen) yliluokka. Metodi equals on kuitenkin määritelty luokassa Object niin, että se tarkoittaa vain viittauksien yhtäsuuruutta eli ==. Näin ollen se ei ole sellaisenaan käyttökelpoinen, joten joissakin luokissa se on uudelleenmääritelty paremmin. Esim. luokassa String equals tarkoittaa merkkijonojen samuutta kuten nähtiin edellisessä esimerkissä. Monissa muissa luokissa kuten esim. jatkossa esitellyissä muissa merkkijonoluokissa StringBuffer ja 14

15 StringBuilder kuten myös seuraavalla viikolla käsiteltävien dynaamisten listojen implementoinnissa metodia ei ole uudelleenmääritelty, joten tarvittaessa equals metodi tulee kirjoittaa itse. Luokat StringBuffer ja StringBuilder Luokan StringBuffer oliot ovat merkkijonoja (puhutaan myös merkkijonopuskuriolioista), mutta niiden sisältöä voi muuttaa eli luokassa StringBuffer on metodeja, joilla voimme muuttaa ko. luokan olioita. Luokan String alkiot ovat siis mutatoitumattomia, kun taas luokan StringBuffer oliot ovat mutatoituvia. Esimerkiksi jos halutaan muuttaa tietyssä merkkijonossa tiettyjä merkkejä toisiksi luomatta uutta oliota, niin on järkevää määritellä kyseinen merkkijono luokan StringBuffer olioksi. Luokan olion luonti ja olion viittauksen asetus muuttujaan suoritetaan seuraavasti: StringBuffer <muuttujan nimi> = new StringBuffer(<String-tyyppinen olio>); missä <String-tyyppinen olio> on String-tyyppinen vakio, lauseke tai muuttuja. Tyypit String ja StringBuffer (ja vastaavasti StringBuilder) eivät ole sijoitusyhteensopivia eli String-tyyppiseen muuttujaan ei voi suoraan sijoittaa StringBuffer-tyyppistä alkiota (eikä päinvastoinkaan). Tarvittaessa meidän tulee tehdä tyypin muunnos ja luoda uusi halutun luokan olio, jonka sisältö vastaa alkuperäisen olion sisältöä. Muutos tehdään seuraavasti: String-oliosta vastaava StringBuffer-tyyppinen olio: Olkoon st luokan String olio (tai merkkijonovakio). Tällöin voimme luoda uuden StringBuffer-tyyppisen olion stb kirjoittamalla StringBuffer stb = new StringBuffer(st); Jos tässä jätetään argumentti st pois, niin silloin olion sisältönä on tyhjä merkkijono. StringBuffer-oliosta vastaava String-tyyppinen olio: Olkoon stb luokan StringBuffer olio. Tällöin voimme luoda uuden String-tyyppisen olion st kirjoittamalla String st = new String(stb); Vaihtoehtoisesti voimme kirjoittaa String st = stb.tostring( ); Tässä on myös hyvä huomata, että eksplisiittiset tyypinmuunnokset eivät onnistu kirjastoluokkien tyyppien välillä samaan tapaan kuin perustyypeillä (esim. double vs. int); esim. emme voi kirjoittaa StringBuffer stb = (StringBuffer) st; Lisäksi on hyvä huomata, että luettaessa merkkijono on se aina tyyppiä String ja jos siitä halutaan muodostaa luokan StringBuffer olio, tulee käyttää em. tyypin muunnosta. 15

16 Lisäksi luokasta String tutut operaatiot + (katenointi) ja olion luonti ilman new:tä ei onnistu luokassa StringBuffer, vaan ne tulee suorittaa oikeaoppisesti käyttäen luokan metodeja. Myöskään merkkijonovakiota ei voi asettaa suoraan StringBuffer-olion arvoksi, koska merkkijonovakio on aina tyyppiä String. Liitteessä 1 on suomennettuna joitakin luokan StringBuffer metodeja ja niiden toiminta. Kattavampi kuvaus löytyy luokkakirjastosta. Esimerkki. Alla on esimerkki merkkijonon kääntämisestä kun metodi käännä saa argumenttinaan sekä palauttaa StringBuffer-tyyppisen olion. Tämä sama metodi esitettiin myös jakson AOP opiskeluoppaassa, mutta tällöin alkiot olivat String-tyyppisiä. Tämän metodin tekeminen on turhaa, koska luokassa StringBuffer on valmiina metodi reverse, joka tekee saman asian. Ohjelmasta näet kuitenkin metodien käännä ja reverse erilaisen soveltamistavan: Metodia käännä ei kohdisteta olioon, koska se on ns. luokkametodi (määreenä on static). Tällöin käännettävä merkkijono (muuttuja kohde) annetaan metodille parametrina. Sen sijaan reverse on luokan StringBuffer esiintymämetodi (luokkakirjastossa metodin reverse kuvauksessa ei ole määrettä static), joten sitä käytetään olio-ohjelmoinnin periaatteiden mukaisesti: metodi kohdistetaan johonkin ko. luokan olioon kirjoittamalla <olio>.<metodin kutsu> eli kuten alla: kohde.reverse( ). Metodissa käännä käytetään metodia append, joka lisää yhden merkin nykyisen olion perään. Tässä meillä on siis käytössä vain yksi olio, joka mutatoituu (muuttuu) ohjelman suorituksen aikana. Metodin append kuvaus kirjastoluokassa StringBuffer on muotoa: StringBuffer append(char c) Appends the string representation of the char argument to this sequence Kun klikkaamme append-sanaa saamme tarkemman kuvauksen: public StringBuffer append(char c) Appends the string representation of the char argument to this sequence. The argument is appended to the contents of this sequence. The length of this sequence increases by 1. The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(char) and the character in that string were then appended to this character sequence. Parameters: Returns: c - a char. a reference to this object. // reference = viittaus 16

17 Huom. Vaikka append on esiintymämetodi (koska sana static puuttuu metodin otsikkoriviltä), niin se on funktio, jonka soveltaminen palauttaa StringBuffer-olion. Soveltaminen on siis lausekelause, jota voi käyttää lauseena tai lausekkeena. Esimerkiksi alla kutsulla apu.append(st.charat(i)) on myös arvo, joka on sama kuin apu:n muuttunut sisältö. Tätä arvoa ei useinkaan ole tarvetta asettaa minkään toisen muuttujan arvoksi, vaikka se mahdollista onkin. public class Kaanna_buffer public static void main(string[] args) System.out.println( Anna merkkijono ); String st = OmaIO.lueString(); // String-tyyppisestä oliosta st luodaan StringBuffer-tyyppinen olio nimeltä kohde StringBuffer kohde = new StringBuffer(st); System.out.println(käännä(kohde)); System.out.println(kohde.reverse( )); // end main /** Metodi palauttaa merkkijonon st käännettynä. * Alkuehto: st tulee olla luotu, mutta se voi olla tyhjä. */ public static StringBuffer käännä(stringbuffer st) // luodaan ensin uusi olio, jonka sisältönä on tyhjä merkkijono StringBuffer apu=new StringBuffer( ); // lisätään sen loppuun st:n merkit yksitellen lopusta alkaen for (int i=st.length( )-1; i>=0; i--) apu.append(st.charat(i)); // ks. yllä oleva Huom. return apu; // metodi käännä // class Kaanna_buffer Lause apu.append(st.charat(i)); lisää merkkijonon apu perään merkin st.charat(i) eli merkkijonon st positiossa i olevan merkin. (*** esimerkin loppu ***) Java 5.0:sta lähtien mukana on myös luokka StringBuilder, joka on kuin luokka StringBuffer, mutta luokan StringBuilder kuvauksessa suositellaan sen käyttöä StringBufferin sijasta tehokkuuden vuoksi. Katso luokkakirjastosta sen kuvaus. Kuten jo aiemmin todettiin, luokkien StringBuilder ja StringBuffer osalta tulee huomioida myös seuraava: metodi equals antaa arvon true vain silloin kun viitataan samaan olioon (siis toimii samoin kuin ==). 17

18 Luokka StringTokenizer ja luokan String metodi split Luokkaa StringTokenizer käytetään osien (tokens eli tokenien) erottamiseen ja poimimiseen merkkijonosta, jossa on käytetty tiettyjä erotinmerkkejä. Erotinmerkit voidaan antaa konstruktorille parametrina olion luonnin yhteydessä. Esimerkiksi StringTokenizer stok = new StringTokenizer(<merkkijono josta etsitään>, <erotinmerkit merkkijonona>); Jos erotinmerkkejä ei anneta, niin oletuksena on ns. white-space merkit (välilyönti, tabulaattori, enter). Lisäksi konstruktorille voidaan antaa kolmas parametri (ks. alla olevan esimerkin muuttujan st4 luonti). Esimerkki. Esitämme esimerkkiohjelman, jossa havainnollistetaan luokan metodien toimintaa. Metodissa luodaan läpikäytävä merkkijono-olio st2 käyttäen konstruktoria StringTokenizer(String str, String delim) Constructs a string tokenizer for the specified string. jossa erotinmerkki delim annetaan merkkijonona. Ohjelmassa käytetään myös luokan StringTokenizer esiintymämetodia nexttoken: String nexttoken() Returns the next token from this string tokenizer. Metodin nexttoken kutsu kohdistetaan StrngTokenizer-olioon ja kutsu palauttaa merkkijonon seuraavan osan. 18

19 Katso rivien perässä olevat kommentit. import java.util.*; public class Tokenit public static void main(string[] args) StringTokenizer st1= new StringTokenizer("a b 1"); System.out.println(st1.countTokens()); // tulostuu 3 String s = st1.nexttoken(); // s="a" s = st1.nexttoken(); // s="b" s = st1.nexttoken(); // s="1" StringTokenizer st2 = new StringTokenizer("xx, yy,11", ","); s = st2.nexttoken(); // s="xx" s = st2.nexttoken(); // s=" yy" int i = Integer.parseInt(st2.nextToken()); // i=11 (tyypin muunnos!) /* jotta yllä oleva lause toimisi, niin merkkijonossa ei saa olla merkkien 11 kummallakaan puolella tyhjiä */ StringTokenizer st3 = new StringTokenizer(" ","+-"); // sekä + että - ovat erottimia s = st3.nexttoken(); // s="23" char ch = st3.nexttoken().charat(0); // ch='4' s = st3.nexttoken(); // s="5" StringTokenizer st4 = new StringTokenizer(" ","+-", true); // true saa aikaan sen, että myös erotinmerkki tulkitaan tokeniksi s = st4.nexttoken(); // s="23" ch = st4.nexttoken().charat(0); // ch='+' s = st4.nexttoken(); // s="444" // main // class Tokenit (*** esimerkin loppu ***) Luokassa String on myös kätevä metodi split, jolla kohdemerkkijono voidaan palastella merkkijonotaulukkoon. Tehokkuussyistä tätä metodia suositellaan käytettävän luokan StringTokenizer metodien sijasta. Lisäksi splitin käyttö on usein helpompaa. Tarkastellaan metodia esimerkin avulla, joten olkoon String st= 123,456,7 ; Metodin split argumenttina on ns. säännöllinen lauseke (regular expression) 7 String-tyyppisenä, joka määrää sen mistä kohdin palastelu tehdään: yksi merkki: esim. lause String[ ] s = st.split(, ); pilkkoo st:n palasiin pilkkujen kohdilta, jolloin s[0]= 123, s[1]= 456, s[2]= 7 useita peräkkäisiä merkkejä: esim. lauseen String[ ] s = st.split( 456 ); jälkeen s[0]= 123, ja s[1]=,7 lista vaihtoehtoisista merkeistä, joiden kohdalta suoritetaan paloittelu. Ne annetaan hakasulkeiden sisällä peräkkäin: esim. lauseen String[ ] s = st.split( [25] ); jälkeen s[0]= 1 ja s[1]= 3,4 ja s[2]= 6,7. yksi tai useampi välilyönti peräkkäin: split( + ) (plussan edessä on yksi välilyönti) 7 Ei vaadita yleisesti tällä kurssilla. Alla olevien esimerkkien tapaukset riittää osata. 19

20 Seuraavaksi mennään hiukan teknisempään mutta käytännössä hyvinkin tarpeelliseen asiaan: desimaalilukujen muotoilu. Tätä ei kuitenkaan vaadita tentissä. Asiasta esitetään vain esimerkkejä. Tulostuksen muotoilu ja DecimalFormat Usein desimaaliluvuissa on tulostuksen yhteydessä liian paljon desimaaleja; meille riittäisi esimerkiksi vain kaksi desimaalia. Jakson AOP harjoitustehtävissä esiteltiin tulostuslause printf, joilla voidaan muotoilla (formatoida) desimaaliluku haluttuun muotoon. Esimerkiksi olkoon: double d=1.236; System.out.printf("d=%8.2f", d); Tämä saa aikaan tulostuksen d= ja sen jälkeen luku d tulostetaan 8 merkin levyiseen kenttään kahdella desimaalilla. Tässä voi kirjoittaa myös esim. %2.2f, jolloin desimaaliluvun eteen tulee vain yksi välilyönti ja tarkkuus on edelleen 2 desimaalia. Tässä siis tapahtuu automaattinen kentän laajennus, koska 2 on liian pieni luku koko kentän leveydeksi. Lisäksi jos luvussa on enemmän desimaaleja kuin mitä tulostetaan, niin muunnoksessa suoritetaan pyöristys (jos siis ensimmäinen poisjäänyt desimaali on >=5). Joskus on tarvetta muodostaa desimaaliluvusta String-tyypin olio, joka vastaa luvun esitystä mutta vähemmillä desimaaleilla. Tällöin voimme käyttää luokkaa DecimalFormat, joka vaatii import-lauseen import java.text.decimalformat; Tämän luokan käyttö käy ilmi seuraavasta esimerkistä: DecimalFormat f = new DecimalFormat("0.00"); // ja oliohan tämä formatoijakin on! double d=1.236; String st = d= +f.format(d); Tässä f.format(d) palauttaa (johtuen kielivalinnasta kuten Scannerin yhteydessäkin) Stringtyyppisen arvon 1,24, joten jos haluaa desimaalipisteen pilkun tilalle, niin tulee kirjoittaa f.format(d).replace(,,. ) eli korvataan pilkku pisteellä. Tässäkin tapahtuu automaattinen kentän laajennus, jos muotoilussa (edellä "0.00") on liian vähän nollia desimaalipisteen edessä muotoiltavaan lukuun nähden. Merkkijonon ja tekstitiedoston läpikäynti käyttäen luokkaa Scanner Luokkaa Scanner (ks. jakson AOP opiskeluoppaan lopussa oleva Liite) voi käyttää merkkijonon skannaukseen samaan tapaan kuin luokkaa StringTokenizer. Läpikäytäessä merkkijonoa, voi erotinmerkin valita itse. Tarkastellaan esimerkkinä merkkijonossa olevien lukujen läpikäyntiä. Olkoon s merkkijono, joka sisältää double-lukuja, jotka on erotettu #- merkeillä; esim. s= 1,5#2,89#3,13 (huomaa desimaalipilkku!). Nyt luomme luokan Scanner olion, jolle annetaan parametrina se merkkijono, joka käydään läpi. Koska erotinmerkkinä on nyt #, niin meidän tulee kertoa ko. oliolle, että oletuserottimen sijasta erottimena on #. Merkkijonossa ei saa olla kuitenkaan esim. ylimääräisiä välilyöntejä. 20

1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT... 4 2. MATERIAALIT JA OHJELMISTOT... 5

1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT... 4 2. MATERIAALIT JA OHJELMISTOT... 5 1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT... 4 2. MATERIAALIT JA OHJELMISTOT... 5 3. SUORITUSTAVAT... 5 3.1 Tentistä... 5 3.2 Tietokonetyöstä... 6 4. OPISKELUN ETENEMINEN... 6 VIIKKO 3... 8 Luokka

Lisätiedot

Luokkakirjastot. esiintymämetodien käytöstä:

Luokkakirjastot. esiintymämetodien käytöstä: Luokkakirjastot Esimerkkejä Jokainen olio on jotain tyyppiä ja ko. tyyppistä oliota voidaan käsitellä ko. luokan metodeilla Merkkijonojen käsittely: String, StringBuffer, StringBuilder, StringTokenizer,..

Lisätiedot

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

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

Lisätiedot

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

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

Lisätiedot

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi 1 Javan perusteet Ohjelmointi IPO-malli Java lähdekoodista suoritettavaksi ohjelmaksi Vakio Muuttuja Miten Javalla näytetään tietoa käyttäjälle, miten Javalla luetaan käyttäjän antama syöte Miten Javalla

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Käyttäjän kanssa keskusteleva ohjelma 1 Kirjoittaminen konsolinäkymään //Java ohjelma, joka tulostaa konsoli-ikkunaan public class HeiMaailma { public void aja() { // kirjoitus ja

Lisätiedot

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

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

Lisätiedot

Ohjelmoinnin 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

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

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

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

Lisätiedot

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

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

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

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

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet String-merkkijonoluokka 1 Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet

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

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

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

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

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

Lisätiedot

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

Java-kielen perusteita

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

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Metodien tekeminen Javalla

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

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap Tietorakenneluokkia ja -rajapintoja Java tarjoaa laajan kokoelman tietorakennerajapintoja ja - luokkia. Aiemmin

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

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

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

Lisätiedot

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

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

1 Tehtävän kuvaus ja analysointi

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

Lisätiedot

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus Sisällys 19. Olio-ohjelmointia Javalla Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit

Lisätiedot

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

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

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko 5 Taulukot Tämän osan sisältö Taulukon esittely ja luonti Taulukon alustaminen Taulukon koko Taulukon käsittely indeksointi peräkkäiskäsittely hajakäsittely harva taulukko Taulukon järjestäminen Kaksiulotteinen

Lisätiedot

Pakkauksen kokoaminen

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

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja

Lisätiedot

Mikä yhteyssuhde on?

Mikä yhteyssuhde on? 1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT... 3 2. SUORITUSTAPA... 4

1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT... 3 2. SUORITUSTAPA... 4 Sisällys 1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT... 3 2. SUORITUSTAPA... 4 3. MATERIAALIT JA OHJELMISTOT... 4 3.1 Oppimateriaalit ja niiden lukujärjestys sekä ViLLE... 4 3.2 Oheismateriaali...

Lisätiedot

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

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

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

Lisätiedot

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

TIETORAKENTEET JA ALGORITMIT

TIETORAKENTEET JA ALGORITMIT TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle

Lisätiedot

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu Taulukot Taulukon määrittely ja käyttö Taulukko metodin parametrina Taulukon sisällön kopiointi toiseen taulukkoon Taulukon lajittelu esimerkki 2-ulottoisesta taulukosta 1 Mikä on taulukko? Taulukko on

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Ohjelmoinnin perusteet, 1. välikoe

Ohjelmoinnin perusteet, 1. välikoe Ohjelmoinnin perusteet,. välikoe Nimi: Opiskelijanumero:.. 3. 4. Yhteensä Ohje: Ratkaise kaikki tehtävät. Lähdemateriaalia ja tietokonetta ei saa käyttää. Noudata ohjelmointitehtävissä Java-kielen vakiintuneita

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

Osoitin ja viittaus C++:ssa

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

Lisätiedot

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

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Tietojenkäsittelytieteiden 26 op:n perusopinnot 2014-2015

Tietojenkäsittelytieteiden 26 op:n perusopinnot 2014-2015 Tietojenkäsittelytieteiden 26 op:n perusopinnot 2014-2015 Opiskelijan käsikirja sisältää opintojen ja opiskelumuotojen kuvauksen, joka esitetään alla tiivistetyssä muodossa. Opinnot voi suorittaa verkkotuettuna

Lisätiedot

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015 Ohjelmointi II Erkki Pesonen Luennot ja harjoitukset Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015 1 Johdantoa kurssilla opiskeluun: oppimistavoitteet. 1. Tiedän mitä asioita kurssilla opiskellaan

Lisätiedot

2. Olio-ohjelmoinista lyhyesti 2.1

2. Olio-ohjelmoinista lyhyesti 2.1 2. Olio-ohjelmoinista lyhyesti 2.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 2.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

812341A Olio-ohjelmointi, 2016. Olio-ohjelmoinnin peruskäsitteet ja Java-kieli

812341A Olio-ohjelmointi, 2016. Olio-ohjelmoinnin peruskäsitteet ja Java-kieli 812341A Olio-ohjelmointi, 2016 Olio-ohjelmoinnin peruskäsitteet ja Java-kieli Sisältö 1. Java-kieli 2. Luokka 3. Luokkakaaviot 4. Lisää Javaa Javalla 2 Java-kieli n Sun Microsystems tutkimusprojekti 1991

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Kielioppia: toisin kuin Javassa

Kielioppia: toisin kuin Javassa Object Pascal Pascal kielen oliolaajennus (Inprise/Borland:n oma) luokat Voit uudelleenkäyttää luomiasi objekteja esim. komponentteja Periytyminen Kielioppia: toisin kuin Javassa Ei eroa isojen ja pienien

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 27.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 27.1.2010 1 / 37 If-käsky toistokäskyn sisällä def main(): HELLERAJA = 25.0 print "Anna lampotiloja, lopeta -300:lla."

Lisätiedot

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

Lisätiedot

Lauseet. Ehdollinen lause. Tämän osan sisältö. Ehdollinen lause. Esimerkkejä. Yksinkertainen ehto. Lohkosulut ja sisennys. Ehdollinen lause if

Lauseet. Ehdollinen lause. Tämän osan sisältö. Ehdollinen lause. Esimerkkejä. Yksinkertainen ehto. Lohkosulut ja sisennys. Ehdollinen lause if 3 Lauseet Lue kirjasta s. 54-84 Tämän osan sisältö Ehdollinen lause if Looginen lauseke vertailut AND-operaattori &&, & OR-operaattori, NOT-operaattori! Valintalause switch Toistolauseet while for do while

Lisätiedot

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin Olio-ohjelmointi: Luokkien toteuttaminen Jukka Juslin Luokkien kirjoittaminen Tähän mennessä on käytetty valmiiksi määritettyjä luokkia. Nyt opimme kirjoittamaan omia luokkia olioiden kuvaamiseksi Seuraavaksi

Lisätiedot

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi lötköjen kansoittamaa alkulimaa simuloiva olioperustainen ohjelma Java-kielellä. Lötköt säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti

Lisätiedot

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

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

Luokan sisällä on lista

Luokan sisällä on lista 1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 X Skriptiohjelmointi Sisältö 1. Johdanto 2. Skriptikielten yleispiirteitä 3. Python 815338A Ohjelmointikielten periaatteet, Skriptiohjelmointi 2 X.1 Johdanto

Lisätiedot

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

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')

Lisätiedot

Taulukot, silmukat ja muut joka koodin pikku veijarit

Taulukot, silmukat ja muut joka koodin pikku veijarit Taulukot, silmukat ja muut joka koodin pikku veijarit Janne Käki 7.9.6 MERKKI liikenne jono METRI para laku MOGARI ATRI psyki buutti ESINE pelottelu ellistäminen runsauden kuono TUNTI SARVI kusi assistentti

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

Johdatus Ohjelmointiin

Johdatus Ohjelmointiin Johdatus Ohjelmointiin Syksy 2006 Viikko 2 13.9. - 14.9. Tällä viikolla käsiteltävät asiat Peruskäsitteitä Kiintoarvot Tiedon tulostus Yksinkertaiset laskutoimitukset Muuttujat Tiedon syöttäminen Hyvin

Lisätiedot

Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016)

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

Lisätiedot

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=

Lisätiedot

C# olio-ohjelmointi perusopas

C# olio-ohjelmointi perusopas Paavo Räisänen C# olio-ohjelmointi perusopas www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei kaupallisissa tarkoituksissa. Kuitenkaan omille nettisivuille opasta ei saa

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 24.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 24.1.2011 1 / 36 Luentopalaute kännykällä alkaa tänään! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia. 4. Periytyminen 4.1. Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

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

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

Lisätiedot

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin Ohjausjärjestelmien jatkokurssi Visual Basic vinkkejä ohjelmointiin http://www.techsoft.fi/oskillaattoripiirit.htm http://www.mol.fi/paikat/job.do?lang=fi&jobid=7852109&index=240&anchor=7852109 Yksiköt

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

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Toistorakenne (while, do-while, for) 1 While- lause while-lauseen rakenne on seuraava: while (ehtolauseke) lause Kun ehtolausekkeen arvo on totta, lause suoritetaan. Lause suoritetaan

Lisätiedot