Date: Fri, 23 Jan 2004 15:47:50 +0200 From: Tomi Pasanen ------------------------------------------------------- Tässä vielä arvosteluperusteita nettiin laitettavaksi -1 pistettä Alkuarvot puuttuvat olioilta Olioille ei varata tilaa (new) Oliosta ei tehdä todellista kopiota vaan laitetaan pelkkä viite -2 pistettä Käytetään parametrina saadun olion suojattuja metodeja, oliomuuttujia tai luokkamuuttujia Käytetään perityn luokan suojattuja metodeja, oliomuuttujia tai luokkamuuttujia Olioiden tyyppien epäsopivuus toString operaation puuttuminen -4 pistettä Ei ymmärretä luokkamuuttujien käyttöä kun toteutetaan olion ainutkertaisuutta Käsittämättömyydet -5 pistettä Flussabasiliskojen pariuttamis-metodin puuttuminen Loppujen lopuksi suurimmat vaikeudet olivat nimenomaan juuri nuo suojauksien rikkomiset. Ei ymmärretä eroa olioparametrin ja this olio välillä tai miten perinnässä saatavat metodit ja muuttujat ovat käytettävissä. Tämä on sikäli harmillista koska koko olio-ohjelmointi perustuu juuri näihin suojauksiin ja sitä kautta systeemin eheyden ylläpitämiseen, systeemin hajauttamiseen ja uudelleen käytettävyyteen. ---------------------------------------------------------------------- From: Tomi Pasanen Date: Thu, 15 Jan 2004 16:21:50 +0200 ---------------------------------------------------------------------- public class Basilisko { private static int laskuri = 1; private final int identiteetti = laskuri; private int[] perima = new int[5]; public Basilisko(int[] perima) { ++Basilisko.laskuri; if (perima.length != 5) for (int i = 0; i < 5; i++) this.perima[i] = 13; else for (int i = 0; i < 5; i++) this.perima[i] = perima[i]; } public int annaID() { return this.identiteetti; } public int[] annaPerima() { int[] kopio = new int[5]; for (int i = 0; i < 5; i++) kopio[i] = this.perima[i]; return kopio; } public Basilisko pariudu(Basilisko toinen) { return new Basilisko(LaskeLapsenPerima(toinen)); } protected int[] laskeLapsenPerima(Basilisko toinen) { int[] lapsenperima = new int[5]; for (int i = 0; i < 5; i++) lapsenperima[i] = (this.perima[i] + toinen.annaPerima()[i]) % 17 ; return lapsenperima; } public String toString() { String tulos = "identiteetti " + this.identiteetti + " ja perimä ["; for (int i = 0; i < 4; i++) { tulos += this.perima[i]; tulos += ","; } tulos += this.perima[4]; tulos += "]"; return tulos; } } public class FlunssaBasilisko extends Basilisko { private String nimi; private double tarttuvuus; public FlunssaBasilisko(int[] perima, String nimi, double tarttuvuus) { super(perima); this.nimi = nimi; this.tarttuvuus = tarttuvuus; } public String annaNimi() { return this.nimi; } public double annaTarttuvuus() { return this.tarttuvuus; } public FlunssaBasilisko pariudu(FlunssaBasilisko toinen) { return new FlunssaBasilisko( this.laskeLapsenPerima(toinen), this.nimi + toinen.annaNimi(), 17 * (this.tarttuvuus + toinen.annaTarttuvuus()) / 2); } public String toString() { int[] perima = this.annaPerima(); String tulos = "nimi " + this.nimi + " ja tarttuvuus " + this.tarttuvuus + " sekä identiteeti " + this.annaID() + " ja perimä ["; for (int i = 0; i < 4; i++) { tulos += perima[i]; tulos += ","; } tulos += perima[4]; tulos += "]"; return tulos; } public static void main(String[] args) { int[] temp1 = {2, 0, 0, 0, 2}; int[] temp2 = {1, 0, 0, 0, 1}; int[] temp3 = {2, 0, 5, 0, 2}; int[] temp4 = {1, 0, 5, 0, 1}; Basilisko bisa = new Basilisko(temp1); Basilisko baiti = new Basilisko(temp2); Basilisko blapsi; FlunssaBasilisko fisa = new FlunssaBasilisko(temp3, "isaf", 2); FlunssaBasilisko faiti = new FlunssaBasilisko(temp4, "aitif", 1); FlunssaBasilisko flapsi; System.out.println("Oliot muistissa \nBasiliskoisä: " + bisa + "\nBasiliskoäiti: " + baiti + "\nFlunssabasiliskoisa: " + fisa + "\nFlunssabasiliskoaiti: " + faiti); System.out.println("\nParitus minkä jälkeen lapsioliot ovat\n"); blapsi = bisa.pariudu(baiti); flapsi = fisa.pariudu(faiti); System.out.println("Basiliskolapsi: " + blapsi + "\n ja Flunssabasiliskolapsi: " + flapsi); } }