Tietojenkäsittelytieteenlaitos 20.12.2001 Helsingin yliopisto 581326-3 Java-ohjelmointi -kurssin kurssikoe 18.12.2001 Tehtävä 3, tarkastaja tuntiopettaja Juhani Haavisto Erään luokan konstruktorin otsake on: public Otus(Sisuskalu parametri). Miten saat luotua ilmentymän luokasta Otus, kun Sisuskalu on a) public abstract class Sisuskalu { public void teeSitäsunTätä(); } b) public interface Sisuskalu { public void teeSitäsunTätä(); } a -kohta (5p) "oikea vastaus" Jonkun luokan on perittävä luokka Sisuskalu (2p), ja tällöin siinä luokassa on annettava teeSitäsunTätä -metodin koodi. Sisuskalun perineen luokan ilmentymä annetaan Otus -oliolle parametrina sitä luotaessa (3p). Mainitsemalla, ettei abstraktista luokkasta (tai rajapinnasta) voi sellaisenaan luoda ilmentymää on koko tehtävästä saanut (vähintään) kaksi pistettä. b -kohta (5p) "oikea vastaus" Jokin luokka toteuttaa rajapinnan Sisuskalu (2p), ja sen ilmentymä annetaan Otus -oliolle parametrina sitä luotaessa (3p). Koodiesimerkki: public class Sisus extends Sisuskalu { public void teeSitäSunTätä(){ //sitä sun tätä } //muu luokan koodi } käyttö: Sisus apuri = new Sisus(); Otus otus = new Otus(apuri); Muuttamalla "extends" -sanan tilalle sana "implements" saadaan b -kohdan vastaus. Koodiesimerkkiä ei ole vaadittu kummassakaan kohdassa, tällöin tosin sanallisen selityksen on oltava "täydellinen". Tehtävä oli vaikeusasteestaan huolimatta osattu erittäin hyvin. Suurin virhekäsitys tuntui olevan, että aliluokan tai rajapinnan toteuttavan luokan sisällä voidaan luoda Sisuskalu -olio. Sisuskalu pysyy edelleen abstraktina, vaikka jokin luokka "suostuukin" perimään sen. Sen sijaan aliluokan omia olioita voidaan käyttää siellä missä yliluokankin vastaavaa. (vastaava pätee rajapinnan kanssa) Mielenkiintoinen useiden toistama virhe oli seuraava: Otus olio = new Otus(new AliLuokka); ts. aliluokan luonti -operaatiosta on jäänyt sulkeet perästä pois. Tästä syntaksivirheestä rankaistiin viemällä yksi piste. Olion luonnissa oli muunlaisiakin virheitä. Nämä asiat kuuluvat kuitenkin enemmän Ohjelmoinnin perusteet -kurssille... Pistejakauma tehtävän osalta: 10: ********************************************************** 115 kpl 9: ******** 16 kpl 8: ****** 12 kpl 7: **** 8 kpl 6: *** 6 kpl 5: ******** 15 kpl 4: ********* 18 kpl 3: * 1 kpl 2: ********* 18 kpl 1: * 2 kpl 0: ********* 18 kpl