Stringer er ordentlige objekter. Uke 8 - Mer om objekter og klasser. Tips Oblig3. Eksempel Student med en konstruktør

Like dokumenter
Null, && og søppeltømmeren. INF Forelesning 9: Mer om objekter og klasser, tips til oblig 3. Eksempel Student med én konstruktør

INF Forelesning oppsummering forts. Et meget enkelt banksystem. Oppsummering om klasser, objekter, pekere og.

Uke 7 Mer om Objekter, klasser og pekere; 27. Sept og 4. okt. 2011, Arne Maus Inst. for informatikk, UiO

Et meget enkelt banksystem

Uke 7 Mer om Objekter, klasser og pekere; UML. 10. okt. 2013, Arne Maus Inst. for informatikk, UiO

Uke 7 Mer om Objekter, klasser og pekere;

Uke 7 Mer om Objekter, klasser og pekere;

INF1000: Forelesning 7. Konstruktører Static

INF1000: Forelesning 7

(! )! #!! *#+,$&!! &#$

3 #$ *#+,$&!! &#$ (! )! #! 6 &#)%#. / 5$ #%#.67 / "## #&! %# # & #!!& %&$ # $!!!!# $#

Hva skal vi lære i dag? Inf1000 (Uke 9) UML og enda mer om klasser. Hvilke lesemetoder finnes? Filbehandling. Repetisjon om filbehandling UML

Objekter. Uke 7 og 9 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

Inf1000 (Uke 9) UML og enda mer om klasser

Hva skal vi lære i dag? Inf1000 (Uke 9) UML og enda mer om klasser. Hvilke lesemetoder finnes? Filbehandling

Uke 6 og 7 - Objekter, klasser og pekere; 23. og 30. sept. 2008, Arne Maus Inst. for informatikk, UiO

Uke 6 og 7 - Objekter, klasser og pekere; 22. og 29. sept. 2009, Arne Maus Inst. for informatikk, UiO

Uke 6 og 7 - Objekter, klasser og pekere; Verden består av mange objekter, noen ganske like, noen ulike

Objekter. Uke 6 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

Objekter. Uke 8 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

Oblig 4Hybelhus litt mer tips enn i oppgaven

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Inf1000 (Uke 7) Objekter, klasser og pekere

( & ( &/ 2& , )-. &* &/ ),* 0, &/ 2 ) *

! " ##$ % 4 2, &/ ( & +, )-. &* &/ ),* 0, 1 1 ( &/ 2& &, & &/ &,, &/" 2 &/ 2 ) *

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

Inf1000 (Uke 9) UML og enda mer om klasser

Oblig 3 to versjoner. INF Forelesning 8: Objekter, klasser og pekere. Verden består av mange objekter: noen ganske like, andre ulike

Uke 7 - Objekter, klasser og pekere (+ litt først om args[])

Oblig 3 tips litt mer tips enn i oppgaven

Klasser, objekter, pekere og UML. INF gruppe 13

Repetisjon. INF gruppe 13

INF1000: noen avsluttende ord

Oblig 3 tips litt mer tips enn i oppgaven

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

INF1010 UML. Marit Nybakken 26. januar 2004

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

2 Om statiske variable/konstanter og statiske metoder.

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Oblig4Hybelhus (INF Høst 2013) én av to mulige oppgaver for oblig4 (du løser denne eller Oblig4Pi)

Hva er en metode. Hva skjer når vi kaller en metode

INF1000: noen avsluttende ord

INF Uke 10. Ukesoppgaver oktober 2012

Løsningsforslag ukeoppg. 7: okt (INF Høst 2010)

Oblig4 - forklaringer. Arne og Ole Christian

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

Gulbrand Grås husleiesystem

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Oblig 4 (av 4) INF1000, høsten 2009 Værdata, leveres innen 6. nov. kl

(MVC - Model, View, Control)

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

UNIVERSITETET I OSLO

Oblig3Hybelhus (INF Høst 2011) én av to mulige oppgaver for oblig3 (du løser denne eller Oblig3Pi)

INF1000 : Forelesning 4

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

UNIVERSITETET I OSLO

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

2 Om statiske variable/konstanter og statiske metoder.

Seminaroppgaver IN1010, uke 2

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

INF1000: Forelesning 6. Klasser og objekter del 1

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Løse reelle problemer

Inf1000 (Uke 7) Objekter, klasser og pekere

Oversikt. Inf1000 (Uke 7) Objekter, klasser og pekere. Løkker gjør setninger flere ganger. Variable, deklarasjon og tilordning

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

INF1000 Metoder. Marit Nybakken 16. februar 2004

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Hva er en metode? INF1000 Forelesning 8. Hva skjer når vi kaller en metode? Hvorfor bruke metoder?

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Del 1 En oversikt over C-programmering

Introduksjon til objektorientert programmering

Fra problem til program

INF1000 : Forelesning 3

Løsningsforslag til eksamen i INF1000 våren 2006

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

Obligatorisk oppgave nr. 3 (av 4) i INF1000, V-2007

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

INF1000 Forelesning 8. Litt repetisjon: Metoder og klasser Innkapsling av variable og metoder Hvordan gripe an et stort problem?

Oblig3-forklaringer (særlig π -oppgaven)

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

UNIVERSITETET I OSLO

Transkript:

Stringer er ordentlige objekter Uke 8 - Mer om objekter og klasser. Tips Oblig3 3. mars 2008 Arild Waaler Inst. for informatikk, UiO String er en klasse i Java-biblioteket, men har en egen spesiell syntaks (skrivemåte) så det ser ut som den er en av de basale typene (som int, double,..). Når vi har en string, har vi alså både en peker (den vi deklarerer navnet på) og et stringobjekt. String-objekter kan ikke endres (trenger du endrbare tekster, bruk klassen StringBuffer) Egen skrivemåte for stringkonstanter: String s = En fin dag i mai ; Er det samme som: String s = new String( En fin dag i mai ); Klassen String inneholder mer enn 50 metoder for konvertering mellom ulike datatyper og tekst, samt tekstsøking. 1 2 Konstruktører startmetoder i klasser Eksempel Student med en konstruktør Når vi lager et objekt av en klasse med new, kaller vi egentlig en metode som heter det samme som klassen (derfor parentesen bak klassenavnet). Vi får automatisk med en slik konstruktør-metode fra oversetteren dersom vi ikke skriver en slik konstruktør selv. Den vi får automatisk er uten parametere og gjør ingen ting. Konstruktører nyttes i all hovedsak til å gi fornuftige startverdier for variable i objektet som dannes. De konstruktørene vi skriver kan ha parametere. Konstruktørene skal ikke ha noen type foran seg, heller ikke void. Vi kan ha flere konstruktører i en klasse, men da må parameterne være ulike i antall eller typen av parametrene 3 class Student { String navn; Kurs [] minekurs = new Kurs[3]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ minekurs[i] = k[i]; minekurs[i].antstudenter++; 4

Eksempel Student med 2 konstruktører this class Student { String navn; Kurs [] minekurs = new Kurs[3]; Student() { minekurs = new Kurs[0]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ minekurs[i] = k[i]; minekurs[i].antstudenter++; 5 Av og til trenger vi en peker til det objektet metoden vi utfører er inne i. Java-ordet this gir oss alltid det. Brukes i to situasjoner: Vi har en konstruktor, og parametrene til denne heter det samme som objekt-variable i objektet. Eks: class A { int antall; A (int antall ){ this.antall = antall; // end A.. A apek = new A(12); Vi skal kalle en metode i et annet objekt (gjerne av en annen klasse). Da kan vi bruke this for å overføre en parameter til denne metoden om hvilket objekt kallet kom fra. 6 UML-diagrammer av programmene våre Klassediagrammer Hvorfor tegne diagrammer over programmene Oversikt Samarbeid med andre programmererer / systemutviklere Arkitekter, ingeniører tegner først, så bygger de! Enklere å endre en tegning enn programmet Objektdiagrammer Klassediagrammer UML diagrammene er litt annerledes enn det vi har tegnet hittil (men mye av det samme) (i UML er det ca 10 andre diagramtyper vi ikke skal lære) En mer kompakt måte enn objektdiagrammer å tegne sammenhengen i programmet Skiller seg fra objektdiagrammer ved at vi ikke direkte tegner datastrukturen (pekere og pekerarrayer), men bare forhold (assosiasjoner, forbindelser) mellom klassene. I klassediagrammer dokumenterer vi også sentrale metoder. Forholdene er linjer med et logisk navn og antall objekter i hver ende Anta at vi har laget en class Konto med tre objektvariable: saldo, eier og adresse og en metode: settinn(). 7 8

Tre (fire) mulig felter i tegning av en klasse Navnefeltet (alltid) klassenavnet Kan utelates: Variabelfeltet (attributtene) variabelnavn evt. med type Metode-feltet Evt med parametere og returverdi (Unntaks-feltet) UML Klassediagrammet kan nyttes til Modell av problemområdet (domenemodell) Modell av klassene i programmet (+ modell av databasen,...) Men siden vi skal modellere virkeligheten en-til-en i programmet vårt, så blir de like i utgangspunktet Symboler for synlighet (fra resten av programmet) + public - private # protected ~ package 9 10 Forhold mellom klasser En student har null eller flere eksamener Vi tegner et forhold mellom to klasser som har med hverandre å gjøre logisk sett, og: hvor vi i programmet vil kunne følge pekere for åfåadgang til variable eller metoder Vi skriver hvor mange objekter det maksimalt på ett tidspunkt kan være på hver side av et slikt forhold Siden vi med: Eksamen mener en avlagt enkelt-eksamen vil en Eksamen bare være tilknyttet en bestemt student antall Student Navnet på forbindelsen antall Eksamen Forbindelsen leses fra venstre: En student har tatt null, en eller flere Eksamener Antallet objekter angis slik: 11 12

Studentregister2 med tillegg: klassen Kurs vet hvilke Studenter som tar kurset Et studentregister holder orden på studentene og kursene, og en student tar 3 kurs hvert semester Regler for å plassere riktige antall på et forhold 1. Anta at du står i ett objekt av en klasse og ser over til (langs en forbindelse) til en annen klasse: 2. Hvor mange objekter ser du da maksimalt på et gitt tidspunkt av den andre klassen 3. Det antallet noteres (jfr. tabellen) på den andre siden 4. Du går så over forbindelsen til den andre klassen og antar at du nå står i ett objekt av denne klassen og gjenntar pkt. 1-3 13 14 Hvilke forhold skal vi ha med i klassediagrammet? Slike forhold hvor ett objekt av den ene klassen: inneholder består av eier,.. en eller flere objekter av den andre klassen Det vi i programmet vil følge en peker for å få tak i verdien på visse variable i den andre klassen eller kalle en metode. Det er da ikke naturgitt hvilke forhold vi har i et klassediagram, det avhenger av hvilke spørsmål vi vil være interessert i å svare på. Objekt-diagrammer Vi tegner en typisk situasjon av objekter i systemet vårt, når vi har fått datastrukturen på plass. Vi tegner og navngir bare de mest sentrale dataene som: pekere peker-arrayer noen sentrale variable i objektene 15 16

Tegning av et objekt (med mer eller mindre detaljer) Andre elementer i et objektdiagram To eller ett felt(er) i en boks Navnfeltet objektnavn:klassenavn eller bare :klassenavn Attributt-feltet (kan være tomt) Navnet på sentrale objektvariable evt. også med verdier Pekere Peker-arrayer 17 18 Eksempel: Et CD-samling Vi ønsker å lage et lite menystyrt program for å holde orden på CD-samlinga vår med mindre enn 1000 CDer. Vi skal ha funksjoner for å : registrere ny CD Søke etter artist (skriv ut alle platene med denne) Skrive ut hele registeret Hvilke klasser har vi i dette problemet Opplagt class CD Noen fler? Klassene: CD og CDsamling Vi tenker oss følgende datastruktur (er den tilstrekkelig?) Vi har her forenklet programmet (klassen CDSystem inneholder main,cdsamling meny-metode og sentral switch i løkke-metoden,..., mens CD inneholder utskriftsrutine. :CDSystem 19 20

import easyio.*; class CDSystem { public static void main(string args []) { new CDsamling().løkke(); class CD{ String artist, tittel; void skrivut(out u) { u.outln("artist:" + artist + ", Tittel:" + tittel); class CDsamling{ CD [] minsamling = new CD[1000]; int antcder = 0; void løkke() { In tast = new In(); Out skj = new Out(); String a; CD c; int valg; do{ skj.outln("velg:"); skj.outln(" 1 - les ny plate (skriv artist platetittel"); skj.outln(" 2 - skriv artist"); skj.outln(" 3 - avslutt"); valg = tast.inint(); switch(valg) { case 1: // les data c = new CD(); minsamling[antcder++] = c; skj.out("gi artistnavn:"); c.artist = tast.inword(); skj.out("gi tittel:"); c.tittel = tast.inword(); break; case 2: // skriv data skj.out("gi artistnavn:"); a = tast.inword(); for(int i = 0; i < antcder; i++) if (minsamling[i].artist.equals(a)) minsamling[i].skrivut(skj); break; case 3: // avslutt skj.out("systemet avslutter"); break; default: // feil skj.out("bare gi verdier: 1-3"); while (valg!= 3); Et helt studentregister med kurs, studenter og registeret >java CDSystem Velg: 1 - les ny plate (skriv artist platetittel 2 - skriv artist 3 - avslutt 1 Vi har Studenter på Ifi som første semester tar tre Gi artistnavn:tom kurs, samtidig som vi har behov for å registrere kurs Gi tittel:fest1 Velg: og hvor mange studenter som tar hvert kurs. 1 - les ny plate (skriv artist platetittel 2 - skriv artist Vi tegner først en tenkt datastruktur 3 - avslutt et UML objektdiagram 1 Gi artistnavn:ola så skriver vi programmet Gi tittel:fullfres Velg: 1 - les ny plate (skriv artist platetittel 2 - skriv artist 3 - avslutt 2 Gi artistnavn:tom Artist:tom, Tittel:Fest1 Velg: 1 - les ny plate (skriv artist platetittel 2 - skriv artist 3 - avslutt 24

Objektdiagrammet er en forenkling av programmet. Det tar bare med den essensielle datastrukturen (mest pekere og peker-arrayer) som holder datastrukturen sammen class StudentRegister2{ public static void main(string args []) { String [] kurskode = {"INF1000","INF1040","MAT1030"; // lag kurs Kurs [] infkurs = new Kurs[3]; for (int i = 0 ; i< infkurs.length; i++) infkurs[i] = new Kurs(kurskode[i]); //lag studenter på informatikk bachelor Student [] stud = new Student[3]; stud[0] = new Student("Ola N", infkurs); stud[1] = new Student("Åsne S",infKurs); stud[3] = new Student(); for (int i = 0 ; i< stud.length; i++) stud[i].skrivut(); class Student { String navn; Kurs [] minekurs = new Kurs[3]; Student(){mineKurs = new Kurs[0]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ minekurs[i] = k[i]; minekurs[i].antstudenter++; >java StudentRegister2 Student med navn:ola N, og kurs: INF1000 INF1040 MAT1030 Student med navn: sne S, og kurs: INF1000 INF1040 MAT1030 Student med navn:null, og kurs: Sammenligning: Objektdiagram og Klassediagram void skrivut() { System.out.println("Student med navn:"+ navn+ ",og kurs:"); for (int i = 0;i < minekurs.length; i ++) System.out.println(mineKurs[i].kurskode); class Kurs { String kurskode ; int antstudenter = 0; Kurs(String k) { kurskode = k; 27

Generelt om Oblig 3 Les oppgaveteksten nøye! Ikke gjør mer enn det er spørsmål etter! Identifiser objektene og bestem datastruktur for hver klasse som du trenger Tegn gjerne en figur over objektene og datastrukturen. Da er det lettere å programmere Skaff deg oversikt over spesielle teknikker du trenger å bruke, i dette tilfelle lesing fra og skriving til fil Skriv koden gradvis og test ut metoder etter hvert som du skriver dem Skriv gjerne først de metodene som er nødvendig for å få en enkel prototype av programmet ditt opp og kjøre! Utsett for eksempel filbehandlingen til slutt! 29 4 klasser er angitt i oppgaveteksten class Oblig3 her legger vi main-metoden som sparker det hele i gang. fra denne klassen oppretter vi et Hybelhus-objekt og kaller en metode i dette objektet som styrer interaksjonen med brukeren class Hybelhus her ligger den sentrale datastrukturen og metoder for alle funksjonene i menyen vi initialiserer datastrukturen for hybelhuset i konstruktøren class Hybel info knyttet til en hybel: leietager og utestående class Student info knyttet til student: navn og saldo 30 class Oblig3 forslag til kode Enkel skisse av datastrukturen public class Oblig3 { public static void main(string[] args) { Oblig3 oblig3kjøring = new Oblig3(args); Det eneste main-metoden trenger å gjøre, er å opprette et objekt av klassen Oblig3 Hybelhus-objektet Hybel-objekt Student-objekt Oblig3(String[] inputfiler){ String datafil = "HaiHus.data"; String strømfil = "Lysregning.data"; if( inputfiler.length > 0 ) Default filnavn som i oppgaveteksten, men med mulighet for endringer fra kommandolinjen. Bra for debugging du kan lett bruke andre testfiler! datafil = inputfiler[0]; if( inputfiler.length > 1 ) strømfil = inputfiler[1]; Filnavnene overføres til konstruktøren for Hybelhus-klassen Hybelhus utsyn = new Hybelhus(datafil,strømfil); utsyn.kommandoløkke(); Så overfører vi kontrollen til metoden i utsyn som styrer brukerinteraksjon 31 32

class Hybelhus: forslag til datastruktur Konstruktøren til Hybelhus-klassen public class Hybelhus { private String datafil; private String strømfil; final int ANT_KOR = 4; final int ANT_ROM = 8; final String TOM_HYBEL = "TOM HYBEL"; private int totalfortjeneste; private int antallhybelmånedermedtommehybler; private int totaltantallmåneder; In tastatur = new In(); Out skjerm = new Out(); private Hybel[][] hyblene = new Hybel[ANT_KOR][ANT_ROM]; private skjuler variable for andre klasser. Dette er god programmeringsskikk! final markerer at verdiene ikke kan endres. Det er vanlig at slike konstanter har store bokstaver. Variable for informasjonen som leses fra datafilen. 33 Konstruktøren utføres når et objekt opprettes og aldri siden. I konstruktøren er det vanlig å gi startverdier til datastrukturen. Konstruktøren mottar gjerne argumenter med informasjon som den trenger for å gi startverdier. Siden poenget med denne oppgaven er å trene på å lage en objekt-orientert modell, skal jeg vise i detalj hvordan man kan foreta innlesning fra datafilen i konstruktøren Tips om lesing fra strømfilen står i oppgaveteksten. Skriving til filer må dere selv finne ut av (se kap. 3 i boka!). Vær nøye med å teste ut koden steg for steg! Når dere kommer til skriving av fil, vær nøyaktig med å teste at filen ser akkurat slik ut som den skal etter skriving! Tips ved innlesning: Skriv ut til skjerm samtidig som dere leser inn. Lurt for feilsøking! 34 class Hybelhus: forslag til konstruktør Nyttig metode i class Hybelhus Hybelhus( String datafil, String strømfil ) { void listleietagere(){ this.datafil = datafil; for(int i = 0; i < ANT_KOR; i++){ this.strømfil = strømfil; for(int j = 1; j < ANT_ROM; j++){ //Tar ikke med fellesarealene her skjerm.outln("leser fra " + datafil + ":"); skjerm.out(i+1); In hybelfil = new In(datafil); skjerm.out((char)(j+'a') + " "); for(int i = 0; i < ANT_KOR * (ANT_ROM - 1); i++) { Student student = hyblene[i][j].getleietaker(); int gang = hybelfil.inint(";"); skjerm.out(gang); if(student!= null) char bokstav = hybelfil.inchar(";"); skjerm.out(bokstav); skjerm.outln(student.getnavn() + " " + student.getsaldo()); String studentnavn = hybelfil.inword(";"); skjerm.out(" " + studentnavn); else int saldo = hybelfil.inint(";"); skjerm.outln(" " + saldo); skjerm.outln(tom_hybel + " " + hyblene[i][j].getutestående()); hybelfil.readline(); //for å bli kvitt resten av linja hyblene[gang - 1][(int)(bokstav - 'A')] = new Hybel(studentnavn.trim(), saldo); Her har jeg brukt en vanlig Java-konvensjon når metodene for å hente dataverdi begynner med get. totaltantallmåneder = hybelfil.inint(";"); Metodene for å oppgi verdier skal begynne med antallhybelmånedermedtommehybler = hybelfil.inint(";"); set ifølge konvensjonen. NB! Bruk alltid slike totalfortjeneste = hybelfil.inint(";"); metoder for å aksessere variable i en annen klasse og la variablene være deklarert private. Alt annet hybelfil.close(); er dårlig programmeringsskikk og gir i lengden 35 opphav til stygge bugs! 36

Videre jobbing med class Hybelhus: og de andre klassene Begynn gjerne med å lage metoden for å styre menyen jeg har kalt denne kommandoløkke(). Identifiser alle metodene du skal kalle herfra. Tenk igjennom hva hver metode skal gjøre og hvordan den skal gjøre det FØR du begynner å skrive kode. Bruk gjerne små skisser og stikkord. Spesielt må du tenke over hvilke metoder du trenger fra de andre klassene og hvordan dataverdier skal endres. Utfordringen er å bryte oppgaven du skal løse ned i mange småproblemer som hver for seg er enkle å løse og så sette sammen løsningene av småproblemene slik at de sammen kan løse hele For klassene Hybel og Student gjelder det samme: list opp alle metodene du trenger og tenk over hvilke data disse trenger. Hvordan skal de få tak i informasjonen de trenger? Husk at du aldri bør kode overalt samtidig. Når du har fått en viss oversikt, skriv kode for de enkle metodene først og test dem grundig før du går videre. Ikke lås deg til en bestemt løsning og datastruktur fra starten. Ofte mangler vi oversikt når vi begynner, og blir nødt til å endre konstruksjonen av programmet underveis fordi det dukker opp ting vi ikke hadde tenkt på da vi startet. Dette er heller regelen enn unntaket! oppgaven. 37 38 og til slutt vil jeg bare ha sagt at: Å jobbe med obligene er det du lærer mest av i kurset. Bruk boka aktivt som oppslagsverk i denne prosessen. Studer relevante programeksempler i boka! Det er utrolig mye lettere å lære seg noe når du trenger det for å løse en oppgave enn å lære seg det bare for å lese til eksamen! Prøv å bli litt kjent med Java API samtidig. Det er gøy! Java-verdenen er stor og interessant. Prøv deg frem på egen hånd! 39