Helsingin yliopisto / tietojenkäsittelytieteen laitos / Ohjelmointitekniikka (Scala) / © Arto Wikla 2012

Ohjelmointitekniikka (Scala): kurssikoe 28.2.2012

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, opiskelijanumerosi ja myös allekirjoituksesi.
  1. Selitä lyhyesti mutta täsmällisesti:

    1. pääkonstruktori ja sen parametrien merkitys
    2. oliokumppani (companion object) ja sen tyypillinen käyttö
    3. paikanpitäjäparametri (placeholder)
    4. määre abstract override
    5. vapaa ja sidottu muuttuja
                                                                                                 (15 pistettä)
    

  2. Mitä ovat ohuet (thin) ja rikkaat (rich) rajapinnat? Millä tavoin piirreluokat liittyvät asiaan? Anna esimerkkejä ohjalmahahmotelmina ja käytä selityksen esimerkkeinä myös piirreluokkia Ordered, Iterable ja Iterator.
                                                                                                 (10 pistettä)
    

  3. Mitä seuraava tulostaa:
    val lista = for (i <- 1 to 5; j <- i to 5; if (i+j)%2 == 0) yield(i+j)
    lista.foreach(println)
    
    Miksi? Miten kaikki oikein käy? Mistä tekniikasta ensimmäisellä rivillä on kysymys? Selitä tämä tekniikka ja sen käyttö. Pelkästä tulostuksesta ei saa pisteitä, mutta myös ilman oikeaa tulostusta pisteet ovat tiukassa.
                                                                                                 (10 pistettä)
    

  4. Mitä seuraava tulostaa:
    val l = List(9,8,7,6,5)
    val m = Array(5,4,3,2,1)
    var b = 0
    l.foreach(x => {m(b)*=x; b+=1})
    m.foreach(println)
    
    Miksi? Miten kaikki oikein käy? Mistä tekniikasta on kysymys neljännellä rivillä? Selitä tämä tekniikka ja sen käyttö. Pelkästä tulostuksesta ei saa pisteitä, mutta myös ilman oikeaa tulostusta pisteet ovat tiukassa.
                                                                                                 (10 pistettä)