Helsingin yliopisto
/ tietojenkäsittelytieteen laitos
/ Ohjelmointitekniikka (Scala)
/ © Arto Wikla 2014
Ohjelmointitekniikka (Scala): koealue ja vihjeitä
Muutettu viimeksi 24.4.2014
/
Sivu luotu
16.4.2014
/
[Scala]
Mahdollisesti hyödyllistä materiaalia:
Koealue:
Koekysymykset perustuvat luentoihin,
kurssin verkkomateriaaliin ja
harjoituksiin.
Seuraavassa viitteet lukuihin tarkoittavat nimenomaan
verkkomateriaalin lukuja, eivät oppikirjan lukuja.
Numerointi on sama kuin oppikirjassa, mutta sisällöt poikkeavat
toisistaan jonkin verran.
- Luku 1 ei ole kokeen kannalta kaikkein keskeisintä sisältöä.
Siellä on taustaa, käytännön neuvoja ja ihan alkeita sekä toisaalta
aika pitkällekin meneviä esimerkkejä.
- Luvuissa 2 ja 3 on kaikenlaista pikku sälää, jota voi kokeessakin
tarvita. Listaoperaatioiden listaa ei kannata opetella ulkoa. ;)
- Luvut 4 ja 5 ovat keskeistä peruskalustoa.
Operaattoripresedenssiluetteloa ei kannata opetella ulkoa. ;)
- Luvun 6 idea immutaabeleista olioista on keskeistä Scala-tekniikkaa.
- Luvussa 7 täsmennetään rakenteisten lauseiden toimintaa ja merkitystä.
Myös for-rakenteen suodatus-generointi ja yield-arvojonot
ovat keskeistä Scala-tekniikkaa. Lohkorakenteena toteutettu
nimiavaruuksien sisäkkäisyys on keskeistä Scala-tekniikkaa.
- Luku 8 on keskeistä Scala-tekniikkaa: paikalliset funktiot,
first-class-arvot, paikanpitäjäparametrit, osittain
sovelletut funktiot, sulkeuma, evaluointiaika, parametrien
erikoiskäsittelyt.
Alun esimerkin tiedostonkäsittelyluokkia ei kannata opetella ulkoa.
- Luvun 9 esittelemä Curry-muunnos on syytä ymmärtää. Samoin
sen käyttö omien kontrollirakenteiden tekemisessä.
Kohta "Tyypitettyjä Lambda-lausekkeita Scalalla"
ei kuulu koealueeseen.
- Luvussa 10 esitetyt tekniikat ovat keskeisiä:
periytyminen, abstraktit luokat, super, override,
polymorfismi.
- Luvun 11 luokkahierarkian ideat on syytä osata selittää:
Mitä ja miksi ovat Any, AnyVal ja AnyRef. Entä Nothing ja
Null. Nothing-AnyVal-knoppologiaa ei kysytä.
- Luku 12 on keskeistä Scala-tekniikkaa. Erityisesti
rajapintojen ohuus-rikkaus-ideat on syytä ymmärtää.
Pinoutuvat muunnokset on syytä myös osata.
Mutta moniperinnästä ja timanteista ei kysytä.
Linearisoinnin hienoudet(?) eivät
kuulu koealueeseen. Kyse on siis siitä, että kokeessa ei vastaan
tule tilannetta, jossa liitetyillä piirretyypeillä olisi
huomioon otettavia yhteisiä yliluokkia.
- Luku 13 ei kuulu kurssiin.
- Luvun 17 "iteroitavat ja iteraattorit"
on syytä ymmärtää ja osata.
- Luvun 19 itse ohjelmoidusta tyyppiparametroinnista ei kysytä mitään.
- Luvun 20 abstrakteista jäsenistä ei kysellä mitään.
Laiskasti eveluoitavista val-kentistä voidaan kyselläkin.
- Luku 30 ei kuulu kurssiin.
- Luvun 32 GUI-asioista ei tule kysymyksiä.
Kokeen luonteesta:
- Yksi kysymys voidaan paljastaa jo ennakolta:
- Oletko jo vastannut kurssikyselyyn tai lupaatko varmasti vastata
kurssikyselyyn pikimmiten? Kurssipalautelomake löytyy laitoksen opiskelusivun
laatikosta "Linkkejä" linkistä "Kurssipalaute".
Tämäkin kohta arvostellaan ihan oikeasti!
Oikeita vastauksia ovat vain myönteiset:
"Olen jo vastannut", "Lupaan varmasti viimeistään huomenna vastata", jne.
Rehellisyyttä toivotaan!
Rehellisyysprosentteja julkistetaan kurssin pääsivulla.
(1 piste)
- Kokeessa asioiden ymmärryksen ja taitamisen tasoksi riittää
kurssimateriaalin ja luentojen taso. Kuten on nähty, Scala
on vahva kieli ja samat asiat voidaan tehdä hyvin monella
tavalla.
- Jippoiluja ja tahallista harhaanjohtamista
yritetään välttää koetehtävissä. Niitä on oman edun vuoksi järkevää
välttää myös koevastauksissa...
- Luultavasti tehtävätyypit ovat (mm./ainakin) seuraavanlaisia:
- Selitä lyhesti XXXX ja anna myös valaisevia ohjelmaesimerkkejä.
(XXXX on jokin Scalan käsite tai tekniikka)
- Mitä seuraava tulostaa: XXXX? Miksi?
Mistä tekniikasta on kysymys? Miten kaikki oikein käy?
Pelkästä tulostuksesta ei saa pisteitä, mutta myös ilman oikeaa
tulostusta pisteet ovat tiukassa.
(XXXX on ohjelmanpätkä)
- Selitä XXXX, anna pieniä esimerkkejä ja perustele
XXXX:n hyödyllisyys(tms.)
(XXXX on jokin ohjelma-arkkitehtuurin väline kuten
funktioparametri, sulkeuma, luokka, abstrakti luokka,
piirretyyppi, iteraattori, ...)
- klassinen essee
- ...
- [Laadi ohjelma, joka XXXX.
(XXXX on ohjelman "spesifikaatio")
[Tämä tehtävätyyppi on tarkastamisen kannalta ongelmallinen!]]
- Luultavasti kokeessa on hyvin vähän varsinaista itsenäistä
ja laajempaa ohjelmointia.
- Luultavasti kokeen ohjelmanpätkissä - annetuissa tai pyydetyissä -
on kyse kurssimateriaalin tai harjoitusten ohjelmien muunnelmista.
Hyvää tarkoittavia neuvoja:
- Kannattaa muistaa, mistä kokeessa oikeastaan on kysymys ja mistä ei:
Koevastaus on teksti, jolla tarkastaja saadaan
uskomaan - tai edes luulemaan - että vastaaja osaa asiat.
Ajattele koetilanteessa tarkastajan psykologiaa,
älä omaa intoasi tai ahdistustasi!
Koe on kuin esitys, jonka vastaanottaja on tarkastaja.
- On järkevää vastata ensin niihin kysymyksiin, jotka osaa.
Sitten voi yrittää sitten niitä toisia ...
- On järkevää käyttää kuvaavia tunnuksia ja kirjoittaa hyvin selkeätä
ohjelmatekstiä! Silloin tarkastaja saattaa ymmärtää, mitä hivenen
virheelliselläkin ratkaisulla on ajattu takaa.