******************************* Java-ohjelmointi, syksy 2007 Kurssikoe 10.12.2007 Tehtävä 1, arvosteluperusteita Mika Stenberg ******************************* Tehtävässä oleellista oli hahmottaa periytymiseen ja kapselointiin liittyviä asioita. Erityisesti huomattavaa oli muuttujien x ja y näkymättömyys aliluokkaan sekä julkisten kuka() ja aseta(double x, double y) periytyminen. Yleisesti ottaen tehtävässä oli joko osattu käyttää oikein super:ia tai sitten ei oltu osattu lainkaan, minkä takia pistejakauma on niin jyrkkä. Yksi hyvin yleinen virhe, joka tiputti täyden pisteen ratkaisuja, oli public void aseta(x, y)- ja public int kuka()-metodien uudelleen kirjoittaminen, tehtävänannossa sanottiin: Ohjelmoi luokkaan *vain tarpeelliset osat*. Täydet pisteet: -kapselointi on tajuttu: yliluokan muuttujat private-tyyppisiä, niihin ei voida viitata - Super:ia on osattu käyttää oikein. - ei ole toteutettu mitään ylimääräisiä metodeja tai muuttujia - z-muuttuja on määritelty. - perinnän syntaksi on oikein: extends Piste Jonkin näiden ominaisuuksien puuttumisesta tai väärinkäytöstä otettiin pisteitä pois. Pieniä heittoja syntaksissa on armahdettu. Pisteitä rokottavia tekijöitä: -käytetään suoraan yliluokan muuttujia, kapselointia ei ole tajuttu eikä superia käytetä. Tällöin on saanut pisteitä tuskin lainkaan, sillä tämä oli tärkein osa tässä tehtävässä. Muutamia pisteitä on annettu oikeasta muuttujien määrittelystä, perinnäntoteutuksesta (extends) ja toimivien metodien asettamisesta. -kuormitettu tarpeettomasti yliluokan metodeja -2 -superia käytetään jossain kohtaa vain vähän väärin, mutta idea ymmärretty -2p -Kapseloinnin rikkominen (käytetty suoraan x ja y arvoja, Superin tai this:in väärinkäyttö) -3-4p - Järjettömät, uudelleen aliluokassa määritellyt konstruktorit -6-8p -Ohjelmointivirheistä, ylimääräisestä turhasta koodista tai ajatusvirheestä -1p Esimerkkiratkaisu: --------------------- /* Alla olevia perittyjä metodeja ei tarvitse eikä *saa* toteuttaa - public void aseta(double x, double y) - public int kuka() */ public class AvaruudenPiste extends TasonPiste { private double z; public AvaruudenPiste() { super(0, 0); this.z = 0.0; } public AvaruudenPiste(double x, double y, double z) { super(x,y); this.z = z; } public void aseta(double x, double y, double z) { super.aseta(x, y); this.z = z; } public void aseta(double z) { this.z = z; } public String toString() { return super.toString() + "("+ this.z +")"; } }