Løsningsforslag ukeoppg. 7: 6. - 9. okt (INF1000 - Høst 2008)
Mer om klasser og objekter (kap. 8.17 - 8.18), UML (kap. 12.1 - 12.9)
NB! Disse er bare forslag til løsninger, dine svar kan være
like gode eller bedre selv om de ser annerledes ut.
Du får sannsynligvis mer utbytte av løsningsforslagene etter at
du har forsøkt å løse oppgaven selv. Du kan også finne
løsning på noen av disse oppgavene i lærebokens hjemmeside:
www.universitetsforlaget.no/java.
Mål
Få mer øvelse i bruk av klasser og objekter; en innføring i UML-diagrammer
(klassediagrammer og objektdiagrammer); og tips til å komme i gang med oblig 3.
Oppgaver til teoritimen
- Hint til Oblig3-HybelHus: (side 5 - 9 i oppgaveteksten)
Les og forklar hintene bak i oppgaveteksten, f.eks. om konstruktører (hint 2), null-pekere (hint 3), konvertering mellom char og int (hint 4), osv... - UML-klassediagram: Oppgave 1 i kap. 12 (side 239)
En student har null eller flere eksamener. Lag et klassediagram om dette forholdet mellom klassene Student og Eksamen.
Figuren viser også eksempler på objektvariabler (ikke spurt om i oppgaven). - UML-klassediagram og -objektdiagram: Oppgave 3 i kap. 12 (side 239)
Banken "B-bank" har flere bankkonti, og en kunde kan ha flere bankkonti i B-bank.
(a) Lag et klassediagram i UML over B-bank, kunder, og konti, og få med antall på forholdene mellom klassene.
Figuren viser også eksempler på objektvariabler og objektmetoder (ikke spurt om i oppgaven).
(b) Finn ut hvordan du vil lage en programstruktur som kan svare på spørsmål om hvilke bankkonti en kunde har i B-bank, og som kan skrive ut samlet saldo på alle konti for en kunde og samlet for B-bank. Tegn et objektdiagram for systemet.
Figuren viser også eksempler på objektvariabler (ikke spurt om i oppgaven). - Kursoppmeldingssystemet:
I de følgende oppgavene tar vi utgangspunkt i programmet Studentregister.java fra kapittel 8.17 (side 160-172):Oversikt over klassene i programmet: class Studentregister { public static void main(String[] args) { Institutt institutt = new Institutt(); institutt.meny(); } } class Institutt { Kurs[] kurs = new Kurs[10]; int antKurs = 0; Student[] studenter = new Student[300]; int antStudenter = 0; // Metoden meny() // Metoder som utfører kommandoene i menyen. }
class Kurs { String kurskode; Ukedag dag; int tid; Student[] studenter = new Student[300]; int antStudenter; } class Student { String navn; Kurs[] kurs = new Kurs[4]; int antKurs; }
import easyIO.*; class Studentregister { public static void main(String[] args) { Institutt institutt = new Institutt(); institutt.meny(); } } class Kurs { String kurskode; Ukedag dag; int tid; Student[] studenter = new Student[300]; int antStudenter; Kurs(String kode, Ukedag dag, int tid) { kurskode = kode; this.dag = dag; this.tid = tid; } boolean erFullt() { return antStudenter == studenter.length; } void meldPåStudent(Student s) { studenter[antStudenter++] = s; } } class Student { String navn; Kurs[] kurs = new Kurs[4]; int antKurs; Student(String navn) { this.navn = navn; } boolean maksKurs() { return antKurs == kurs.length; } void meldPåKurs(Kurs k) { kurs[antKurs++] = k; } void skrivTimeplan() { Out skjerm = new Out(); skjerm.outln("Timeplan for " + navn); skjerm.outln(); skjerm.out("tid/dag\t"); for (String dagnavn : Ukedag.alleNavn) { skjerm.out(dagnavn + "\t"); } skjerm.out("\n-----------------------------------"); skjerm.outln("-----------------------------------"); for (int tid = 8; tid < 18; tid++) { skjerm.out(tid, 5); skjerm.out(" |"); for (int i = 0; i < antKurs; i++) { if (kurs[i].tid == tid) { for (int j = 0; j < kurs[i].dag.nr; j++) { skjerm.out("\t"); } skjerm.out(kurs[i].kurskode); } } skjerm.outln(); } } } class Institutt { Kurs[] kurs = new Kurs[10]; int antKurs = 0; Student[] studenter = new Student[300]; int antStudenter = 0; In tast = new In(); Out skjerm = new Out(); Institutt() { In fil = new In("register.txt"); while (!fil.endOfFile()) { String kurskode = fil.inWord(); int dagnr = fil.inInt(); int tid = fil.inInt(); Ukedag ukedag = new Ukedag(dagnr); kurs[antKurs++] = new Kurs(kurskode, ukedag, tid); } } void meny() { String meny = "\n" + "1 - meld student på kurs\n" + "2 - lag timeplan for student\n" + "3 - avslutt program\n" + "\n" + "valg: "; int valg = 0; do { skjerm.out(meny); valg = tast.inInt(); switch (valg) { case 1: registrerStudent(); break; case 2: finnStudent().skrivTimeplan(); break; case 3: // avslutter break; default: skjerm.outln("Ukjent menyvalg"); } } while (valg != 3); // do-while } Student finnStudent() { skjerm.out("Gi navn på studenten: "); String navn = tast.inLine(); Student stud = null; for (int i = 0; i < antStudenter; i++) { if (navn.equals(studenter[i].navn)) { stud = studenter[i]; } } if (stud == null) { if (antStudenter == studenter.length) { skjerm.outln("Kan ikke registrere flere studenter."); } else { stud = new Student(navn); studenter[antStudenter++] = stud; } } return stud; } void registrerStudent() { Student stud = finnStudent(); if (stud == null) { // maks antall studenter er nådd. return; } skjerm.out("Oppgi kurskode (blank linje avslutter): "); String kurskode = tast.readLine(); while (!kurskode.equals("")) { Kurs k = finnKurs(kurskode); if (stud.maksKurs()) { skjerm.outln("Studenten kan ikke følge fler kurs."); } else if (k == null) { skjerm.outln("Ukjent kurskode"); } else if (k.erFullt()) { skjerm.outln("Beklager - kurset er fult!"); } else { k.meldPåStudent(stud); stud.meldPåKurs(k); skjerm.outln(stud.navn + " er påmeldt " + kurskode); } skjerm.out("Oppgi kurskode (blank linje avslutter): "); kurskode = tast.readLine(); } } Kurs finnKurs(String kurskode) { Kurs kurset = null; for (int i = 0; i < antKurs; i++) { if (kurs[i].kurskode.equals(kurskode)) { kurset = kurs[i]; } } return kurset; } } // end Institutt class Ukedag { static String[] alleNavn = { "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag", "søndag" }; String navn; int nr; Ukedag(int nr) { this.nr = nr; navn = alleNavn[nr - 1]; } } // end Ukedag
KJØREEKSEMPEL:Format på innfil:
Kurs Ukedag Klokka> more register.txt INF1000 2 10 INF1010 3 10 INF1050 4 12 MAT1000 1 8 BIO1000 1 8 > java Studentregister 1 - meld student på kurs 2 - lag timeplan for student 3 - avslutt program valg: 1 Gi navn på studenten: Ola Oppgi kurskode (blank linje avslutter): INF1000 Ola er påmeldt INF1000 Oppgi kurskode (blank linje avslutter): INF1050 Ola er påmeldt INF1050 Oppgi kurskode (blank linje avslutter): MAT1000 Ola er påmeldt MAT1000 Oppgi kurskode (blank linje avslutter): 1 - meld student på kurs 2 - lag timeplan for student 3 - avslutt program valg: 2 Gi navn på studenten: Ola Timeplan for Ola tid/dag mandag tirsdag onsdag torsdag fredag lørdag søndag ---------------------------------------------------------------------- 8 | MAT1000 9 | 10 | INF1000 11 | 12 | INF1050 13 | 14 | 15 | 16 | 17 |
Oppgave 9 i kap. 8 (side 176)
Det var lagt en begrensning på tidspunkter for kurs, for å gjøre utskriften av timeplan enklere.
(a) Modifiser utskriftmetoden i Student-klassen slik at flere kurs kan starte på samme klokkeslett.Endrer løkken "for (int tid = 8;..." i metoden skrivTimeplan() i klassen Student:/* Den ytre løkken går gjennom klokkeslett (08-14, nedover i timeplanen). * Neste løkke går gjennom ukedagene for hvert mulig klokkeslett (man-søn, * bortover i timeplanen). Så er det enda en nestet løkke, innerst, som * ser gjennom alle kurs og finner om et kurs foreleses i nåværende * kl./dag-kombinasjon. I så fall skrives ut kursnavnet; ellers bare * et tabulator-tegn. Programmet klarer nå fint å skrive ut flere kurs * som har samme klokkeslett hvis de undervises på forskjellig ukedag. */ for (int tid = 8; tid < 15; tid++) { skjerm.out(tid, 5); skjerm.out(" |"); for (int dagnr = 0; dagnr < 7; dagnr++){ for (int i = 0; i < antKurs; i++) { if (kurs[i].tid == tid // Hvis kurstid == tid, og && kurs[i].dag.nr == dagnr) { // kursdag == dagnr skjerm.out(kurs[i].kurskode, 7); // ==> Skriv kursnavn } } skjerm.out("\t"); } skjerm.outln(); } KJØREEKSEMPEL: valg: 1 Gi navn på studenten: Per Oppgi kurskode (blank linje avslutter): INF1000 o er påmeldt INF1000 Oppgi kurskode (blank linje avslutter): INF1010 o er påmeldt INF1010 Oppgi kurskode (blank linje avslutter): 1 - meld student på kurs 2 - lag timeplan for student 3 - avslutt program valg: 2 Gi navn på studenten: Per Timeplan for Per tid/dag mandag tirsdag onsdag torsdag fredag lørdag søndag ---------------------------------------------------------------------- 8 | 9 | 10 | INF1000 INF1010 11 | 12 | 13 | 14 |
(b) Modifiser metoden for å melde en student på et kurs, slik at det gis en advarsel hvis to av kursene en student har meldt seg på går på samme tidspunkt (dag og tid).To endringer, den første i metoden meldPåKurs() i klassen Student:void meldPåKurs(Kurs k) { /* Legger til en for-løkke som går gjennom kursene studenten * allerede er påmeldt i, og sjekker om noen av dem har samme * tidspunkt som kurs k. */ boolean funnet = false; for (int i = 0; i < antKurs && !funnet; i++) { if (kurs[i].tid == k.tid && kurs[i].dag.nr == k.dag.nr) { System.out.println("Studenten har allerede et kurs på" + " det tidspunktet!"); funnet = true; } } if (! funnet) { kurs[antKurs++] = k; k.meldPåStudent(this); System.out.println(navn + " påmeldt i " + k.kurskode); } }
I tillegg, kommenterer bort to linjer i siste else i Institutt.registrerStudent():} else { // k.meldPåStudent(stud); stud.meldPåKurs(k); // skjerm.outln(stud.navn + " er påmeldt " + kurskode); } KJØREEKSEMPEL: valg: 1 Gi navn på studenten: Kari Oppgi kurskode (blank linje avslutter): MAT1000 Kari påmeldt i MAT1000 Oppgi kurskode (blank linje avslutter): BIO1000 Studenten har allerede et kurs på det tidspunktet!
(c) Legg til en metode for å melde en student av et kurs. Pass på at du justerer tellerne antStudenter i kursobjektet og antKurs i studentobjektet.Fire endringer:
1. Ny metode i klassen Kurs:void meldAvStudent(Student s) { // Oppg. 9 c), del 1:4 boolean funnet = false; for (int i = 0; i < antStudenter && !funnet; i++) { if (studenter[i] == s) { funnet = true; for (int j = i; j < antStudenter - 1; j++) { studenter[j] = studenter[j + 1]; } antStudenter--; } } }
2. Ny metode i klassen Student:void meldAvKurs(Kurs k) { // Oppg. 9 c), del 2:4 /* Fjerner kurs k fra arrayen kurs[] ved å gå gjennom arrayen, og * når k er funnet i arrayen, fjerner det ved å gå gjennom * resten av arrayen og flytte elementene et hakk ned. Første * slik flytting overskriver plassen der k var, og slik blir den * fjernet. */ boolean funnet = false; for (int i = 0; i < antKurs && !funnet; i++) { if (kurs[i] == k) { funnet = true; for (int j = i; j < antKurs - 1; j++) { kurs[j] = kurs[j + 1]; } antKurs--; System.out.println(navn + " meldt av " + k.kurskode); } } }
3. I metoden meny() lages ny case:"4 - meld student av kurs\n" + // Oppg. 9 c), del 3:4 case 4: meldStudentAvKurs(); break;
4. Og det må lages en ny kommando-metode i klassen Institutt:void meldStudentAvKurs() { // Oppg. 9 c), del 4:4 Student stud = finnStudent(); skjerm.out("Oppgi kurskode: "); Kurs k = finnKurs(tast.inWord()); stud.meldAvKurs(k); k.meldAvStudent(stud); } KJØREEKSEMPEL: Timeplan for Arne tid/dag mandag tirsdag onsdag torsdag fredag lørdag søndag ---------------------------------------------------------------------- 8 | 9 | 10 | INF1000 11 | 12 | 13 | 14 | 1 - meld student på kurs 2 - lag timeplan for student 3 - avslutt program 4 - meld student av kurs valg: 4 Gi navn på studenten: Arne Oppgi kurskode: INF1000 Arne meldt av INF1000 1 - meld student på kurs 2 - lag timeplan for student 3 - avslutt program 4 - meld student av kurs valg: 2 Gi navn på studenten: Arne Timeplan for Arne tid/dag mandag tirsdag onsdag torsdag fredag lørdag søndag ---------------------------------------------------------------------- 8 | 9 | 10 | 11 | 12 | 13 | 14 |
- Oppgave 10 i kap. 8 (side 176)
Ofte har et kurs øvingsgrupper. Vi antar at et kurs maksimalt har 20 øvingsgrupper (og maks. 15 studenter pr. gruppe), og at en øvingsgruppe har én dobbeltime med undervisning i uka. Du skal nå utvide programmet slik at det også kan administrere opplysninger om grupper.
(a) Tegn et nytt klassediagram hvor du får med klassen Gruppe. Et moment du må vurdere er hvorvidt Student-objektene skal ha pekere til gruppene de følger, og om gruppene skal ha pekere til studentene som følger gruppenVelger å ha pekere begge veier, fra Gruppe til Student og fra Student til Gruppe, i tillegg til pekere fra Kurs til Gruppe og omvendt. Lagrer alle disse pekerne i arrayer, med følgende antall elementer:+--------+ 1 har 0..20 +----------+ 0..4 har 0..15 +---------+ | Kurs |-----------------| Gruppe |-----------------------| Student | +--------+ kurs grupper +----------+ grupper studenter +---------+
(b) Fila som inneholder opplysninger om kurs må nå endres slik at den også inneholder opplysninger om hvor mange grupper kurset har, og tidspunktet for gruppeundervisningen. Definér et nytt filformat!Ny datafil-format://Kurs Ukedag Kl. AntGrupper DagGr1 KlGr1 DagGr2 KlGr2 DagGr3 KlGr3 > more register.txt INF1000 2 10 3 1 11 2 11 3 11 INF1010 3 10 2 1 12 2 12 INF1050 4 12 3 3 14 4 14 5 14 MAT1000 1 8 2 2 16 4 16 BIO1000 0 12 2 2 16 4 18
(c) Skriv koden for den nye Gruppe-klassen. Du må endre konstruktøren i Institutt-klassen slik at du også leser inn og registrerer grupper for hvert kurs. I tillegg må du endre metoden for å melde en student på et kurs slik at studenten også blir meldt på en undervisningsgruppe. Pass på at du får satt alle objektpekerne riktig! Til sist må også metoden for å skrive ut timeplan endres slik at også grupper skrives ut.Seks endringer:
1. Ny klasse:class Gruppe { // Oppg. 10 c) int gruppenr; Kurs kurs; Ukedag dag; int tid; Student[] studenter = new Student[15]; int antStudenter = 0; Gruppe(int gruppenr, Kurs kurs, int dagnr, int tid) { this.gruppenr = gruppenr; this.kurs = kurs; this.dag = new Ukedag(dagnr); this.tid = tid; } void meldPåStudent(Student s) { studenter[antStudenter++] = s; } void meldAvStudent(Student s) { boolean funnet = false; for (int i = 0; i < antStudenter && !funnet; i++) { if (studenter[i] == s) { funnet = true; for (int j = i; j < antStudenter - 1; j++) { studenter[j] = studenter[j + 1]; } antStudenter--; } } } }
2. Ny slutt i while-løkka til konstruktøren i Institutt:kurs[antKurs] = new Kurs(kurskode, ukedag, tid); int antGrupper = fil.inInt(); //// Oppg. 10 c) kurs[antKurs].antGrupper = antGrupper; for (int i = 0; i < antGrupper; i++) { kurs[antKurs].grupper[i] = new Gruppe(i + 1, kurs[antKurs], fil.inInt(), fil.inInt()); } antKurs++; } }
3. Ny deklarasjon øverst i klassen Kurs:Gruppe[] grupper = new Gruppe[20]; // Oppg. 10 c) int antGrupper = 0;
4. Ny deklarasjon øverst i klassen Student, og endrer siste if-setning i metoden Student.meldPåKurs() slik at studenten også blir meldt på en gruppe:// Øverst i klassen Student: Gruppe[] grupper = new Gruppe[4]; // Siste if-setning i Student.meldPåKurs(): if (! funnet) { // Hvis tidspunktet ikke kolliderte. kurs[antKurs] = k; k.meldPåStudent(this); // Oppg. 10 c): System.out.print("Gruppe nr: (1-" + kurs[antKurs].antGrupper + "): "); int gruppenr = new In().inInt(); grupper[antKurs] = kurs[antKurs].grupper[gruppenr - 1]; if (grupper[antKurs] == null) { System.err.println("Feil 001"); } grupper[antKurs].meldPåStudent(this); System.out.println(navn + " påmeldt i " + k.kurskode // Oppg. 9 b) + ", gruppe nr. " + grupper[antKurs].gruppenr); antKurs++; }
5. Endrer løkken "for (int dagnr =..." i Student.skrivTimeplan() slik at gruppenr. også vises:void skrivTimeplan() { Out skjerm = new Out(); skjerm.outln("Timeplan for " + navn); skjerm.outln(); skjerm.out("kl\\dag\t"); for (String dagnavn : Ukedag.alleNavn) { if (!dagnavn.equals("søndag")) { // Tar bort søndag fra timeplanen skjerm.out(dagnavn, 11); } } skjerm.out("\n-----------------------------------"); skjerm.outln("-----------------------------------"); /* Den ytre løkken går gjennom klokkeslett (08-14, nedover i timeplanen). * Neste løkke går gjennom ukedagene for hvert mulig klokkeslett (man-søn, * bortover i timeplanen). Så er det enda en nestet løkke, innerst, som * ser gjennom alle kurs og finner om et kurs foreleses i nåværende * kl./dag-kombinasjon. I så fall skrives ut kursnavnet; ellers bare * et tabulator-tegn. Programmet klarer nå fint å skrive ut flere kurs * som har samme klokkeslett hvis de undervises på forskjellig ukedag. */ for (int tid = 8; tid < 17; tid++) { skjerm.out(tid, 5); skjerm.out(" |"); for (int dagnr = 0; dagnr < 6; dagnr++){ String tekst = ""; // Forelesninger: for (int i = 0; i < antKurs; i++) { if (kurs[i].tid == tid // Hvis kurstid == tid, og && kurs[i].dag.nr == dagnr) { // kursdag == dagnr tekst += kurs[i].kurskode; // ==> Skriv kursnavn } } // Gruppetimer: for (int i = 0; i < antKurs; i++) { if (grupper[i].tid == tid && grupper[i].dag.nr == dagnr) { tekst += grupper[i].kurs.kurskode + ":g" + grupper[i].gruppenr; // Oppg. 10 c) } } skjerm.out(tekst, 11); // Skriver ut evt. kurskode og gruppenr. } skjerm.outln(); } }
6. Endrer Student.meldAvKurs() slik at studenten også blir av- og på-meldt i en gruppe:void meldAvKurs(Kurs k) { boolean funnet = false; for (int i = 0; i < antKurs && !funnet; i++) { if (kurs[i] == k) { funnet = true; for (int j = i; j < antKurs - 1; j++) { kurs[j] = kurs[j + 1]; grupper[j] = grupper[j + 1]; // Oppg. 10 } antKurs--; System.out.println(navn + " meldt av " + k.kurskode); } } } KJØREEKSEMPEL: 1 - meld student på kurs 2 - lag timeplan for student 3 - avslutt program 4 - meld student av kurs valg: 1 Gi navn på studenten: Ole Oppgi kurskode (blank linje avslutter): INF1000 Gruppe nr: (1-3): 3 Ole påmeldt i INF1000, gruppe nr. 3 Oppgi kurskode (blank linje avslutter): MAT1000 Gruppe nr: (1-2): 2 Ole påmeldt i MAT1000, gruppe nr. 2 Oppgi kurskode (blank linje avslutter): 1 - meld student på kurs 2 - lag timeplan for student 3 - avslutt program 4 - meld student av kurs valg: 2 Gi navn på studenten: Ole Timeplan for Ole kl\dag mandag tirsdag onsdag torsdag fredag lørdag ---------------------------------------------------------------------- 8 | MAT1000 9 | 10 | INF1000 11 | INF1000:g3 12 | 13 | 14 | 15 | 16 | MAT1000:g2
- Oppgave 12 i kap. 8 (side 177)
Utvid Insitutt-klassen med en metode som lagrer alle opplysninger om registrerte studenter på en fil (navn, kurs, og grupper). Disse opplysningene skal lagres på fila «oppmeldinger.txt». Ved oppstart skal programmet lese denne fila (i tillegg til fila med opplysninger om kurs og grupper) hvis den finnes.
Hint: Metoden erFil(...) i In-klassen i easyIO returnerer true hvis den oppgitte parameteren er navn på en fil som kan leses.Filformat for "oppmeldinger.txt":
Navn; antKurs kurskode gruppenr kurskode gruppenr ...
Eksempel:Jon; 3 INF1000 0 MAT1000 1 BIO1000 0 Kari; 2 INF1000 2 INF1050 2 Martin; 1 INF1000 1
Ny lesing av en ekstra-innfil nederst i konstruktøren til Institutt:// Oppg. 12 if (new java.io.File("oppmeldinger.txt").exists()) { fil = new In("oppmeldinger.txt"); while (! fil.endOfFile()) { studenter[antStudenter] = new Student(fil.inWord("\n\r;")); Student stud = studenter[antStudenter]; int antKurs = fil.inInt("; "); stud.antKurs = antKurs; for (int i = 0; i < antKurs; i++) { stud.kurs[i] = finnKurs(fil.inWord()); stud.grupper[i] = stud.kurs[i].grupper[fil.inInt()]; stud.kurs[i].meldPåStudent(stud); stud.grupper[i].meldPåStudent(stud); } System.out.println("Lest fra fil: " + stud.navn + " med sine " + antKurs + " kurs."); antStudenter++; } fil.close(); }
Skriving av samme datafil:
(Dette kan du programmere selv, det blir det omvendte av koden ovenfor...)
KJØREEKSEMPEL: Lest fra fil: Jon med sine 3 kurs. Lest fra fil: Kari med sine 2 kurs. Lest fra fil: Martin med sine 1 kurs. 1 - meld student på kurs 2 - lag timeplan for student 3 - avslutt program 4 - meld student av kurs valg: 2 Gi navn på studenten: Jon Timeplan for Jon kl\dag mandag tirsdag onsdag torsdag fredag lørdag ---------------------------------------------------------------------- 8 | MAT1000 9 | 10 | INF1000 11 | INF1000:g1 12 | BIO1000 13 | 14 | 15 | 16 | BIO1000:g1 MAT1000:g2
Oppgaver til terminaltimen
- Kursoppmeldingssystemet:  Oppgave 9, 10, 12 i kap. 8 (side 176)
(Samme oppgaver som i punkt 4, 5, og 6 for teoritimen).(Se løsningsforslagene ovenfor.)
- Kom i gang med Oblig 3:
Ta utgangspunkt i den versjonen av Oblig 3 du har valgt (HybelHus eller Pi), og ut fra oppgaveteksten:
(a) Finn ut et første forslag til hvilke klasser du vil ha i besvarelsen din, og hvilke variabler du vil ha i hver klasse. Tegn et UML-klassediagram.
(b) Bestem forholdene mellom klassene, dvs. hvilke klasser skal ha pekere til hvilke klasser, og hvor mange (dvs. om pekerne skal være enkle variabler eller arrayer). Navngi forholdene og sett på antall i hver ende.
(c) Begynn å skrive koden for Oblig 3, og finn ut hvilke metoder du vil ha i de ulike klassene. Til å begynne med skriver du tomme deklarasjoner (metoder uten noe kode inni) slik at du kan kompilere programmet og teste det underveis mens du skriver det. Revidér og gjenta punkt (a) til (c) inntil programmet fungerer som det skal.
NB! Det viktigste i oblig 3 er at du skriver din egen løsning selv. Det er lov å diskutere med andre hvordan du tenker å gå frem for å løse deloppgavene, men det er ikke lov å kopiere programbiter fra obliger skrevet av andre, heller ikke hvis du deretter endrer på disse programbitene. Andre typer kilder er ofte ok, men skal nevnes øverst i programmet hvis det ikke er kurs-websidene eller læreboka. Skriv også øverst hvem du evt. samarbeidet med.
- (Ingen nøtt denne uka, oppgavene nevnt over er utfordrende nok!, særlig Oblig3-Pi)