Kurssikokeen arvosteluperusteet
Yleistä:
Tehtäviä tarkistettiin periaattella ”Toimiiko ohjelma tehtävänannon mukaisesti?”. Koodin ulkoasulla ei siis tämän periaatteen puitteissa ollut merkitystä. Myöskään virheitä, jotka eivät merkittävästi muuttaneet ohjelman toimintaa, ei huomioitu. Kaikkia virhetapauksia on lähes mahdoton eritellä, mutta alla kuitenkin nähtävillä arvosteluperusteet pääpiirteittäin sekä yleisimmät havaitut virheet. Tarkempia arvosteluperusteita voit tiedustella tehtävän tarkastajilta sähköpostitse.
-
Tehtävä: Jarmo Isotalo (jarmo.isotalo@cs.helsinki.fi)
-
Tehtävä: Lauri Pulkkinen (lauri.pulkkinen@helsinki.fi)
-
Tehtävä: Ville Tenhunen (ville.p.tenhunen@helsinki.fi)
1. Tehtävä:
Tehtävässä jaettiin pisteitä 1p / käsite. Vastauksia verrattiin kurssimateriaalin tarjoamiin esityksiin vastaavista käsitteistä. Arvostelussa alakohdat pisteytettiin neljännesosa pistein (0, 0.25, 0.5, 0.75, 1) . Yhteispisteet pyöristettiin lopuksi normaalien pyöristyssääntöjen mukaan. Esimerkeillä havainnollistaminen luettiin eduksi, varsinkin osittain puutteellisissa vastauksissa.
2. Tehtävä (12p)
12p:n kokonaisuus jaettiin karkeasti kahteen osaan:
- Tiedoston lukeminen ja käsittely 6p
- Try-Catch -rakenne (tai throws Exception) 2p
- Tiedoston sisällön käsittely 4p
- Yleisimpiä virheitä:
- Try-Catch -rakenteen puuttuminen. Reilu enemmistö jätti tämän huomiotta. Vaikka tehtävänannossa ei annettu vihjeitä tiedostovirheiden käsittelyyn, on try-catch rakenne erittäin oleellinen toimenpide tiedostoja käsiteltäessä.
- Tiedoston seuraavaa sanaa ei otettu muuttujaan talteen, jolloin vastauksissa toisinaan jäi sanoja lisäämättä HashMappiin/ArrayListiin. (Esim: if (!lista.contains(lukija.nextLine()) -> lista.add(lukija.nextLine()); tässä esimerkissä molemmissa lukija.nextLine()-kutsuissa otetaan käyttöön lukijan seuraava sana. Eli ts. hypätään yhden sanan yli, koska kutsuja tehdään 2.
- HashMapista/ArrayLististä yleisimmän sanan ja sen lukumäärän löytäminen 6p
- Yleisin sana 3p
- Yleisimmän sanan lukumäärä 3p
- Yleisimpiä virheitä:
- HashMappia yritettiin käydä läpi kutsumatta valueSet()- / keySet()-metodeita.
- Suurimman lukumäärän löydyttyä, yritettiin sitä vastaavaa sanaa (key) kutsua erilaisilla itsekeksityillä metodeilla. Key-arvoa ei hashmapissa pysty kutsumaan suoraan value-arvon avulla.
- HashMap yritettiin järjestää Collections-luokan avulla (vain key- ja valueSetin pystyy järjestämään.)
Molempia “puolikkaita” pyrittiin tarkastamaan omana kokonaisuutenaan, joten jos esim. tiedostonkäsittelyssä ilmeni virheitä, ei niitä huomioitu yleisimmän sanan etsintä-algoritmissa.
3. Tehtävä (12):
Tehtävä on pisteytetty luokkakohtaisesti tehtävänannon mukaan, eli
- kohdasta 1p
- Viemari-luokassa pisteen sai, kun toteutti luokan jättäen lisaaVirtausta-metodin toteutuksen tyhjäksi. Jos kyseinen metodi oli toteutettu, niin pisteen sai, jos viemärin sisältö säilyi tehtävänannon kuvan mielessä loogisena 'loppusijoituspaikkana', eli esimerkkikoodin tapauksessa viemariin tulee sisällöksi 3123,45. Jos luokassa oli muuta virheitä tuottavaa koodia ei pistettä saanut.
- Virheitä tässä luokassa tuli lähinnä siitä, että kyseinen metodi oli toteutettu ja toteutettu niin, että parametrina saatu virtaus asetettiin attribuutin arvoksi, jolloin viemarin sisälloksi tulee viimeisimmän metodikutsun mukainen arvo.
- kohdasta 3p
- Putki-luokassa (ja muissakin luokissa) virheitä tuli muun muassa siitä, että konstruktorin parametrina ei käytetty PutkistonOsa rajapintaa vaan esimerkiksi rajapinnan toteuttavaa luokkaa.
- kohdasta 4p
- Mittari-luokassa virheitä tuli muun muassa siitä, kuinka perittyyn luokkaan viitataan, ja mitä perityn luokan attribuutteja ja metodeja on käytettävissä. Muistuksena: Jos perityssä luokassa metodin tai attribuutin näkyvyysmääre on private, ei siihen pääse suoraan käsiksi aliluokasta. Tyypillinen virhe oli myös se, että uudelleen toteutetusta lisaaVirtausta-metodista ei huomattu summata parametrina saatua virtausta aiemman virtauksen lisäksi, vaan korvattiin virtaus uudella arvolla, jolloin mittari näyttää vain viimeisimmän metodikutsun virtauksen mittarin arvona. Myös se jäi välillä huomaamatta, että jos aliluokassa uudelleentoteutetaan yliluokan metodi, ja halutaan kuitenkin säilyttää myös yliluokassa tehdyn ko metodin toiminnallisuus, täytyy yliluokan vastaavaa metodia kutsua tässä uudessa toteutuksessa.
- kohdasta 4p
- Haarauma-luokassa eniten virheitä tuli siitä, että konstruktorin parametriksi määriteltiin ArrrayList-tyyppinen muuttuja, jolloin esimerkkikoodin mukainen List-rajapinta tyyppiin tallennettu olio ei kelpaa siihen parametriksi. Myös luokan attribuutttina esiintyi ArrayList-tyyppiä olevia muuttujia, jolloin siihen ei voida suoraan tallentaa konstruktorissa parametrina saatavaa List-oliota.