David Consuegra: Tehtävä 1: Ensin selostus, sitten mallit. =========================================================================== Arvosteluperusteet a) Pisteitä sai seuraavasti: 2p Oliomuuttujien määrittely ja alustus oikein ja oikeilla paikoilla. 2p Metodien määrittelyjen, palautusarvojen, luokan rakenteen yms. oikeellisuus. 1p Tarkastettu otto- ja pano-metodien saamien parametrien positiivisuus. Yleisimpänä puutteena oli oton ja panon parametrien tarkistaminen, mutta vastauksissa esiintyi myös sekaannuksia muuttujien alustamisen ja paikan kanssa. b) Täydet pisteet sai toimivasta toteutuksesta, joka käyttää LuTia, eikä sisällä ylimääräisiä int-muuttujia oliotasolla. Pisteen menetti mm. jos unohti tarkastaa konstruktorissa annetun tukitilin saldon positiivisuuden. Yleisiä virheitä olivat myös seuraavat: public void varallisuusMuutos(int maara) { if (maara < 0) { varat.otto(maara); //Negatiivinen otto } else .. } siirraTukeaVaroihin-metodissa: varat.pano(tuet.saldo()); tuet.otto(tuet.saldo()); return tuet.saldo(); //Palauttaa nollan, vaikka pitäisi palauttaa aiempi saldo. //Joissain vastauksissa myös varoihin pantiin nollan verran rahaa. Jos ei käyttänyt toteutuksessaan lainkaan LuTia sai toteutuksen laadusta riippuen 0-1 pistettä. Nolla pistettä sai, mikäli sekoitti LuTi:n ja int-tyypin käyttötavat keskenään ymmärtämättä olion ja alkeistyypin eroa. Ylimääräisten oliotasolla esiteltyjen int-muuttujien käyttöä tavattiin hieman ja siitä menetti tapauksesta riippuen pisteen tai kaksi. Metodien sisällä int-muuttujat olivat toki sallittuja. c) Tehtävästä sai täydet pisteet tuottamalla toimivan ohjelmanpätkän, jossa oli käytetty järkevästi ja kattavasti Saatio-luokan metodeita (4p) ja jossa toi jollain tavalla esiin tapauksen, jossa jokin metodikutsu epäonnistuu tai ei siirrä annettua summaa (1p). Pisteitä menetti, jos ei osannut luoda oliota oikein tai laittoi ohjelmaan rivejä, jotka eivät tee mitään. Esim. getterin kutsumista käyttämättä/tulostamatta sen paluuarvoa ei yleisesti ottaen katsottu järkeväksi koodiksi. ==================================================================================== public class LuTi { private int saldo; public LuTi() { this.saldo = 0; } public LuTi(int alkusaldo) { this.saldo = alkusaldo; } public void pano(int maara) { if (maara <= 0) return; this.saldo = this.saldo + maara; } public void otto(int maara) { if (maara <= 0) return; this.saldo = this.saldo - maara; } public int saldo() { return this.saldo; } } ==================================================================================== public class Saatio { private LuTi varat, tuet; public Saatio(int varat, int tuki) { this.varat = new LuTi(varat); if (tuki < 0) tuki = 0; this.tuet = new LuTi(tuki); } public int getVarat() { return varat.saldo(); } public int getTuki() { return tuet.saldo(); } public int getTase() { return getTuki()+getVarat(); } public void varallisuusmuutos(int maara) { if (maara < 0) { maara = maara * -1; varat.otto(maara); } else { varat.pano(maara); } } public boolean tukeaTulee(int maara) { if (maara < 0) return false; tuet.pano(maara); return true; } public int siirraTukeaVaroihin(int maara) { if (maara <= 0) return 0; if (tuet.saldo() < maara) { maara = tuet.saldo(); } tuet.otto(maara); varat.pano(maara); return maara; } public String toString() { return "Säätiö: varat "+varat.saldo()+", tuet "+tuet.saldo(); } } ==================================================================================== public class SaatioEsittely { public static void main(String[] args) { System.out.println("Perustetaan Nuorisosäätiö"); Saatio nuoriso = new Saatio(0,0); System.out.println("RAY tukee säätiötä miljoonalla eurolla."); nuoriso.tukeaTulee(1000000); System.out.println("Tuesta otetaan puolet käyttöön."); int siirto = nuoriso.siirraTukeaVaroihin(500000); System.out.println("Siirrettiin "+siirto+" euroa."); System.out.println("Ostetaan lautakasoja."); nuoriso.varallisuusmuutos(5000); System.out.println("Saation tila nyt: "+nuoriso); if (nuoriso.tukeaTulee(-500000)) { System.out.println("RAY karhusi tukia takaisin."); //Tämä lause ei ikinä tulostu } else { System.out.println("RAY ei onnistunut karhuamaan tukia takaisin."); } System.out.println("Hätääntyneenä siirretään loputkin rahat tuista turvaan"); siirto = nuoriso.siirraTukeaVaroihin(500000); System.out.println("Siirrettiin "+siirto+" euroa."); } } ====================================================================================