dogs worlds_ugliest_dog.jpg

Koko: px
Aloita esitys sivulta:

Download "dogs worlds_ugliest_dog.jpg"

Transkriptio

1 1. Johdanto 1.1. Tehtävä Komentoikkuna [1, 2] on teksuaalinen käyttöliittymä, jonka kautta käyttöjärjestelmää ohjaillaan komentoja kirjoittamalla. Komentoikkuna tunnetaan myös muun muassa komentorivinä (command prompt), konsolina (console), terminaalina (terminal), kuorena (shell) ja komentotulkkina (command interpreter). Tarkkaan ottaen komentotulkki on komentoikkunassa ajettava ohjelma, joka lukee käyttäjältä komennot ja muuntaa ne käyttöjärjestelmän ymmärtämään muotoon, mutta koska komentoikkunan avautuessa käynnistetään lähes aina jokin komentotulkki, ymmärretään komentotulkki käytännössä komentoikkunaksi. Suuri osa komentotulkissa saatavilla olevista komennoista liittyy tiedostojen ja hakemistojen käsittelyyn. Esimerkiksi hakemistosta toiseen siirtymiselle ja hakemiston sisällön listaamiselle on omat komennot. Komentotulkki tukeutuu muiden sovellusten tapaan massamuistin käsittelyssä tiedostojärjestelmänä [3] tunnetun käyttöliittymän osan tarjoamiin palveluihin. Tiedostojärjestelmä esittää massamuistissa olevat tiedot siten, että sovellusten ei tarvitse huolehtia hyvinkin monimutkaisesta alkuperäisestä esitystavasta. Moderni tiedostojärjestelmä organisoi massamuistin hakemistot puumaiseksi rakenteeksi, joka on yleensä käännetty: juurihakemisto on ylimpänä ja puun lehtihakemistot alimpana. Kuvassa 1 on esitetty eräs hakemistopuu. / pics temp memo_backup.txt cats ceiling_cat.gif dangerous_kitten.jpg dogs worlds_ugliest_dog.jpg Kuva 1: Eräs hakemistopuu. Suorakaiteet symboloivat hakemistoja. Juurihakemiston nimenä käytetään kauttaviivaa. Viivat yhdistävät alihakemistot ja ylihakemistot. Eri käyttöjärjestelmissä on samankaltaisia komentoja yleisemmille komennoille. Komennot on kuitenkin yleensä nimetty eri tavoin ja samannimisetkin komennot voivat toimia toisistaan poikkeavasti. Esimerkiksi hakemiston listaus tapahtuu Windows-järjestelmässä dir-komennolla, kun taas Linux- ja Mac-järjestelmissä käytetään ls-komentoa. Komentoikkunassa on komentokehote, joka näyttää tyypillisesti juurihakemistosta nykyiseen hakemistoon johtavan hakemistopolun. Komennot kirjoitetaan yleensä samalle riville kuin kehote ja syötetään komentotulkille rivinvaihtonäppäintä painamalla. Kuvassa 2 on annettu kaksi komentoa käyttäjän csjola kotihakemiston Documents-alihakemistossa. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 1 / 17

2 Kuva 2: Erään Linux-käyttöjärjestelmän komentoikkuna ja siinä annettuja komentoja. Harjoitustyössä on tehtävänä ohjelmoida Java-kielellä komentoikkunassa toimivaa komentotulkkia simuloiva olioperustainen Simple Oope Shell (SOS) - ohjelma. Tiedostojärjestelmä toteutetaan linkitettynä rakenteena, jossa hakemistojen sisällöt säilötään linkitetyille listalle (luku 3). Tiedostojärjestelmä tallennetaan keskusmuistiin, jolloin harjoitustyöohjelmassa annetut komennot eivät aiheuta koskaan muutoksia massamuistiin. Erityisesti tiedoston tai hakemiston poistava komento ei poista tietoja levyltä, vaan aiheuttaa muutoksen vain keskusmuistissa olevaan rakenteeseen. Harjoitustyössä toteutettavan ohjelman tuntemat komennot ovat sekoitus yleisimmistä käyttöjärjestelmistä tuttuja komentoja. Pääpaino on kuitenkin Unixin kaltaisissa käyttöjärjestelmissä (*nix). Tästä syytä hakemistojen nimet erotetaan toisistaan kenoviivamerkillä ('/') ja tulkki on merkkikokoriippuvainen eli pienet ja suuret kirjaimet katsotaan eri merkeiksi. Tulkki sallii tiedostojen ja hakemistojen nimissä vain tiettyjä merkkejä (luku 3.2). Tulkin komentojen toiminnallisuutta on rajattu paljon, jotta tehtävä ei kävisi liian vaikeaksi. Komentoja voi kohdistaa lähinnä nykyhakemistoon, komennoilla ei ole niiden toimintaan vaikuttavia valintoja ja vain yksi komennoista toimii rekursiivisesti Työn organisointi Harjoitustyö tehdään itse ja lähinnä omalla ajalla. Muiden kurssilaisten kanssa voi vaihtaa ideoita, mutta koodin kopiointi ei tietenkään ole sallittua. Samoin muualta kuin kurssin verkkosivulta löytyneen koodin kopiointi omaan ohjelmaan on kielletty Pakollisuus ja korvaavuudet Harjoitustyö on pakollinen kurssin 10 opintopisteen laajuisena suorittaville opiskelijoille. Tällaisia kurssilaisia ovat erityisesti kaikki tietojenkäsittelytieteiden tutkinto-ohjelman omat opiskelijat. Ota yhteyttä tutkinto-ohjelmasi opintokoordinaattoriin tai kurssin vastuuopettajaan, jos et tiedä tuleeko sinun suorittaa kurssi 5 vai 10 opintopisteen laajuisena. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 2 / 17

3 Harjoitustyön voi korvata A) muiden oppilaitosten opinnoilla, B) edellisellä Olioohjelmoinnin perusteet -kurssilla hyväksytyllä harjoitustyöllä tai C) edellisten kohtien tapaisella painavalla syyllä. Kohdan A perusteella on annettu kaikki pyydetyt korvaavuudet. Kohdan B perusteella annettavista harjoitustyökorvaavuuksista on tarkempia tietoja kurssin kotisivuilla. B-kohdan osalta on tärkeintä muistaa, että harjoitustyö korvautuu vain, jos ottaa yhteyttä kurssin vastuuopettajaan. Tähän mennessä tulleet yhteydenotot ja sopimukset on kirjattu ylös eikä uusia yhteydenottoja näiltä osin tarvita. 2. Ohjelman toiminnot Ohjelmassa on oltava toiminnot, jotka mahdollistavat uuden hakemiston ja tiedoston luomisen, hakemiston vaihdon, erilaiset tietojen listaamiset (tietty tiedosto tai hakemisto, koko hakemisto ja rekursiivinen listaus), tiedoston tai hakemiston poiston, tiedoston kopioinnin, tiedoston tai hakemiston uudelleen nimeämisen ja ohjelman lopettamisen. Seuraavassa esitellään ohjelman toiminnallisuutta pienten esimerkkien avulla. Laajempia esimerkkiajoja julkaistaan kurssin kotisivujen Harjoitustyö-kohdassa Ohjelman käynnistäminen Ohjelma luo käynnistymisen yhteydessä pelkästään juurihakemiston sisältävän hakemistopuun Käyttöliittymä Ohjelmalla on oikean komentotulkin tapainen tekstipohjainen käyttöliittymä. Ohjelman käynnistyessä tulostetaan kuvassa 3 esitetyllä tavalla ensin tervehdysteksti "Welcome to SOS." ja omalle rivilleen komentotulkin kehote. Tämän jälkeen jäädään odottamaan käyttäjän syötettä samalle riville välittömästi suurempi kuin merkin jälkeen. Kehote koostuu hakemistopolusta, jossa hakemistojen nimet on erotettu toisistaan kauttaviivalla. Kehote alkaa kauttaviivalla ja päättyy kauttaviivaan ja suurempi kuin merkkiin paitsi, jos ollaan juurihakemistossa, jolloin kauttaviivoja on yksi. Kehote on aluksi "/>", koska tulkin ajatellaan käynnistyvän juurihakemistoon. Welcome to SOS. /> Kuva 3: Ohjelma käynnistyksen jälkeen. Ohjelmaa käytetään komentoikkunan tapaan kirjoittamalla halutun toiminnon käynnistävä komento ja painamalla Enter-näppäintä. Komento ja sen mahdolliset parametrit erotetaan toisistaan yhdellä välilyönnillä. Kaikkien muiden kuin lopetuskomennon jälkeen tulostetaan kehote riviä vaihtamatta ja jäädään odottamaan uutta komentoa välittömästi kehotteen viimeisen merkin jälkeen, jos komento oli oikeellinen. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 3 / 17

4 Ohjelma vastaa virheelliseen komentoon tulostamalla omalle rivilleen "Error!" ennen uuden komennon lukemista. Virheeksi katsotaan tuntematon komento (kuva 4) tai tunnettu komento virheellisellä parametrilla. Tulkki sallii tiedostojen ja hakemistojen nimissä vain merkit väleiltä a z, A Z ja 0 9 sekä alaviivamerkin ('_') ja pisteen. Piste saa esiintyä nimessä vain kerran eikä se saa olla nimen ainoa merkki ellei kyseessä ole cd-komennon ylihakemistoon viittaava parametri (luku 2.4). Osassa komennoista on virhe, jos parametrina annetun nimistä tiedostoa tai hakemistoa ei ole olemassa ja osassa komentoja virheen aiheuttaa olemassa oleva tiedosto tai hakemisto. Esimerkiksi olemattomaan alihakemistoon ei voida siirtyä ja toisaalta alihakemistoa ei voida luoda, jos sellainen on jo olemassa. Komento voi epäonnistua myös jommastakummasta tai molemmista syistä: tiedostoa kopioitaessa on mahdollista, että kopioitavan tiedoston nimi on annettu väärin tai että ollaan kopioimassa olemassa olevan tiedoston päälle. Seuraavissa luvuissa kerrotaan mitä kukin komento vaatii parametrina saamansa tiedon tai hakemiston olemassa olon osalta. Tunnetulla komennolla voi olla myös väärä määrä parametreja. Ylimääräiset välilyönnit ennen komentoa, komennon jälkeen, komennon ja sen parametrin välissä tai komennon parametrien välissä katsotaan virheeksi. />pwd Error! /> Kuva 4: Tuntemattoman komennon aiheuttama virhe. Kaikkien tulosteiden muoto on kiinnitetty, jotta ohjelmien automaattinen, tulosteiden vertailuun perustuva tarkistus olisi mahdollista (luku 4). Tarkistusta automatisoimalla pyritään siihen, että kurssin opettajille jää enemmän aikaa työn rakenteen ja laadun arviointiin. Komennot pitää lukea In-apuluokan avulla, jotta ohjelmien tehtävänannon mukainen käyttäytymisen olisi todennäköisempää. Harjoitustyössä käytetään apulaiset-nimiseen pakkaukseen (luku 3.5) sijoitettua versiota In-luokasta, joka on saatavilla kurssin kotisivujen Koodit-kohdassa. Tässä pakkauksessa ovat myös opettajan antamat rajapinnat Hakemiston luominen Nykyiseen hakemistoon luodaan uusi alihakemisto md-komennolla. Alihakemisto annetaan komennolle parametrina. Parametri on virheellinen, jos nykyhakemistossa on jo samanniminen alihakemisto. Kuvassa 5 luodaan uusi hakemisto. />md pics /> Kuva 5: Luodaan juurihakemistoon pics-niminen alihakemisto. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 4 / 17

5 2.4. Hakemiston vaihtaminen Hakemisto vaihdetaan cd-komennolla. Nykyisen hakemiston alihakemistoon siirryttäessä komennon parametriksi annetaan alihakemiston nimi. Ylihakemistoon siirrytään antamalla hakemiston nimeksi kaksi pistettä (luku 2.7). Ilman parametria cd-komento vaihtaa hakemistoksi juurihakemiston (luku 2.7). Parametri on virheellinen, jos alihakemistoa ei löydetä. Virhe tapahtuu myös, jos juurihakemistossa yritetään siirtyä ylihakemistoon. Hakemiston vaihdon onnistuessa komentokehotteen polku päivitetään. Kuvassa 6 vaihdetaan alihakemistoihin pics ja cats lisätään samalla kehotteeseen alihakemistojen nimet. />cd pics /pics/>md cats /pics/>cd cats /pics/cats/> Kuva 6: Vaihdetaan juurihakemistosta pics-alihakemistoon. Luodaan uusi alihakemisto cats ja siirrytään tähän hakemistoon Tiedoston luominen Tulkissa on poikkeuksellisesti komento tiedoston luomiseen nykyiseen hakemistoon (mf), koska simulaattorissa ei voi suorittaa esimerkiksi tekstieditoria. Komennolle annetaan parametreiksi tiedoston nimi ja koko tavuina. Komento ei voi luoda tiedostoa, joka on jo hakemistossa. Koon on oltava positiivinen ( 0) kokonaisluku. Kuvassa 7 nykyiseen hakemistoon luodaan kaksi kuvatiedostoa. /pics/cats/>mf ceiling_cat.gif 3677 /pics/cats/>mf dangerous_kiten.jpg /pics/cats/> Kuva 7: Luodaan kaksi tiedostoa Uudelleen nimeäminen Tiedoston tai hakemiston uudelleen nimeäminen tapahtuu mv-komennolla, jonka ensimmäinen parametri on komennon kohteen nimi ja toinen on kohteen uusi nimi. Nimen vaihto onnistuu, kun nykyisessä hakemistossa on ensimmäisellä parametrilla määritellyn niminen tiedosto tai hakemisto ja toisen parametrin määrittelemää tiedostoa tai hakemistoa ei vielä ole. Kuvassa 8 korjataan tiedoston nimeen tullut kirjoitusvirhe. /pics/cats/>mv dangerous_kiten.jpg dangerous_kitten.jpg /pics/cats/> Kuva 8: Nimetään tiedosto uudelleen. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 5 / 17

6 2.7. Hakemiston listaaminen Hakemiston listaamiseen käytetään ls-komentoa. Komento tulostaa näytölle hakemiston koko sisällön nousevassa aakkosjärjestyksessä, kun komennolle ei anneta parametreja. Komento ei järjestä hakemistoa, koska sen tiedot ovat aina oikeassa järjestyksessä (luku 3.3). Kunkin tiedoston ja alihakemiston merkkijonoesitys (luku 3.2) tulostetaan omalle rivilleen. Komennolla voi tulostaa näytölle parametrina annetun tiedon merkkijonoesityksen, jos nykyhakemistossa on annetun niminen tiedosto tai alihakemisto (luku 2.8). Nykyhakemistosta puuttuvan tiedon listaus on virhe. Tyhjään hakemistoon kohdistetun listauskomennon seurauksena ei tulosteta mitään ja luetaan uusi komento. Rekursiiviselle listaukselle on oma komento (luku 2.10). Kuvassa 9 tulostetaan aluksi hakemiston /pics/cats sisältö. Listauksesta nähdään tiedoston nimen vaihtuneen. Tämän jälkeen vaihdetaan cd-komennolla ylihakemistoon pics, luodaan hakemisto dogs ja siirrytään siihen. Uuden tiedoston luominen ei onnistu, koska heittomerkki ei kuulu nimissä sallittuihin merkkeihin (luku 2.2). Toinen luontiyritys onnistuu. Ilman parametria annettu cd-komento palauttaa tulkin juurihakemistoon, joka listaamalla nähdään alihakemistolla pics olevan kaksi tietoa, jotka ovat alihakemistot cats ja dogs. /pics/cats/>ls ceiling_cat.gif 3677 dangerous_kitten.jpg /pics/cats/>cd.. /pics/>md dogs /pics/>cd dogs /pics/dogs/>mf world's_ugliest_dog.jpg Error! /pics/dogs/>mf worlds_ugliest_dog.jpg /pics/dogs/>cd />ls pics/ 2 /> Kuva 9:Hakemiston listaus ja aiemmin esiteltyjä komentoja Tiedoston kopiointi Tiedostosta tehdään kopio cp-komennolla, jolle annetaan parametrina nimet kopioitavalle tiedostolle ja uudelle tiedostolle. Kopiointi epäonnistuu, jos kopioitavaa tiedostoa ei löydetä nykyhakemistosta tai jos nykyhakemistossa on jo jälkimmäisenä parametrina määritelty tiedosto. Hakemiston kopiointi katsotaan virheeksi, koska tehtävää on helpotettu rajaamalla kopiointi vain tiedostoihin. Komento toteutetaan syväkopioivalla kopiorakentajalla (luku 3.2). Kuvassa 10 luodaan uusi hakemisto, siirrytään siihen ja luodaan uusi tiedosto. Tiedostosta tehdään kopio cp-komennolla. Kopion listaus epäonnistuu aluksi kirjoitusvirheen vuoksi. Kopion tiedot saadaan tulostettua toisella yrityksellä. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 6 / 17

7 />md temp />cd temp /temp/>mf memo.txt 42 /temp/>cp memo.txt memo_backup.txt /temp/>ls memo.txt memo.txt 42 /temp/>ls memo_buk.txt Error! /temp/>ls memo_backup.txt memo_backup.txt 42 /temp/> Kuva 10: Tiedoston kopiointi Poistaminen Tiedosto tai hakemisto poistetaan nykyhakemistosta rm-komennolla. Poistamista ei varmisteta käyttäjältä. Poisto epäonnistuu, jos parametrina annetulla nimellä ei löydetä tiedostoa tai hakemistoa. Kuvassa 11 poistetaan edellä kopioitu tiedosto ja siirrytään juurihakemistoon. /temp/>rm memo.txt /temp/>cd.. /> Kuva 11: Tiedoston poisto Rekursiivinen listaaminen Rekursiivinen listaus tehdään find-komennolla. Komento listaa nykyhakemiston alihakemistoineen esijärjestyksessä (luku 3.4). Tiedostojen ja hakemistojen merkkijonoesityksiä edeltää hakemistopolku. Kuvassa 12 listataan tiedostojärjestelmän koko sisältö. />find /pics/ 2 /pics/cats/ 2 /pics/cats/ceiling_cat.gif 3677 /pics/cats/dangerous_kitten.jpg /pics/dogs/ 1 /pics/dogs/worlds_ugliest_dog.jpg /temp/ 1 /temp/memo_backup.txt 42 /> Kuva 12: Juurihakemistosta aloitettu rekursiivinen listaus Ohjelman lopetus Ohjelmasta poistutaan parametrittomalla exit-komennolla (kuva 13). Komennon jälkeen tulostetaan riviä vaihtaen "Shell terminated."-teksti. />exit Shell terminated. Kuva 13: Ohjelman lopetus komennolla. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 7 / 17

8 3. Ohjelman rakenne 3.1. Yleistä Ohjelma on jaettava kapseloituihin luokkiin, joiden sisältö puolestaan jaetaan järkevän mittaisiin metodeihin. Luokissa on vältettävä saman koodin kopioimista eri paikkoihin, koska koodista voi kirjoittaa asianomaisista paikoista kutsuttavan metodin. Metodien korvaaminen, kuormittaminen ja monimuotoisuus parametrien välityksessä vähentävät tarvetta toistaa koodia eri metodien sisällä. Muistathan, että luokat rakennetaan tiedon ei toimintojen ympärille. Luokkametodeista koostuvat, esimerkiksi Math-luokan tapaiset apuluokat ovat poikkeus tähän sääntöön. Ohjelman toimintoja vastaavia luokkia ei saa tehdä, koska toiminnot eivät ole luokkia itsessään, vaan luokkien metodeja. Olio-ohjelmoinnissa vain keskeisimmät käsitteet mallinnetaan. Luokkia tarvitaan vain sen verran, että ohjelma saadaan toimimaan olioperustaisesti edellä määritellyllä tavalla. Toisaalta kullakin luokalla tulisi olla yksikäsitteinen vastuu. Luokkien lukumäärää ei saa pienentää antamalla luokalle useita sille kuulumattomia vastuita. Erityisesti käyttöliittymäluokan sisältöä on syytä pitää silmällä. Käyttöliittymä vastaa vain ihmisen ja koneen vuorovaikutuksesta ja näin ollen tulkin logiikasta vastaavaa koodia ei saa kirjoittaa sinne, vaan tulkille on tehtävä oma luokka. Muista noudattaa hyvää ohjelmointitapaa: sisennä koodia johdonmukaisesti luettavuuden parantamiseksi, kommentoi riittävästi ja oikeissa paikoissa, liitä jokaiseen metodiin yleisluonteinen kommentti, nimeä vakiot, muuttujat ja operaatiot järkevästi, käytä vakioita, pidä rivit riittävän lyhyinä, käytä välejä lauseiden sisällä ja erota loogiset kokonaisuudet toisistaan väliriveillä, pidä operaatiot järkevän mittaisia operaation tulisi mahtua yhdelle A4-kokoiselle sivulle ja varaudu metodeissa virheellisiin parametrien arvoihin [4, 5]. Erityisesti olio-ohjelmointiin liittyviä hyviä tapoja ovat: luokkiin liitetyt yleiset kommentit, attribuuttien kommentointi, attribuuttien harkittu käyttö [6] ja luokkien tai rajapintojen sijoittaminen omiin tiedostoihinsa. Sisennä koodi välilyönnein. WETO ei hyväksy muilla tavoilla sisennettyä lähdekoodia, jotta koodi näkyisi opettajan editorissa täsmälleen opiskelijan aikomalla tavalla. Lue tiedot näppäimistöltä apulaiset-pakkauksen In-luokalla (luku 3.5). Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 8 / 17

9 3.2. Luokkahierarkia Harjoitustyössä periytymistä käytetään erityisesti tiedostojärjestelmän sisällön mallintamiseen. Ohjelmassa tulee olla abstrakti yliluokka Tieto ja siitä perityt konkreettiset Tiedosto- ja Hakemisto-luokat. Yliluokassa on StringBuilder-tyyppinen attribuutti tiedon nimelle. Luokalla on yksiparametrinen rakentaja sekä aksessorit nimelle (parametrit ja paluuarvo ovat StringBuilder-tyyppiä). Rakentaja ja nimen asettava metodi heittävät IllegalArgumentException-poikkeuksen, jos parametrina annettu nimi ei ole oikean muotoinen (luku 2.2). Tiedoston oma tieto on koko tavuina. Koko on int-tyyppinen ja sen tulee olla positiivinen ( 0). Tee luokalle ainakin kaksiparametrinen rakentaja, joka heittää IllegalArgumentException-poikkeuksen, jos parametrina annettu nimi tai koko on virheellinen. Rakentajan ensimmäinen parametri on nimi. Kutsu rakentajassa yliluokan yksiparametrista rakentajaa. Tee koolle aksessorit ja heitä asetusmetodista IllegalArgumentException-poikkeus, jos koko on virheellinen. Hakemistolla on OmaLista-tyyppinen (luku 3.3) attribuutti, josta on viitteet hakemiston sisältämiin tiedostoihin ja muihin hakemistoihin (luku 3.4). Hakemiston sisältö on järjestetty aina nimiensä mukaiseen nousevaan aakkosjärjestykseen. Lisäksi hakemistolla on Hakemisto-tyyppinen attribuutti, joka viittaa hakemiston ylihakemistoon. Juurihakemiston ylihakemistoviite on null-arvoinen. Kirjoita luokalle rakentaja, jolla on parametrit nimelle (ensimmäinen parametri) ja ylihakemistolle (toinen parametri). Rakentaja heittää IllegalArgumentExceptionpoikkeuksen, jos nimessä on virhe. Rakentajassa luodaan uusi listaolio ja liitetään siihen attribuutti. Tee aksessorit molemmille attribuuteille. Voit kirjoittaa Tieto-luokalle ja sen aliluokille oletusrakentajat, jos katsot niistä olevan hyötyä ohjelman toteuttamisessa. Olion merkkijonoesityksestä on paljon iloa tässäkin työssä. Korvaa siksi Objectluokan tostring-metodi luokkahierarkian jokaisella tasolla. Tee korvaus ketjuttaen : kutsu aliluokkien tostring-metodin korvauksissa yliluokan versiota superattribuutin avulla juuriluokka pois lukien, koska Object-luokan tostring-metodia ei pidä kutsua. Tiedosto-luokassa korvattu tostring-metodi palauttaa merkkijonon, jossa on alusta lukien tiedoston nimi, välilyönti ja tiedoston koko. Jos tiedosto-olion tiedot ovat esimerkiksi "ceiling_cat.gif" ja 3677, on metodin paluuarvo "ceiling_cat.gif 3677". Hakemisto-luokan tostring-metodin palauttama merkkijono koostuu hakemiston nimestä, kauttaviivasta, välilyönnistä ja kokonaisluvusta, joka kertoo montako tiedostoja ja alihakemistoa hakemisto sisältää. Jos hakemisto-olion nimi on "pics" ja hakemiston sisältö koostuu kahdesta alihakemistosta, on metodin palauttama merkkijonoesitys "pics/ 2". Tiedosto- ja Hakemisto-luokkien merkkijonoesitykset tulostetaan, kun hakemisto listataan. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 9 / 17

10 Toteuta Comparable-rajapinnan compareto-metodi Tieto-luokassa. Kiinnitä geneeriseksi tyypiksi Tieto. Olioita vertaillaan niiden nimien perusteella. Korvaa luokassa myös Object-luokan equals-metodi siten, että oliot katsotaan samoiksi, jos niiden nimet ovat merkilleen samat. Pienet ja suuret kirjaimet katsotaan eri merkeiksi. Joudut muuntamaan nimet String-tyyppisiksi ennen vertailua, koska StringBuilder-luokka ei korvaa equals-metodia eikä toteuta Comparablerajapintaa. CompareTo- ja equals-metodeja tarvitaan uusissa listaoperaatiossa (luku 3.3). Kirjoita kopiorakentajat Tieto- ja Tiedosto-luokille. Tieto-luokan kopiorakentaja syväkopioi nimen. Kopiorakentajaa käytetään tiedoston kopioivan komennon toteuttamiseen. Hakemisto-luokan on toteutettava opettajan antama Komennettava-rajapinta, jossa on tulkin komentojen toteuttamiseen ja luokkahierarkian testaamiseen soveltuvia metodeja. Kiinnitä geneeriseksi tyypiksi Tieto. Sijoita Tieto-, Tiedosto- ja Hakemisto-luokat omaa pakkaukseensa (luku 3.5). Luokkahierarkian toteutuksessa hyödyllisiä harjoitustehtäviä ovat muun muassa tehtävät 5.3 (tostring-metodin korvaus ketjuttaen), 5.4 (Comparable-rajapinnan toteutus) ja 6.3 (syväkopiointi) OmaLista-luokka ja muut tietorakenteet Ohjelman pääasiallisena tietorakenteena käytetään fi.uta.csjola.oope.listapakkauksen LinkitettyLista-luokasta perittyä OmaLista-luokkaa. Luokan tärkein käyttökohde on hakemiston sisällön säilöminen (luku 3.4). Lista-pakkaus on saatavilla kurssin kotisivujen Koodit-kohdasta. Huomaa, että pakkauksen sisältöä ei saa muuttaa millään tavoin. Älä lisää tiedoston tai hakemiston tai minkään muun luokan tietoja attribuuteiksi listan Solmu-luokkaan. Tiedostojen ja hakemistojen on oltava solmujen tietoalkioina, jotta lista olisi edelleen yleiskäyttöinen. Javan API:n tietorakenneluokkia, kuten ArrayList-luokkaa, ei saa käyttää. Kysy neuvoa harjoitustyön ohjaajalta, mikäli olet epätietoinen tietorakenteiden käyttöön liittyvissä kysymyksissä. Harjoitustyössä tutustutaan linkitettyyn listarakenteeseen myös toteuttamalla OmaLista-luokassa opettajan antaman Ooperoiva-rajapinnan määrittelemät listaoperaatiot. Yksi rajapinnan operaatioista lisää alkion listalle siten, että alkio sijoittuu kaikkien itseään pienempien tai yhtä suurien alkioiden jälkeen ja ennen kaikkia itseään suurempia alkioita. Alkioita vertaillaan lisättäessä Comparablerajapinnan compareto-metodilla (luku 3.2), jolloin tiedostoja ja hakemistoja sisältävä lista järjestyy automaattisesti nousevaan aakkosjärjestykseen. Voit halutessasi tehdä muitakin kuin rajapinnan määrittelemiä listaoperaatioita. Operaatioiden tulee olla puhtaita listaoperaatioita, joita voitaisiin käyttää myös muissa tehtävissä. Näin OmaLista-luokassa ei saa esiintyä harjoitustyön luokkien tunnuksia. Erityisesti nimiä Tieto, Tiedosto, Hakemisto, String tai StringBuilder ei saa käyttää oman listaluokan operaatioissa. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 10 / 17

11 3.4. Tiedostojärjestelmä Harjoitustyössä tiedostojärjestelmän näyttäytyy hakemistopuuna (luku 1.1), joka koostuu keskinäisillä viitteillä yhdistetyistä Hakemisto-luokan olioista. Oliot muistuttavat jossain määrin yhteen suuntaan linkitetyn listan solmuja, joista kustakin on viite seuraavaan solmuun. Pääasiallinen ero on se, että hakemistosta voi lähteä useita viitteitä seuraavin hakemistoihin (alihakemistot) ja että hakemistosta on myös viite edelliseen hakemistoon (ylihakemisto). Yli- ja alihakemiston välisten viitteiden avulla puussa voidaan liikkua ylös ja alas viitteitä seuraamalla. Hakemisto-luokka säilöö tiedostoihinsa ja alihakemistoihinsa liittyvät viitteet Omalista-tyyppiselle listalle (luku 3.3), joka on luokan attribuutti. Hakemistooliolla on näin osaolio, joka luomisesta ja hallinnoinnista hakemisto on vastuussa. Kuvassa 14 on hahmoteltu Documents-nimisen hakemiston ja sen sisällön rakenne olioina. Documents-hakemistoon tulee viite ylihakemistosta ja siitä lähtee viite ylihakemistoon. Hakemisto-olio viittaa listaolioon, jonka tietoalkiot ovat viitteitä hakemiston sisältämiin tietoihin, jotka ovat alihakemistot School ja Work sekä tiedosto todo.txt. Alihakemistoista on viitteet niiden omiin listaolioihin ja viitteet Documents-hakemistoon, joka on alihakemistojen ylihakemisto. Tiedostolla ei ole paluuviitettä hakemistoonsa. Kuvassa 1 annettu hakemistopuu on piirretty olioiden ja viitteiden muodostamana rakenteena kuvassa 15. Kuvaan ei ole piirretty näkyviin hakemisto-olioiden osaolioita. Juurihakemiston ylihakemistoviite on null-arvoinen. "Documents" "School" "todo.txt" 1000 "Work" Kuva 14: Hakemisto ja sen sisältö oliona, joka on liitetty toisiinsa viitteillä. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 11 / 17

12 null "/" "pics" "temp" "cats" "dogs" "memo_backup.txt" 42 "ceiling_cat.gif" 3677 "worlds_ugliest_dog.jpg" "dangerous_kitten.jpg" Kuva 15: Hakemistopuu viitteillä yhdistettyinä olioina. Harjoitustyössä on toiminto hakemistopuun sisällön rekursiiviseen tulostukseen nykyhakemistosta alkaen (luku 2.10). Tulostus tapahtuu esijärjestyksessä (preorder). Hakemistopuussa tämä tarkoittaa sitä, että ylihakemisto tulostetaan ennen alihakemistojaan. Alla on annettu algoritmi, jossa on rekursiivisen tulostuksen keskeisin idea. Huomaa, että algoritmista puuttuu muun muassa virheenkäsittely ja tulosteen tarkempi muotoilu. Algoritmin voi muuttaa paluuarvon avulla listauksen merkkijonona palauttavaan muotoon. Algoritmi puuntulostus(hakemisto hakemisto) { // Asetetaan apuviite hakemiston tiedot säilövään listaan. sisältö hakemisto.sisältö(); // Käydään hakemiston sisältö läpi yksi tieto kerrallaan. i 0; while (i < sisältö.koko()) { // Tulostetaan tiedon merkkijonoesitys. tieto sisältö.alkio(i); tulosta(tieto); // Tulostetaan alihakemiston sisältö. if (tieto on hakemisto) puuntulostus(tieto); i++; } } Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 12 / 17

13 3.5. Koodin organisointi Tee luokkahierarkian luokkien lisäksi omat luokat komentojen tulkille ja käyttöliittymälle ja erillinen main-metodin sisältävä ajoluokka Oope2017HT. Ohjelmaan voi lisätä näiden lisäksi muita omia luokkia. Hakemistopuun hallinnointi on tulkkiluokan vastuulla. Tulkkiluokka toteuttaa ohjelman tuntema komennot hakemistopuuta käsittelevillä metodeilla. Kullekin komennolle on pääsääntöisesti oma metodi, joka hyödyntää mahdollisimman paljon Hakemisto-luokassa toteutettuja Komennettava-rajapinnan metodeja. Esimerkiksi rm-komento toteutetaan metodilla, joka kutsuu nykyisen hakemisto-olion kautta Hakemisto-luokan poistometodia, joka puolestaan nojaa OmaLista-luokaan tehtyyn uuteen operaatioon. Tulkkiluokassa on Hakemisto-tyyppinen attribuutti hakemistopuun juurelle, jonka kautta voidaan edetä mihin tahansa hakemistoon. Nykyisen hakemiston hakemisto-olioon liittyvä attribuutti helpottaa komentojen toteutusta. Kaikki käyttäjän antamat tiedot luetaan käyttöliittymässä ja käyttöliittymässä tehdään mahdollisimman suuri osa tulostuksista. Pääsilmukan luonteva paikka on käyttöliittymän luokka. Pääsilmukasta kutsutaan komentoja vastaavia tulkkiluokan metodeja joko suoraan tai apumetodien kautta. Sijoita kaikki luokkasi oope2017ht-nimiseen pakkaukseen. Ajoluokka on pakkauksen juurihakemistossa oope2017ht. Tee Tieto-, Tiedosto- ja Hakemisto-luokille oope2017ht.tiedot-niminen alipakkaus. Tämän pakkauksen luokat ovat ajoluokan sisältävän oope2017ht-hakemiston tiedot-nimisessä alihakemistossa (kuva 16). Voit tehdä halutessasi lisää alipakkauksia. Nämäkin pakkaukset ovat ajoluokan hakemiston alihakemistoja. +---apulaiset ---In.java ---Komennettava.java ---Ooperoiva.java +---fi +---uta +---csjola +---oope +---lista ---AbstraktiLista.java ---LinkitettyLista.java ---Lista.java ---Solmu.java +---oope2017ht ---Oope2017HT.java +---tiedot ---Hakemisto.java ---Tiedosto.java ---Tieto.java... Kuva 16: Harjoitustyön oman pakkauksen rakenne ja valmiiden pakkauksen suositeltu paikka. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 13 / 17

14 Harjoitustyössä käytetään apulaiset-pakkaukseen sijoitettua In-luokkaa tietojen lukuun näppäimistöltä. Tähän pakkaukseen on liitetty myös Komennettava- ja Ooperoiva-rajapinnat (luvut 3.2 ja 3.3). Apulaiset-pakkausta ei saa muuttaa millään tavalla. Löydät apulaiset-pakkauksen kurssisivujen Opetus Harjoitustyö - kohdasta. Ohjelman kääntäminen ja suoritus on helpointa, kun valmiit pakkaukset ja ohjelmasi sisältävä oope2017ht-pakkaus ovat saman hakemiston alihakemistoina (kuva 16). Näin toimien ohjelman kääntyy komentoikkunassa pakkausten ylihakemistossa komennolla javac oope2017ht/oope2017ht.java ja on suoritettavissa komennolla java oope2017ht.oope2017ht. 4. Palautus ja tarkistus Harjoitustyössä on välipalautuspiste ennen lopullista palautusta. Välipalautuksen tavoitteena on saada kurssilaiset aloittamaan harjoitustyön teko ajoissa. Harjoitustyöstä täytyy palauttaa perjantaihin klo mennessä Javalla toteutettu luokkahierarkia (luku 3.2), OmaLista-luokka (luku 3.3) ja osittainen dokumentaatio (luku 5). Valmis ohjelma ja dokumentaatio kokonaisuudessaan on palautettava viimeistään perjantaina klo Molemmat palautukset tehdään WETO-järjestelmään, joka tarkistaa automaattisesti ratkaisujen rakennetta ja toiminnallisuutta. Rakenteen tarkistus on osittainen, mutta toiminnallisuuden tarkistus on kattavampi. Toiminnallisuutta arvioidaan vertailemalla mallivastauksen ja opiskelijoiden ratkaisujen tulosteita. Tästä syystä edellä annettuja tulostemäärittelyjä on seurattava merkilleen. Automaattinen vertailu vähentää rutiininomaista testaustyötä, jolloin opettajille jää enemmän aikaa mielekkäämpään työhön eli ohjelman rakenteen ja tyylin tutkimiseen. Opiskelijat hyötyvät tästä perusteellisempien kommenttien muodossa. Toinen välipalautuksessa käytettävistä testiluokista ja tarkemmat palautusohjeet julkaistaan kurssin verkkosivuilla. Lisäaikaa työn tekoon voi saada muutaman päivän hyvästä syystä. Lisäajasta on sovittava ohjaajan kanssa ajoissa eli viimeistään päivää tai paria ennen palautuksen takarajaa. Lisäaika estää useimmissa tapauksissa hyvityspisteiden saamisen (luku 7). Harjoitustyön ohjaaja ei välttämättä ole tavattavissa henkilökohtaisesti lisäaikana. Ennen palautusta on syytä varmistaa, että ohjelma toimii varmasti oikein viimeisimpien muutosten jälkeen. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 14 / 17

15 5. Dokumentointi Harjoitustyöstä kirjoitetaan niin välipalautuksen kuin lopullisen palautuksen yhteydessä dokumentti. Molemmissa palautuksissa dokumentissa tulee olla: Kansilehdellä tekijän nimi, opiskelijanumero ja sähköpostiosoite. Sivun keskellä tulisi olla suuremmalla fontilla dokumentin nimi. Kurssin kotisivuilla julkaistaan esimerkinomainen kansilehti. UML-luokkakaavio ja sen lyhyt sanallinen kuvaus. Välipalautuksen yhteydessä kaaviossa esitetään itse tehdyt luokat tarkalla tasolla (luokkasymboleissa kaikki piirteet) ja yleisemmällä tasolla (luokkasymboleissa vain tärkeimmät piirteet) suunnitelma työn toteuttamattomasta osuudesta. Lopullisessa palautuksessa kaikki itse tehdyt luokat piirretään tarkalla tasolla. Lopullisessa palautuksessa dokumenttiin kirjataan myös omia ajatuksia. Esimerkiksi: Oliko työ helppo, sopiva tai vaikea? Miksi koit työn helpoksi, sopivaksi tai vaikeaksi? Mitä uutta opit? Oliko työstä mitään hyötyä tekijälleen? Paljonko aikaa käytit työhön? Dokumentin leipäteksti kirjoitetaan 12 pisteen fontilla ja yhdellä rivinvälillä. Valmiin tekstin lukeminen pariin otteeseen ei ole huonompi idea. Dokumentin kirjoitus tekstinkäsittelyohjelmalla sekä ohjelmasta löytyvän oikolukutoiminnon käyttäminen tekstin tarkistamiseen on myös suotavaa. Luokkakaaviossa esiintyvien luokkien väliset suhteet mallinnetaan luokkien välisinä suhteina. Piirrä periytymis- ja toteuttamissuhteiden lisäksi näkyviin luokkien väliset assosiaatiot. Jos jossakin itse kirjoitetussa luokassa A on attribuutti, jonka tyyppi on toinen oma luokka B, niin tätä attribuuttia ei esitetä luokan A laatikossa, vaan A- ja B-luokkien symboleiden välisenä assosiaatioviivana. Anna kaikille assosiaatioille nimet, suunta sekä rooli ja kertautumiset. Piirrä luokkakaavioon myös luokkien väliset riippuvuussuhteet. Riippuvuussuhde on assosiaatiota heikompi suhde luokkien ilmentymien välisen hetkellisen yhteistyön ilmaisemiseen. Jos oma luokka C hyödyntää toisen oman luokan D palveluja ilman attribuuttia, niin luokkalaatikoiden välille voi piirtää nuolen (varsi katkoviivaa) luokasta C luokkaan D riippuvuussuhteen merkiksi. Kaavioiden piirto on helpompaa erityisesti UML-kaavioiden piirtoon tehtyjä ohjelmistoja käyttäen. Dia on ilmainen ohjelma, jolla voi piirtää vuo- ja ERkaavioiden lisäksi myös UML-kaavioita. Jotkin ohjelmat osaavat muodostaa osan luokkakaaviosta automaattisesti lähdekoodin perusteella. Tällainen on UMLetohjelma, joista kerrotaan lisää kurssisivujen Opetus Harjoitustyö UML - kohdassa. NetBeans- ja Eclipse-ohjelmistojen kaltaisiin kehitysympäristöihin on saatavilla takaisinmallinnuksen hallitsevia lisäosia. Koodi dokumentoidaan lopullisessa palautuksessa kirjoittamalla lyhyet Javadockommentit jokaiselle attribuutille, metodille ja luokalle. (Rakentajia ja aksessoreita ei tarvitse kommentoida, mikäli ne ovat toiminnoiltaan tavanomaisia.) Javadoc on Java-ympäristön tarjoama menetelmä koodin puoliautomaattiseen doku- Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 15 / 17

16 mentoimiseen. Javadoc-kommentoinnista annetaan erilliset ohjeet kurssin verkkosivujen Opetus Harjoitustyö Javadoc -kohdassa. Javadoc-kommentit voi halutessaan kirjoittaa jo välipalautuksen yhteydessä. Muista edelleen selittää metodien sisällä normaaliin tapaan metodien keskeiset ja vaikeaselkoiset osuudet tavanomaisia kommentteja käyttäen. 6. Ohjaus Kurssin vastuuopettaja vastaa pääosin harjoitustyön ohjauksesta välipalautuspisteeseen saakka. Suurin osa mikroluokkaohjauksesta on välipalautuksen jälkeen. Ohjausten ajat ja paikat ilmoitetaan myöhemmin kurssin kotisivuilla. Ohjaukseen voi tulla omasta harjoitusryhmästä riippumatta: voit käydä ohjattavana aikana, joka sopii sinulle parhaiten. Luuppi tarjoaa ohjausta harjoitustyöhön koodauspajassaan. Vastuuopettajaa voi käydä tapaamassa myös muina aikoina. Tapaamisaika kannattaa sopia etukäteen, jos haluaa varmistaa, että vastuuopettaja on paikalla huoneessaan. Pienemmät kysymykset kannattaa esittää ohjaajille sähköpostitse. Harjoitustyön pääasiallinen sähköpostiohjaaja on mikroharjoitusryhmäsi vetäjä. Näet ryhmäsi WETO-järjestelmän Students-välilehdeltä. Kysy neuvoa sähköpostitse sopivimmaksi katsomaltasi opettajalta, jos et ole valinnut ryhmää. Kysymyksiä ja niihin annettuja vastauksia kerätään kurssin verkkosivujen Harjoitustyö-kohtaan. Ennen kysymistä kannattaa siis tarkistaa kurssin verkkosivut vastaus voi hyvinkin olla jo sivuilla. Monet ongelmat selviävät myös tehtävänantoa lukemalla ja tutustumalla verkkosivuilta löytyviin esimerkkiajoihin. Kysyminen kannattaa erityisesti, kun on epävarma suuremman mittakaavan kysymyksissä. On pienempi vaiva selvittää epäselvä kohta ajoissa ohjaajan kanssa, kuin korjata valmista ohjelmaa jälkikäteen tehtävänantoa vastaavaksi. 7. Arvostelu Arvostelu perustuu ensisijaisesti ohjelman oikeellisuuteen: ohjelman on toimittava testeissä tehtävänannossa määritellyllä tavalla. Harjoitustyö voidaan joko hylätä tai hyväksyä, jolloin työ arvostellaan asteikolla 0 4 pistettä. Pisteet lisätään harjoitushyvityspisteiden tapaan tenttipisteisiin vain, mikäli tentistä on saanut vähintään vaaditut 12 pistettä. Harjoitustyöstä voi saada pisteitä vain, jos välipalautus läpäisee WETOn automaattisen testauksen ja työ on palautettu molemmilla palautuskerroilla ilman lisäaikaa. Aikavaatimuksen osalta voidaan joustaa äärimmäisen hyvästä syystä, jollaisia ovat esimerkiksi pitkä ulkomaan matka tai kokopäivätöiden aiheuttamat ylitsepääsemättömät esteet. Työn pisteet määräytyvät lopullisen palautuksen jälkeen tehtävissä testeissä. Testauksessa on julkinen ja salainen osuus. Huomaa, että salaisissa testeissä käytetään eri syötteitä kuin kotisivuilla annetuissa esimerkeissä. Ohjelman oikeellinen toiminta esimerkkien osalta ei siksi takaa salaisten testien läpäisyä. Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 16 / 17

17 Hylkäyksen perusteena voi olla tehtävänannon noudattamatta jättäminen, ohjelman toimimattomuus, harjoitustyön teossa kiellettyjen Javan ominaisuuksien käyttö, huono dokumentti, hyvän ohjelmointitavan noudattamatta jättäminen ja/tai plagiointi. Plagiointiin liittyy sanktio, joka koskee molempia opiskelijoita. Toiselta opiskelijalta tämän tietämättä kopioidun koodin käyttö johtaa kopioijan koko kurssisuorituksen hylkäämiseen. Hylätyn työn voi palauttaa korjattuna pääsääntöisesti kolme kertaa. Välipisteessä hylätyn työn korjaukseen on aikaa muutama päivä. Lopullisen palautuksen korjausaikaa on useimmiten viikko työn hylkäyksestä. Pisteytys perustuu aina ensimmäiseen palautukseen. Korjauskierroksen kautta ei voi korottaa pistemääräänsä. Lähteet 1. Wikipedia-yhteisö, Command-line interface, (Luettu viimeksi ) 2. J. Laurikkala, Lausekielinen ohjelmointi I -kurssin kotisivut (Luettu viimeksi ) 3. Wikipedia-yhteisö, File system, (Luettu viimeksi ) 4. J. Laurikkala, Lausekielinen ohjelmointi I -kurssin luentorunko, luku 14, (Luettu viimeksi ) 5. J. Laurikkala, Lausekielinen ohjelmointi II -kurssin luentorunko, luku 7, (Luettu viimeksi ) 6. J. Laurikkala, Olio-ohjelmoinnin perusteet -kurssin luentorunko, luku 4, (Luettu viimeksi ) Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala 17 / 17

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

Hakemistojen sisällöt säilötään linkitetyille listalle. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä komentoikkunaa (komentotulkkia, komentoriviä) simuloiva olioperustainen ohjelma. Hakemistojen sisällöt säilötään linkitetyille listalle. Työ

Lisätiedot

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä keskustelualuetta simuloiva olioperustainen ohjelma (Simple Oope Board, S.O.B). Linkitetystä listasta perittyä omaa listaa käytetään muun muassa

Lisätiedot

Harjoitustyö. 1. Johdanto Tehtävä

Harjoitustyö. 1. Johdanto Tehtävä 1. Johdanto 1.1. Tehtävä Sähköisillä keskustelupalstoilla [1] vaihdetaan viestejä eri aiheisiin liittyen. Ensimmäiset palstat olivat uutisryhmiä ( nyyssit ) ja BBS-järjestelmien ( purkkien ) palstoja.

Lisätiedot

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi olioperustainen sokkeloseikkailu peli Javakielellä. Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen

Lisätiedot

2. Merkkijono, osamerkkijono ja osamerkkijonon haku

2. Merkkijono, osamerkkijono ja osamerkkijonon haku . Johdanto Ensimmäisessä harjoitustyössä on tehtävänä toteuttaa Java-ohjelma, joka hakee merkkijonosta osamerkkijonon esiintymiä. Haku voidaan rajoittaa pelkästään merkkijonon alkuun tai sen loppuun. Harjoitustyö

Lisätiedot

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla. Tentti Tentti Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla. Omia koneita ei saa käyttää. Sähköisessä tentissä on paperitentin tapaan osaamisen

Lisätiedot

Harjoitus 5 (viikko 48)

Harjoitus 5 (viikko 48) Moni tämän harjoituksen tehtävistä liittyy joko suoraan tai epäsuorasti kurssin toiseen harjoitustyöhön. Harjoitustyö edistyy sitä paremmin, mitä enemmän tehtäviä ratkaiset. Mikäli tehtävissä on jotain

Lisätiedot

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla. Tentti Tentti Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla. Omia koneita ei saa käyttää. Sähköisessä tentissä on paperitentin tapaan osaamisen

Lisätiedot

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Toinen harjoitustyö. ASCII-grafiikkaa 2017 Toinen harjoitustyö ASCII-grafiikkaa 2017 Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt17-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin

Lisätiedot

Harjoitus 5 (viikko 41)

Harjoitus 5 (viikko 41) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä, käytä

Lisätiedot

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö Yleistä Tehtävä: Tee Javalla LineBreaker-ohjelma tekstirivin sovittamiseen tekstialueelle riviä katkomalla. Lausekielinen ohjelmointi II -kurssin pakollinen

Lisätiedot

Harjoitustyö Johdanto

Harjoitustyö Johdanto 1. Johdanto 1.1. Tehtävä Lausekielinen ohjelmointi II -kurssin ensimmäisessä harjoitustyössä on tehtävänä toteuttaa Java-ohjelma tekstirivin sovittamiseen tekstialueelle. Sovittaminen tapahtuu muodostamalla

Lisätiedot

Harjoitus 2 (viikko 45)

Harjoitus 2 (viikko 45) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän

Lisätiedot

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5 Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät tekniset ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida

Lisätiedot

Harjoitustyö Johdanto

Harjoitustyö Johdanto 1. Johdanto 1.1. Tehtävä Lausekielinen ohjelmointi II -kurssin ensimmäisessä harjoitustyössä on tehtävänä toteuttaa Java-ohjelma, joka laskee merkkijonoa kuvaavia tunnuslukuja. Ohjelma esikäsittelee merkkijonon

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

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen package-määrettä käyttäen. Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa importlauseen avulla. Pakkaukset ja näkyvyys.

Lisätiedot

Harjoitustyö. 1. Johdanto Tehtävä

Harjoitustyö. 1. Johdanto Tehtävä 1. Johdanto 1.1. Tehtävä Muinaiset muukalaiset ovat jättäneet jälkeensä sokkelon, jossa on salaperäisiä esineitä ja vaarallisia robotteja. Toteuta Java-kielellä peli, jossa mönkijää ohjaavan pelaajan tehtävänä

Lisätiedot

Toinen harjoitustyö. ASCII-grafiikkaa

Toinen harjoitustyö. ASCII-grafiikkaa Toinen harjoitustyö ASCII-grafiikkaa Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin itse. Ideoita

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Viimeksi muokattu 5. toukokuuta 2012 Maastotietokannan torrent-jakeluun sisältyy yli 5000 zip-arkistoa,

Lisätiedot

Harjoitustyö. 1. Johdanto. 1.1. Tehtävä

Harjoitustyö. 1. Johdanto. 1.1. Tehtävä 1. Johdanto 1.1. Tehtävä Kaukana, monen valovuoden päässä täältä, sijaitsee planeetta, jolla on käynnistynyt alkeellinen elämä. Tehtävänäsi on toteuttaa Java-kielellä ohjelma, joka simuloi planeetan alkulimassa

Lisätiedot

Harjoitustyö 1. 1. Johdanto. 2. Euroseteli

Harjoitustyö 1. 1. Johdanto. 2. Euroseteli Harjoitustyö. Johdanto.. Tehtävä Lausekielinen ohjelmointi (Laki) -kurssin ensimmäisessä harjoitustyössä on tehtävänä toteuttaa Java-kielellä ohjelma, joka tutkii euroseteleiden [, ] sarjanumeroja. Ohjelmalla

Lisätiedot

Harjoitustyö Johdanto Tehtävä

Harjoitustyö Johdanto Tehtävä 1. Johdanto 1.1. Tehtävä Lausekielinen ohjelmointi II -kurssin toisena harjoitustyönä toteutetaan Javaohjelma ASCII-grafiikkana [1] esitettyjen kuvien käsittelyyn. Ohjelma lataa käynnistyessään kuvan tekstitiedostosta

Lisätiedot

Harjoitus 6 (viikko 42)

Harjoitus 6 (viikko 42) Nämä ovat kurssin viimeiset harjoitukset. Hyväksytyistä ratkaisuista ja läsnäoloista kerättyjen pisteiden summan tulee olla vähintään 40 % ( pistettä) tehtävien ja läsnäolopisteiden kokonaislukumäärien

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

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

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

Harjoitus 4 (viikko 47)

Harjoitus 4 (viikko 47) Kaikki tämän harjoituksen tehtävät liittyvät joko suoraan tai epäsuorasti kurssin toiseen harjoitustyöhön. Saa hyvän alun harjoitustyön tekoon, kun ratkaiset mahdollisimman monta tehtävää. Mikäli tehtävissä

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

13. Hyvä ohjelmointitapa (osa 1) 13.1

13. Hyvä ohjelmointitapa (osa 1) 13.1 13. Hyvä ohjelmointitapa (osa 1) 13.1 Yleistä Ohjelman elinkaari ei tyypillisesti pääty sen toteuttamiseen tarvitaan ylläpitoa. Jotta koodin muuttaminen on mahdollista, on sen oltava myös muidenkin kuin

Lisätiedot

Harjoitustyö Johdanto Tehtävä

Harjoitustyö Johdanto Tehtävä 1. Johdanto 1.1. Tehtävä Lausekielinen ohjelmointi II -kurssin toisena harjoitustyönä toteutetaan Java- ohjelma ASCII-grafiikkana [1] esitettyjen kuvien katseluun ja käsittelyyn. Ohjelma lataa käynnistyessään

Lisätiedot

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö Yleistä Tehtävä: Tee Javalla StringStats-ohjelma, joka laskee esikäsittelemästään merkkijonosta joitakin tunnuslukuja. Lausekielinen ohjelmointi II

Lisätiedot

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita.

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita. Nämä ovat kurssin viimeiset harjoitukset. Hyväksytyistä ratkaisuista ja läsnäoloista kerättyjen pisteiden summan tulee olla vähintään 40 % ( pistettä) tehtävien ja läsnäolopisteiden kokonaislukumäärien

Lisätiedot

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tentti kestää kolme tuntia. Tehdään sähköisesti mikroluokkien Windows-koneilla.

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tentti kestää kolme tuntia. Tehdään sähköisesti mikroluokkien Windows-koneilla. Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. kestää kolme tuntia. Tule paikalle viimeistään noin 15 minuuttia ennen tentin alkua, koska tentti pyritään aloittamaan tasalta. Poistua voi aikaisintaan,

Lisätiedot

14. Hyvä ohjelmointitapa 14.1

14. Hyvä ohjelmointitapa 14.1 14. Hyvä ohjelmointitapa 14.1 Yleistä Ohjelman elinkaari ei tyypillisesti pääty sen toteuttamiseen; ohjelmaa voidaan käyttää ja ylläpitää jopa vuosikymmeniä. Jotta koodin muuttaminen on mahdollista, sen

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

Harjoitus 5 (viikko 41)

Harjoitus 5 (viikko 41) Harjoitus 5 (viikko 4) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian

Lisätiedot

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

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Harjoitus 6 (viikko 42)

Harjoitus 6 (viikko 42) Nämä ovat kurssin viimeiset harjoitukset. Hyväksytyistä ratkaisuista ja läsnäoloista kerättyjen pisteiden summan tulee olla vähintään 4 % (2 pistettä) tehtävien ja läsnäolopisteiden kokonaislukumäärien

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

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

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tentti kestää kolme tuntia.

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tentti kestää kolme tuntia. Tentti Tentti Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tentti kestää kolme tuntia. Tule paikalle viimeistään noin 20 minuuttia ennen tentin alkua, koska tentti pyritään aloittamaan tasalta.

Lisätiedot

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Sisällys. 11. Rajapinnat. Johdanto. Johdanto Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.

Lisätiedot

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus: Dokumentaatio, osa 1 Tehtävämäärittely Kirjoitetaan lyhyt kuvaus toteutettavasta ohjelmasta. Kuvaus tarkentuu myöhemmin, aluksi dokumentoidaan vain ideat, joiden pohjalta työtä lähdetään tekemään. Kuvaus

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

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

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Ohjelmointitehtävien osalta palautetaan

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

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

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

Harjoitus 3 (viikko 39)

Harjoitus 3 (viikko 39) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä. Ohjelmointitehtävien

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

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

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

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Kurssiesite Lausekielinen ohjelmointi II Syksy Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto

Kurssiesite Lausekielinen ohjelmointi II Syksy Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto Kurssiesite Lausekielinen ohjelmointi II Syksy 2016 Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto Vastuuopettaja Jorma Laurikkala, yliopistonlehtori. Luennot,

Lisätiedot

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät Olio-ohjelmoinnin perusteet (eli Oope) Laajuus

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät Olio-ohjelmoinnin perusteet (eli Oope) Laajuus Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät 2018 Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto Vastuuopettaja Jorma Laurikkala, yliopistonlehtori.

Lisätiedot

Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät 2018

Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät 2018 Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät 2018 Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto Vastuuopettaja Jorma Laurikkala, yliopistonlehtori.

Lisätiedot

Kurssiesite Olio-ohjelmoinnin perusteet Kevät Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto

Kurssiesite Olio-ohjelmoinnin perusteet Kevät Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto Kurssiesite Olio-ohjelmoinnin perusteet Kevät 2016 Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto Vastuuopettaja Jorma Laurikkala, yliopistonlehtori. Luennot,

Lisätiedot

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät Olio-ohjelmoinnin perusteet (TIEA2.1)

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät Olio-ohjelmoinnin perusteet (TIEA2.1) Kurssiesite Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto Vastuuopettaja Jorma Laurikkala, yliopistonlehtori. Luennot,

Lisätiedot

Kurssiesite Olio-ohjelmoinnin perusteet Kevät Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto

Kurssiesite Olio-ohjelmoinnin perusteet Kevät Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto Kurssiesite Olio-ohjelmoinnin perusteet Kevät 2017 Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto Vastuuopettaja Jorma Laurikkala, yliopistonlehtori. Luennot,

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

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

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

Lisätiedot

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

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

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät 2015. Olio-ohjelmoinnin perusteet (5 op) Tavoitteena

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät 2015. Olio-ohjelmoinnin perusteet (5 op) Tavoitteena Kurssiesite Olio-ohjelmoinnin perusteet Kevät 2015 Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto Vastuuopettaja Jorma Laurikkala, yliopistonlehtori. Luennot,

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

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

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

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja

Lisätiedot

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita

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

4. Olio-ohjelmoinista lyhyesti 4.1

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

Lisätiedot

9. Periytyminen Javassa 9.1

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

Lisätiedot

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

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ). Tehtävä 1: Metodit, listat, alkuluvut (4p) Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ). Alkuluvut ovat lukuja, jotka ovat suurempia kuin yksi ja jotka ovat jaollisia

Lisätiedot

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi. 17. Kooste 17.1 Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa A on B:n osa tai A kuuluu B:hen. Koostesuhteessa olevat luokat eivät yleensä ole periytymissuhteessa. Kooste

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

Harjoitustyö Johdanto Tehtävä

Harjoitustyö Johdanto Tehtävä 1. Johdanto 1.1. Tehtävä Lausekielinen ohjelmointi (Laki) -kurssin toisena harjoitustyönä ohjelmoidaan Java-kielellä 2048-pelin [1, 2] tekstipohjainen muunnelma. Pelissä on kenttä, jolla liikutellaan tiiliä

Lisätiedot

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

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

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

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

Lisätiedot

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

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2 8. Periytyminen 8.1 Sisällys Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2 Mitä on periytyminen? Periytyminen (inheritance) tarkoittaa luokan piirteiden

Lisätiedot

Mitä on periytyminen?

Mitä on periytyminen? 8. Periytyminen 8.1 Sisällys Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Filosofinen ja käytännönläheinen näkökulma periytymiseen. Periytymisen soveltaminen. 8.2 Mitä

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Hyvä ohjelmointitapa. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen

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 perusteet Y Python

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

Lisätiedot

Luento 4. Timo Savola. 21. huhtikuuta 2006

Luento 4. Timo Savola. 21. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 4 Timo Savola 21. huhtikuuta 2006 Osa I Shell Lausekkeet Komentoriville kirjotettu komento on lauseke echo "foo" echo $USER MUUTTUJA=1 ls -l Rivinvaihto

Lisätiedot

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaihe 3. Antti Jääskeläinen Matti Vuori

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaihe 3. Antti Jääskeläinen Matti Vuori TIE-21204 Ohjelmistojen testaus 2015 Harjoitustyö Vaihe 3 Antti Jääskeläinen Matti Vuori Rakenne ja aikataulu Kolme vaihetta: 1. Tutkivan järjestelmätestauksen suunnittelu 2. Tutkivan järjestelmätestauksen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 18.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 18.3.2009 1 / 51 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

Lisätiedot

Oliot viestivät metodeja kutsuen

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

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

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

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

Harjoitus 1 (viikko 44)

Harjoitus 1 (viikko 44) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän

Lisätiedot