Ohjelmoinnin Perusteet, syksy 99, Koetehtävä 1, arvosteluperusteet & kootut tarinat 30.11.1999, Antti Tuominen Tehtävä 1: 1. Kahviautomaatti on laite, joka valmistaa kahvia kahvinpuruista ja vedestä. Mallinna laite luokkana Kahviautomaatti, joka tarjoaa seuraavat välineet: o public Kahviautomaatti(String laatu) luo Kahviautomaatti-olion. Vesisäiliö on tyhjä, kahvinpurusäiliön sisältö on nolla yksikköä. o public double paljonkoVettä() palauttaa arvonaan veden määrän o public int paljonkoPuruja() palauttaa arvonaan kahvinpurujen määrän o public String mikäLaatu() palauttaa arvonaan kahvin laadun. o public void lisääVettä(double määrä) täyttää vesisäiliötä annetulla määrällä (litroja). o public void lisääPuruja(int määrä) täyttää kahvinpurusäiliötä annetulla määrällä (yhden kahvikupillisen valmistamiseen tarvitaan yksi yksikkö kahvinpuruja). o public boolean valmistaAnnos() "valmistaa yhden annoksen kahvia", vesimäärä vähenee 0.02 litraa, kahvinpuruja kuluu yksi yksikkö. Metodi palauttaa arvon true, jos kahvia oli mahdollista valmistaa. o public String toString() Pistejakauma: 0: * 1: * 2: ** 3: * 4: * 5: * 6: ** 7: ** 8: * 9: **** 10: ***** 11: ******* 12: ************* 13: ************************** 14: ******* 15: ************************ Yleistä: -------- Tehtävä oli osattu yleisesti ottaen hyvin, mikä näkyy myös pistejakaumassa. Omituinen kuoppa 14 pisteen kohdalla johtuu kahdesta vahvasti keskenään korreloivasta yleisestä yhden pisteen virheestä, joka rokotti monia muuten täydellisiä ratkaisuja 13 pisteeseen. Arvostelusta: ------------- Olin taas kovin lempeä. Kirjoitusvirheitä katsottiin läpi sormien, ne menivät "kynällä paperille" -ohjelmointitasoituksen piikkiin. Toisaalta, jos esimerkiksi puolipisteitä tai enkelinsiipiä (aaltosulkuja) ei näkynyt mailla halmeilla, kyseessä ei enää ollut kirjoitusvirhe. Silloin jo sakkolappujakin alkoi ropisemaan. Tarkemmin arvostelun yksityiskohdista alempana. Malliratkaisu: -------------- // melko minimaalinen täydet pisteet tuottava versio public class Kahviautomaatti { // kätketyt tietorakenteet private int puruja; private double vetta; private String laatu; public Kahviautomaatti(String laatu) { this.puruja = 0; this.vetta = 0.0; this.laatu = laatu; } public double paljonkoVettä() { return this.vetta; } public int paljonkoPuruja() { return this.puruja; } public String mikäLaatu() { return this.laatu; } public void lisääVettä(double määrä) { if(määrä > 0.0) this.vetta += maara; } public void lisääPuruja(int määrä) { if(määrä > 0.0) this.puruja += määrä; } public boolean valmistaAnnos() { if(this.vetta >= 0.02 && this.puruja >= 1) { this.vetta -= 0.02; this.puruja--; return true; } else return false; } public String toString() { return "Kahviautomaatti, laatu: "+this.laatu+", vettä: "+this.vetta+ ", puruja: "+this.puruja; } } Pisteytys ja yleiset vihreet: ----------------------------- o metodit ja muu kama oikein "public class Kahviautomaatti":n sisällä. 1p. o tietorakenteet 2p. Yleisin virhe: kentät eivät olleet kapseloinnin hengessä privateja, tai ne oli esitelty konstruktorin paikallisena kalustona, joka katoaa heti konstruktorin suorittamisen jälkeen. o public Kahviautomaatti(String laatu) 2p. Yleisin virhe: laatu-muuttujan arvoa ei otettu talteen, sen luotettiin jotenkin taianomaisesti päätyvän samannimisen ilmentymä- muuttujan arvoksi. o public double paljonkoVettä() 1p. o public int paljonkoPuruja() 1p. o public String mikäLaatu() 1p. Yleisin virhe: palautetaan joku vakiomerkkijono tyyliin "kahvi on hyvää". Laatu-osan epäselvyydet tehtävänannossa laitetaan Arton piikkiin :-) o public void lisääVettä(double määrä) 2p. Yleisin virhe: ei tarkisteta määrä-muuttujan positiivisuutta. Vähentämisen salliva versiokin kelpasi, jos tarkisti, ettei säiliön täyttöaste mene negatiiviseksi. o public void lisääPuruja(int määrä) 2p. Samat ongelmat kuin lisääVettä()-metodissa. o public boolean valmistaAnnos() 2p. Yleisin virhe: varastojen sisältöä ei vähennetä tai boolean-arvo jätetään palauttamatta. o public String toString() 1p. Tänne kelpasi lähes kaikki koneen tilasta jotain kertovat metodit. Yleisin virhe: toString()-metodi _EI_ tulosta mitään! Se palauttaa String-arvon! S.o.p-versiot saivat isot punaiset henkselit päälleen. Briefly in English ------------------ If you have questions about the grading, please visit the meeting (time and place will be annouced later by Arto W.) where students can familiarize theirselves with the grading.