Java- ohjelmointi, syksy 2006 Arvosteluperusteet, Tehtävä 2. Arvostelija Mika Stenberg, esimerkit Jussi Kollin. Yleistä ------- Uusia kenttiä ei pitänyt olla. Tarvittiin välttämättä konstruktori, joka oli muotoa: public TuplaBasilisko (String perimä) { super(perimä); } Tässä monet tekivät virheen. Seuraavat kaksi esimerkkiä toimivat samalla tavalla väärin: public TuplaBasilisko (String perimä) { } public TuplaBasilisko (String perimä) { super(); } Ensinnäkin, konstruktorit EIVÄT PERIYDY. Toiseksi, pelkkä super() ei riitä, jollei Basiliskossa määritelty erikseen parametritonta konstruktoria. Toinen metodi, joka luokassa oli oltava, oli "pariudu". Tässä moni lankesi luulemaan, että private-määre tarkoittaa olion sisäistä näkyvyyttä. Koska private tarkoittaa kuitenkin vain luokan sisäistä näkyvyyttä, niin pariudu-metodissa oli pakko käyttää aksessoreja yliluokan kenttien näkemiseen, tarkemmin sanoen metodia mikäOnPerimä(). Siis oli ehdottoman väärin käyttää merkintää "this.perimä" tai "toinen.perimä" perimien katenoinnin yhteydessä. Toinen huomautuksen aihe on että tässä metodissa kaksi Tupla- Basiliskoa pariutuvat. Eräät tekivät tästä metodista sellaisen, joka palautti uuden Basiliskon, jonka perimä oli määräytynyt kuten TuplaBasiliskoilla. Tätä voisi verrata siihen, että ihmisten lapset ovat nisäkkäitä mutta eivät ihmisiä. Pisteytys, yht 12 p: ---------- * Luokan määrittelyssä (yht 2 p) * "extends Basilisko" puuttuu: : -2p * konstruktori (yht 4p) * ei konstruktoria : -4p * ei super(perimä)-kutsua jos konstruktori oli : -2p * konstruktori määritelty, mutta sisälsi täyttä puppua : -3p * pariudu-metodi (yht 6 p) * viittauksia Basiliskon private- kenttiin : -3p * uusi TuplaBasilisko- olio luotiin, muttei palautettu : -2p * Oliota yritettiin palautettiin luomatta sitä ensin : -2p * pariudu-metodin palautustyypiksi valittu Basilisko : -2p * metodia mikäOnPerimä- kutsuttu ilman sulkeita, : -1p ikäänkuin kyseessä olisi muuttuja * luokkaan tehdyt ylimääräiset ja tarpeettomat metodit : -1/-2p * muut virheet vähennyksiä yhdestä kahteen pistettä : -1/-2p vakavuuden mukaan. ESIMERKKIRATKAISU: public class TuplaBasilisko extends Basilisko { public TuplaBasilisko(String perima) { super(perima); } public TuplaBasilisko pariudu(TuplaBasilisko toinen) { String lapsenPerimä = this.mikäOnPerimä() + toinen.mikäOnPerimä(); TuplaBasilisko lapsi = new TuplaBasilisko(lapsenPerimä); return lapsi; } }