torstaina, joulukuuta 11, 2003

Tenttikysymyksiä tarjolla


Kesällä tulin välillä kirjoitelleeksi tänne kesäyliopiston tenttikysymyksiä. Jatketaan samoilla linjoilla. Tänään pidettiin Tampereen avoimen yliopiston tentti Java-ohjelmoinnin perusteista. Ajattelin tuoda tehtävät tännekin tiedoksi, jos siitä jollekulle on iloa.

Ensimmäinen tehtävä oli tyypiltään kirjallinen, jossa piti tutkia muuatta luokkaa ja kolmea siitä periytyvää aliluokkaa ja selvittää, mitä aliluokan metodit tulostivat ruudulle. Tehtävässä ei saanut käyttää tietokonetta. Tehtäväpaperi piti palauttaa, joten tehtävää on tässä mahdoton kuvata tämän tarkemmin.

Varsinaisia tietokoneella tehtäviä ohjelmointitehtäviä oli kolme:

Tehtävä 2
Toteuta heterogeeninen linkitetty lista, jolla on seuraavat metodit:
- public Object[] palautaJokaToinen() - Palauttaa joka toisen alkion Object-tyyppisessä taulukossa
- public void lisaa(Object[] alkiot) - Lisää saamansa oliotaulukon linkitetyn listan perään.
Huomioi mahdolliset virhetilanteet. Toteuta myös listan käyttämä Alkio-luokka.


Tehtävä 3
Eräs viljavarastotyyppi muodostuu kahdesta viljasiilosta. Vain ensimmäinen siilo on varustettu lastauslaittein. Viljaa voidaan siirtää siilosta toiseen. Laadi luokka Viljavarasto viljavaraston toteutukseksi.
- public Viljavarasto(double ekaSiilo, double tokaSiilo) luo viljavaraston, jonka siilojen vetoisuus annetaan parametreina; siilot ovat aluksi tyhjiä
- public double ekassaOn() palauttaa ensimmäisen siilon viljamäärän
- public double tokassaOn() palauttaa toisen siilon viljamäärän
- public boolean siirraViljaa(double maara, boolean ekasta) siirtää parametrin verran viljaa siilosta toiseen. Jos jälkimmäinen parametri on true, siirretään ensimmäisestä siilosta toiseen, muuten päinvastoin. Jos koko määrää ei voida siirtää, ei siirretä mitään. Metodi palauttaa arvon true, jos siirto onnistui, false jos ei onnistunut.
- public boolean lisaaViljaa(double maara) lisää viljaa ensimmäiseen siiloon. Jos yritetään lisätä enemmän kuin mahtuu, viljamäärää ei muuteta. Metodi palauttaa arvon true, jos lisäys onnistui, muuten false.
- public double otaViljaa(double maara) ottaa viljaa ensimmäisestä siilosta. Jos pyydetään enemmän kuin siilossa on, saadaan vain mitä on.
- public String toString() palauttaa arvonaan selkeän merkkijonoesityksen viljavaraston tilasta.


Tehtävä 4
Tee kaksi rajapintaa, Liikkuva ja Bensakayttoinen. Liikkuva-rajapinnassa on määritelty metodit public voin kaynnista() ja public void pysahdy(). Bensakayttoinen-rajapinnassa on yksi metodi public double bensamaara().
Tee luokka Kulkuneuvo, joka toteuttaa rajapinnan Liikkuva. Kulkuneuvo-luokalla on tietojäsenenä private String merkki. Tietojäsen alustetaan luokan rakentimessa. Kulkuneuvo-luokalla on tietojäsentä varten metodit, joilla tietojäsenen arvoi voi muutella: public void setMerkki (String m) ja public String getMerkki(). kaynnista()- ja pysayta()-metodit tulostavat näytölle tiedon siitä, että kulkuneuvo on käynnistynyt tai pysähtynyt.
Tee luokka Auto, joka periytyy Kulkuneuvosta ja toteuttaa rajapinnan Bensakäyttöinen. Auton rakennin saa parametrina bensamäärän ja autonmerkin, jotka tallennetaan asianmukaisiin tietojäseniin. Autolla on public void kaynnista()-metodi, joka ylikirjoittaa Kulkuneuvossa määritellyn metodin. Kyseinen metodi tulostaa virheilmoituksen, jos bensamäärä on 0 tai alle. Muussa tapauksessa metodi kutsuu yliluokan käynnistä()-metodia. Bensamäärää vähennetään yhdellä käynnistyksen yhteydessä.


Yllä kuvatut tehtävät ovat varmasti lapsellisen helppoja ohjelmoinnin osaajille. Minulla niiden kanssa meni koko kolmetuntinen varsin tarkkaan. Tällainen yksinkertainen kansanmies piti kovasti tehtävien 3 ja 4 muotoiluista, joissa tehtävä oli puettu mielekkäiden konkreettisten asioiden asuun.

Tentti ei mennyt omalta osaltani hyvin. Esimerkiksi viljasiilot tuli rakennettua vääränlaiselle maaperälle. Olisi pitänyt lukea tehtävä kunnolla myös sen osalta, mitä luokan rakentimelle oikeastaan pitikään parametreina välittää. Metodeistakin olisi voinut siten tulla mielekkäämpiä. Kun tavailin tehtävää uudestaan tätä kirjoittaessani, alkoi oma pässinpäisyys harmittaa. Mutta tätähän nyt sattuu. Tammikuussa on uusinta. Harjoitustyö pienestä linkitetystä listasta oli sentään hyväksytty, vaikka virheenkäsittelyssä olikin puutteita.

Java-kielen käyttöä tietokoneohjelmoinnin perusteiden opetuskielenä perustellaan monen muun asian lisäksi joskus sillä, että Javassa ei tarvita "ylimääräistä tauhkaa" (mitähän oikeastaan tarkoittaa ohjelmoijien suosima tauhka-sana?) asioiden aikaansaamiseksi. Vertailukohtia itselläni ei juuri ole, mutta kyllä minusta ainakin käyttäjän antaman komentorivisyötteen lukeminen on Javassa jo melko hankala asia. Tätä varten oppimateriaaleissakin tarjotaan valmiita luokkia syötteen ottoon, mutta eikö se, että syötteen lukemisen kaltaisen perusasian kanssa on meneteltävä näin, kerro että kieli ei olekaan niin "puhdas"?

Jätetään näiden pohdinta viisaammille. Oma tätä ennen harjoittamani vähäinen tietokoneohjelmoinnin alkeiden opiskelu on tapahtunut APL- ja Modula2-nimisillä kielillä. Ensinmainittu on käytännössä melko suppeaa tarkoitusta palveleva kieli ja jälkimmäinen taas kuulemma Pascalin pohjalta nimenomaan opetuskäyttöön väsätty kieli. Siinä ei muistaakseni mitään erityisiä kommervenkkeja alkeistasolla tarvittu, mutta kielen käyttökelpoisuus koulumaailman ulkopuolella oli varmaan toinen juttu.

Hieman pehmeämpiä asioita


Tekstin alkupuolen nörttiasioiden ohella vähän jotain muutakin. Tampereelta tuli mukaan otettua taas ilmainen opiskelijalehti Aviisi, jossa mainittiin weblogitkin, kuten ainakin Tommi Perkola on jo maininnut. Kyseessä oli lähinnä genren kotimaisen uranuurtajan haastattelu. Olisi ollut mukava lukea tuon printtimedian näkemyksiä muistakin tämän kulttuurin tuotoksista (ja vielä kun ymmärtääkseni näissä piireissä pyörii monia muitakin Kalevankankaan kasvatteja), mutta toki pioneerit ansaitsevat aina kunniansa.

Opintotukiasioita ja opiskelijoiden kannalta ei niin mieluisia opetusministeriön työryhmän ja selvitysmiehen raportteja käsittelevässä jutussa kiinnitti huomiotani yksi sivuseikka. Opiskeluaikoja tiukentavien suunnitelmien mahdollisesti toteutuessa varoiteltiin opiskelijoita "sortumasta" sellaisiin asioihin kuin ansiotyö tai parisuhde.

Opiskelijan ansiotyö ei ymmärtääkseni (ja oman kieltämättä erilaiseen tilanteeseen aikanaan sidotun kokemukseni mukaan) ole aivan binäärisen yksinkertainen asia. Jos tiiviiden opiskelukuukausien aikana ei töihin ehtisikään, ei kai mikään estä hankkimasta lisätuloja ja siinä samalla mitä arvokkainta työkokemusta kesä- ja muina loma-aikoina? Vaikka samaisessa lehdessä selostettiinkin syys- ja kevätlukukausien aikataulujen tehostamista jakamalla lukukaudet kahteen periodiin, jää ainakin kesä aikaa vaikkapa työnteolle. Aivan pelkkien tukien tai lainan armoille ei opiskelijoita olla sysäämässä.

Mitä tulee parisuhteeseen opiskeluaikana, rohkenisin olla sitä mieltä että moinen instituutio ei välttämättä vie aikaa ja energiaa opiskelulta vaan päinvastoin voi merkittävästi lisätä sitä. Tämä on hieman kärjistäen sanottu, mutta turvallisesti oman kullan kanssa elellessä nuoren viriilin ihmisen aikaa säästyy monenlaiseen, kun ei tarvitse ehtimiseen miettiä, miten onnistuisi täyttämään ihmiselle niin ominaisen kaipauksen toisen lähelle. Parisuhde säästänee myös liian rankalta bile-elämältä.

Ehdin jo ihmetellä äkkiä kasvanutta töherrysteni lukijamäärää, mutta taidankin olla vain lumepamausten muodossa blogisotien tykinruokaa.

Ei kommentteja: