Olio-ohjelmoinnin perusteet (5 op), 2016

Päivitetty 19.2.2016 Jorma Boberg

Ohjelmoinnin oppimisen yhteydessä 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 opintoviikkoina ja sen kesto, niin voimme arvioida, että opiskelijan tulisi käyttää tämän opintojakson opiskeluun keskimäärin n. 14 tuntia viikossa 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ä em. tuntimäärä vaihtelee hyvinkin paljon riippuen opiskelijasta.  

Huomaa jälleen, että käsitteet ovat hyvin tärkeitä. Ne tarkoittavat tarkasti määriteltyä asiaa tai ominaisuutta. 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. Ohjelmasi sisältää usein syntaktisia virheitä ja myös loogisia virheitä. Tämä sivun loppupuolella on linkki Java-kääntäjän antamien tyypillisten syntaktisten virheilmoitusten suomennoksiin ja seuraavassa puhutaan yleisesti ohjelman testauksesta ja virheiden jäljittämisestä


Huom. Kurssista saa suoritusmerkinnän kun sekä tentti että Tietokonetyö on hyväksytty. 


Kurssiin liittyvät tärkeät linkit:

Kurssilla ei  ole opintomonistetta, vaan opiskeluopas on kurssin päämateriaali.

Näillä sivuilla olevaa materiaalia voi käyttää omilla kursseillaan, kunhan ilmoittaa lähteen omissa materiaaleissaan. Myös tätä sivua voi jakaa opiskelijoille.

Opiskeluopas   pdf  ja   kansisivu.  Opas on tarkoitettu henkilökohtaiseen käyttöön tällä opintojaksolla. Tulosta aina pdf ja 2-puolisesti. Oppaasen tehdyt korjaukset ovat Moodlessa OOP-foorumilla.  Lisäksi kurssilla käsitellään liitteet: Liite 1 ja Liite 2. Liitteet eivät noudata opiskeluoppaan mukaista luokkien tietokenttien ryhmittely- ja kommentointitapaa, joten älä ota niistä mallia näissä asioissa. Liitteessä 2 on virheitä:
1) s. 115 keskellä sanotaan ... joukko funktioita(=metodeja) ..., muuta tämä muotoon:  ... joukko metodeja ... 
2) s. 125 puhutaan metodista merkkijonoksi vaikka sen nimi luokassa on mjonoksi.
3) s. 126 metodin aseta viimeisessä ehdossa on  uusiX <= maxY, mutta siinä pitää olla uusiY <=maxY.

Jos opiskeluoppaasta löytyy virheitä, niin tiedotan niistä moodlessa OOP-foorumilla. Jos sinusta tuntuu siltä, että oppaassa on virhe/epätarkkuus, niin kerrothan siitä Jormalle.

Javan luokkakirjastojen (API) kuvaukset ovat koneessasi hakemistossa docs, jos olet installoinut myös dokumentoinnin ohjeiden mukaan. Ne ovat myös verkossa. Luokkakirjastojen toteutukset (koodit) löytyvät koneeltasi jdk-hakemistosta ja ne ovat tiedostossa src.zip ja täällä. Niitä on hyödyllistä tutkia.

Seuraavassa luettelossa ovat kurssin lisämateriaalit. Suluissa kerrotaan vaaditaanko asia tentissä. Merkintä * tarkoittaa, että tätä asiaa ei ole kurssin materiaaleissa (=opiskeluopas ja sen liitteet sekä harjoitustehtävien malliratkaisut).  Muut ovat lisäesimerkkejä eivätkä sisällä uusia asioita, vaan havainnollistavat samoja asioita, joita on kurssin materiaaleissa. Huomaa kuitenkin, että niistä on opiskelussa apua ja jotain saman tyyppistä voi esiintyä myös tenttitehtävissä, joskin useimmat alla olevista esimerkeistä ovat liian laajoja tentissä kysyttäväksi.

Koko kurssi: Seija Lahtisen (Helia) ohjeet luokan Scanner käytöstä* (vaaditaan). Materiaalissa on pieni virhe sivuilla 2 ja 3 kohdassa 2). Nimittäin syöttöpuskurin seuraava yhtenäinen merkkien jono (tokeni, joka siis päättyy white-space -merkkiin) pitää edustaa joko int-lukua (sivulla 2) tai double-lukua (sivulla 3). Esim. puskurissa ei saa olla esim. 5x, vaan numeron 5 jälkeen tulee olla white-space -merkki (esim. välilyönti tai enter).
Viikot 5-: Lottoarvonta (Sami Pyöttiälä) käyttäen rakennetta ArrayList<Pallo>. Tässä määritellään luokat Pallo ja Pallokone ja varsinaisen arvonnan suorittaa luokka Lottoarvonta.
Viikko 11: Esimerkki graafisesta käyttöliittymästä* (GUI) (Sami Pyöttiälä). Ohjelmassa luodaan varustelista.
Lueteltu tyyppi enum*: linkki 1 ja linkki2. Jälkimmäisessä annetaan esimerkki siitä, miten kortit voidaan toteuttaa selväkielisesti käyttäen lueteltua tyyppiä enum. Usein se kirjoitetaan sisäluokaksi toisen luokan sisälle kuten korttiesimerkissä. Tällöin se on käytettävissä vain siinä luokassa, jonka sisällä tämä tyyppi on esitelty. Lueteltua tyyppiä voisi halutessaan käyttää pokeripeliä mallintavassa Tietokonetyössä ja sehän myös selkeyttäisi ohjelmakoodia.
Tekstitiedostoon kirjoittaminen ja sieltä lukeminen*: luokka Pankkitili. Tämä on sama rakenne kuin opiskeluoppaan luokka Tili, mutta nyt voidaan lukea tiedot tekstitiedostosta ja kirjoittaa ne sinne takaisin. Tiedot erotetaan toisistaan pilkuilla. Tämähän on käytännössä tärkeä asia. Lisäksi mukana on poikkeuksien käsittely. Tässä on muutama sivu alla mainitusta kirjasta (suppea mutta hyvä esitys). Lisää tiedostoista löytyy esim. täältä (myös olioiden kirjoittamisesta levylle eli sarjallistaminen).

Koko kurssi: UML ja Java*




Harjoitustehtävien malliratkaisuisut ovat laajoja ja niissä esitetyt asiat tulee myös osata, ellei toisin mainita.


Luentopäivä on 5.3.2016 klo 10:15 - n. 14:30 ja sen pitää Jorma Boberg. Päivän sisältö on kuvattu opiskeluoppaassa ja sen  materiaali on tässä. Saat tästä  paperiversion, mutta tutustu siihen etukäteen. Materiaali sisältää paljon opiskeluoppaan asioita, mutta ne ovat esitetty tässä kootusti ja hiukan eri järjestyksessä. Materiaalissa olevat Tehtävät tarkoittavat opiskeluoppaan tehtäviä, jotka ovat opiskeluoppaassa luentopäivän tekstiosuuden lopussa. Tärkeässä asemassa luentopäivällä on opiskeluoppaassa oleva pankkisovellus ja pankkia tileineen havainnollistava piirros, jonka teemme yhdessä taululle.
Luentopäivä pidetään ICT-talossa  (nykyään nimeltään ICT-City) salissa beta (b) Joukahaisenkatu 3-5 eli sama paikka missä pidettiin jakson TTP I ja AOP luentopäivät. Katso talon sijainti oheisesta kartasta (nuoli osoittaa sisäänkäynnin). Sali beta on samassa kerroksessa kuin aula ja salin sijainti löytyy aulan kartoista. Tässä on Turun kartta. Ulko-ovi on kiinni, mutta se tullaan avaamaan n. klo 10:13.  Tule ajoissa, koska 10:15 jälkeen ovi on kiinni.  Pidän kännykkäni (0452770593) auki, joten soita jos myöhästyt (joka ei tietenkään ole hyvä :) 

 

Tentistä  Ks. myös tenttivaatimukset pääsivulla olevasta linkistä.

 

Tietokonetyö 

 

Harjoitustehtävien malliratkaisut: Tulevat moodleen. Jokaisen tulee kopioida niistä luokat omalle koneelleen ja tutkia/muuttaa/suorittaa ohjelmia. Näin ollen pelkät paperilla olevat ratkaisut eivät riitä.

 Luokka OmaIO.java Kopioi (paina hiiren oikeata korvaa eo. linkin kohdalla) luokka OmaIO.java samaan hakemistoon, jossa säilytät Java-ohjelmiasi. Käännä se, jolloin muodostuu tiedosto OmaIO.class. Sen jälkeen saat käyttöösi alla kuvatut syöttö/tulostusmetodit. Luokan OmaIO sijasta voit tietenkin käyttää myös Javan valmisluokkaa Scanner (katso opiskeluopas). 

Javan kopiointi- ja asennusohjeet sekä Java-ohjelmien kehitysympäristöjä

 

Muita hyödyllisiä linkkejä:

Alla on joitakin hyviä linkkejä, joista voi olla apua opiskelussa.

Kirja: Simo Silander, Vesa Ollikainen, Juha Peltomäki: Java, ISBN: 978-951-0-36081-1. Julkaistu: 03/2010, Sivuja: 498. Kirjan painos on loppu, mutta sitä voi löytyä kirjastoista. Kirja on aika hyvä, joskin kaikki asiat käsitellään lyhyesti ja pintapuolisesti verrattuna esim. meidän kurssimateriaaleihin. Näin ollen tämä kirja ei pelkästään riitä. Kirja on kuitenkin laaja ja se sisältää myös paljon tällä kurssilla ja myös kurssilla Olio-ohjelmoinnin perusteet käsittelemättömiä mutta tärkeitä asioita, mm. appletit ja grafiikkaohjelmointi, säikeet, Swing, servletit ja JSP, JDBC. Tätä voi käyttää sekä jaksolla AOP että OOP.

Arto Wikla: Ohjelmoinnin perusteet Java-kielellä, 2012 Helsingin yliopiston Java-kurssin kirja. Sen käyttö on sallittu vain yksityishenkilöille opiskelutarkoituksissa. Sisältää sekä jakson AOP että OOP asioita. Kannattaa tutustua! Mukana on myös tiedostojen käsittely.

Helsingin yliopiston Ohjelmoinnin jatkokurssi 2013. Vastaa osittain jaksoa OOP, mutta menee sen yli. 

Helsingin yliopiston Ohjelmoinnin jatkokurssi 2014 Vastaa osittain jaksoa OOP, mutta menee sen yli. 

Helsingin yliopiston ohjelmoinnin kurssit 2015. Vastaa jaksoja AOP ja OOP. Valitse viikko ja kysyttäessä TMC-tunnusta, klikkaa vain Ok. Kannattaa tutustua!

Helsingin teknillisen korkeakoulun Ohjelmoinnin peruskurssin sivut. Katso linkki Luennot. Vastaa lähinnä jaksoa OOP.

Kirjan Lewis and Loftus: Java Software Solutions sivuilta löytyy kirjan pohjalta tehdyt kalvot ja paljon hyviä esimerkkejä. Kannattaa tutustua, jos englannin kieli on kutakuinkin hallinnassa.

Java kääntäjä tuottaa usein aikamoisen määrän syntaksivirheitä, jotka vielä kumuloituvat. Niinpä sinun kannattaa korjata kääntäjän antamasta virhelistasta muutama alkupään virhe ja kääntää ohjelma uudestaan. Kääntäjä antaa sen rivinumeron (laita editorissa rivinumerot näkyviin), jolla virhe sijaitsee ja kertoo mikä virhe ko. kohdassa on. Aluksi virheilmoituksia ei tahdo ymmärtää, joten seuraavan linkin takana on 'suomennettu' Java-virheilmoitusopas aloittelijoille, joka on taatusti hyödyllinen.

Oraclen omilla sivuilla on melko hyvä tutorial, jossa esitetään Javan perusteet.