Innhold. INF1000 (Uke 11) Programmering. Rep: Metoder. Rep: Hva er en metode? Litt repetisjon. To måter å programmere på



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

INF1000 (Uke 11) Programmering

Inf1000 (Uke 10) Oppgaveløsning. Hashmap

To måter å programmere på. INF1000 : Forelesning 9. Programmering uten objekter. Programmering med objekter: Eksempel på programmering uten objekter

Uke 11 noen tips og råd + eksempel. Noen muligheter. Valg av datamodell: eksempel. Valg av datamodell: oblig 4

1. Separatorer (skilletegn) i easyio

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

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

To måter å programmere på. Java 12. Programmering med objekter. Statisk programmering

To måter å programmere på. Java 12. Objektvariable. Objektvariablenes levetid. Statisk programmering: Programmering med objekter: Dagens forelesning:

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

Oblig4 - forklaringer. Arne og Ole Christian

Oblig4 - forklaringer. Arne og Ole Christian

Uke 9 INF okt 2012 Om separatorer I easyio, Eliza (bruk av HashMap), + mer om metoder og klasser. Arne Maus OMS, Ifi, UiO

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

s 678 * Hvordan designe og programmere objektorientert * Støtte til oppstart på Oblig 4: Jobbe frem eget forslag til datastruktur

INF 1000 høsten 2011 Uke 10: 25. november

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

INF1000: Forelesning 7. Konstruktører Static

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

INF1000: Forelesning 7

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

Råd 1: Programmer ovenfra ned. INF1000 Uke 10. Gruppering etter eier. Velg datastruktur etter hva som skal gjøres!

INF1000 Uke 10. Hvordan gripe an et stort problem? 5 råd Noen eksempler du kan overføre til Oblig 4 Oblig 4 kort oversikt Et større programeksempel

Dagens tema Kapittel 8: Objekter og klasser

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

Inf1000 (Uke 8) Mer om objekter og filbehandling

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

INF Uke 10. Ukesoppgaver oktober 2012

Dagens plan. Inf1000 (Uke 8) Mer om objekter og filbehandling. Hva er en metode. Mer om metoder/klasser/objekter. Tilslutt noen råd til oblig 3

Dagens plan. Inf1000 (Uke 8) Mer om objekter og filbehandling. Hva er en metode. Mer om metoder/klasser/objekter. Tilslutt noen råd til oblig 3

UNIVERSITETET I OSLO

Oversikt. En del repetisjon. Noen generelle råd INF1000 Uke 10 Gjennomgang av et eksempel. Kunstig intelligens? INF1000-seminar

UNIVERSITETET I OSLO

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

Forelesning inf Java 4

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

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

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

INF1000: Forelesning 6. Klasser og objekter del 1

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

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

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

Enkle generiske klasser i Java

Blokker og metoder INF1000 (Uke 6) Metoder

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

INF1000 : Forelesning 4

Forelesning inf Java 5

Forelesning inf Java 5

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

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

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

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

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

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

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

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

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

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

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

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

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

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

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

Gjennomgang av eksamen H99

Inf1000 uke 5 18.sept. 2007

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

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

INF1000 (Uke 6) Mer om metoder, tekster

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

Introduksjon til objektorientert programmering

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

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

UNIVERSITETET I OSLO

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

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

UNIVERSITETET I OSLO

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

Repetisjon. INF gruppe 13

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

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

INF1000 (Uke 6) Mer om metoder, tekster

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

Orakeltjeneste på Abel Hjelp til Obligatorisk oppgave 2. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. Rep: Metoder

Transkript:

Innhold Litt repetisjon INF1000 (Uke 11) Programmering To måter å programmere på Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen 2006-04-03 2 Rep: Hva er en metode? Rep: Metoder En metode er et valgfritt antall programsetninger som vi gir et navn Java: All kode i programmet er inne i en metode, som igjen inneholdes i en klasse Skille mellom Deklarasjon (skrive Java-kode og kompilere) Utføring (det som skjer når vi kaller metoden) Når vi deklarerer en metode, skjer det ingen ting En metode utføres hver gang den kalles fra koden i en annen metode: Utførelsen av programmet hopper til starten av den kalte metoden Har den kalte metoden parametere, kopieres verdiene brukt i kallet til metodens parameter-variable 2006-04-03 3 2006-04-03 4

Hva skjer når vi kaller en metode? Når vi kaller en metode, blir det opprettet et metodeobjekt, og verdiene brukt i kallet til parameterne blir kopiert over Dette metodeobjektet inneholder alle lokale variabler og parameterne til metoden når setningene i metoden utføres, brukes disse variablene og parametrene av metoden metodeobjektet fjernes automatisk når metoden er ferdig utført og returnerer Merk forskjellen på å deklarere en metode, og at den utføres 2006-04-03 5 class C { int skrivantall(int i){ System.out.println(" Du har kalt meg med:" + i); return i+10; >java D gj rmye kalt class D { Du har kalt meg med:2 static int dobbel( int k) { 1.verdien av j:12 return 2*k; 2.verdien av j:24 Du har kalt meg med:24 void gjørmye(c cc, int v) { System.out.println(" gjørmye kalt"); 3.verdien av skrivantall(j):34 int j = cc.skrivantall(v); System.out.println(" 1.verdien av j:" + j); j = dobbel(j); System.out.println(" 2.verdien av j:" + j); System.out.println(" 3.verdien av skrivantall(j):" + cc.skrivantall(j) ); public static void main ( String[] args) { C c = new C(); D megselv = new D(); megselv.gjørmye(c,2); Hvorfor bruke metoder? Vi deler opp programmet i metoder fordi: Noen program setninger brukes flere steder, eller: Vi vil dele opp programmet i mindre deler Ingen metode bør være lenger enn 30 linjer (og helst mindre) Hver del gjør noe veldefinert som fremgår av navnet: regner ut en bestemt formel skriver ut en meny leser noen data fra terminal eller fil tegner ut opplysninger på skjermen. Problemløsning med metoder Når vi har laget en metode, og vi har forsikret oss om at den er riktig, så har vi laget en ny operasjon Denne operasjonen er tilgjengelig i resten av koden, kan benyttes som om den var innebygd i Java eks: skrive ut en meny, regne ut en bestemt formel,.. Trenger ikke tenke på alle detaljene om hvordan denne operasjonen blir utført, bare at den blir gjort Vi har da laget et (lite) verktøy som kan gjenbrukes og lettere løse vårt større problem (hele systemet) 2006-04-03 7 2006-04-03 8

Bottom-up Denne måte å programmere på heter bottom-up programmering og benyttes mye Eks: Java-biblioteket kan best forstås som en diger verktøykasse med nyttige operasjoner og datastrukturer som vi kan (og ofte bør) bruke for å lage vårt program Hva er en klasse? En klasse er en beskrivelse av hvordan ett objekt av en bestemt type i vårt problem er Inneholder variable som beskriver egenskaper for ett slikt objekt eks: Navn, adresse, studiepoeng, kurs for klassen Student Registreringsnummer, eier, type, årsmodel for klassen Bil Inneholder metoder som er fornuftig handlinger for ett slikt objekt eks: skrivutvitnemål(), meldpåemne(),.. i klassen Student beregnårsavgift(), skifteier(),.. i klassen Bil 2006-04-03 9 2006-04-03 10 Skille mellom deklarasjon og bruk av en klasse Når vi deklarerer en klasse (= skriver Javakode for) skjer det ingen ting i programmet Når vi oversetter og starter opp programmet vårt med javac og java, skjer lite : De variable og metodene det står static foran blir tilgjengelige Ingen kode (med unntak av main) utføres Skille mellom deklarasjon og bruk av en klasse Først når vi sier new på en klasse, får vi laget et objekt av klassen Objektet inneholder alle variable og metoder som ikke har static foran deklarasjonen (objekt-variable og metoder) Når vi sier new, kaller vi en konstruktør-metode i klassen, og først når den er ferdig, returnerer new det med det nye objektet 2006-04-03 11 2006-04-03 12

class Konto1 { String eier; int kontonum, saldo = 0; Konto1(String e) { eier = e; void settinn(int beløp) { saldo = saldo + beløp; boolean taut(int beløp) { // moderne bank med muligheter for overtrekk saldo = saldo - beløp; return saldo > 0; class Bank1 { Konto1 [] kontiene = new Konto1[100000]; public static void main( String[] args) { Bank1 b = new Bank1(); for (int i = 0; i < b.kontiene.length; i++) { b.kontiene[i] = new Konto1("kunde nr." + i); b.kontiene[i].settinn(100); Forskjeller mellom klasser og metoder Begge lager objekter når de kalles, MEN Et metode-objekt: fjernes når metoden returnerer inneholder bare variable og parametere som alle er skjult for resten av programmet Et objekt laget med new fra en klasse: er i hukommelsen etter at det er laget (så lenge det minst er en peker som peker på det) kan inneholde både metoder og variable, som kan nyttes av resten av programmet (med en peker og.) 2006-04-03 14 Innkapsling For små systemer hvor alle.java filene ligger på samme filområde, gjelder Vi ønsker ofte at resten av systemet bare skal se deler av et objekt eks: int saldo i Konto1-objektet bør være skjult, resten av programmet skal bare bruke settinn() og taut() metodene. Vi kan regulere tilgangen til variable og metoder ved å sette enten: private public protected foran en metode eller deklarasjonen av en variabel 2006-04-03 15 ingenting foran en deklarasjon/metode Fullt tilgjengelige for alle annen kode kompilert på samme filområde, men usynlig /sperret for kode kompilert på andre filområder private foran en deklarasjon/metode Bare synlig fra kode i metoder deklarert i samme klasse, usynlig/sperret for all annen kode protected foran en deklarasjon/metode Synlig i samme klasser og subklasser og synlig i klassene på samme filområdet, men usynlig/sperret i andre klasser (på andre filområder) public foran en deklarasjon/metode Synlig for all annen kode 2006-04-03 16

Innkapsling Delvis sperring av adgang til en variabel, sikrer oss at vi selv kan fullt ut bestemme hvordan variabelen skal endres To måter å programmere på Statisk programmering: Var fokus i starten av kurset Vi lager ikke objekter av klassene Alle variable og metoder er deklarert som static Begrepsmessig enkelt, men lite egnet for større programmer Programmering med objekter: Er fokus for resten av kurset (og eksamen). Vi lager objekter av klassene (noen eller alle) Variable og metoder er vanligvis ikke deklarert som static Begrepsmessig noe mer komplisert, men mye bedre egnet for større programmer 2006-04-03 17 2006-04-03 18 Objektvariable Objektvariablenes levetid Objektvariable er variable på klassenivå som ikke er deklarert som static. For hvert nytt objekt får vi et fullt sett med nye objektvariable: class Student { String navn; String fnr; new Student (); new Student (); new Student (); navn: Per Hansen fnr: 120876 99921 navn: Anne Borg fnr: 181154 81191 class Student { String navn; String fnr; Disse variablene blir deklarert når vi lager et objekt av klassen ved å skrive new Student(), og de lever så lenge objektet lever. Objektvariablene blir til når objektet blir til (med new) Objektvariablene lever så lenge objektet finnes navn: Kari Normann fnr: 090888 12345 2006-04-03 19 2006-04-03 20

Klassevariable Klassevariablenes levetid Klassevariable er variable på klassenivå som er deklarert som static. Vi får aldri mer enn ett sett av klassevariable. class Person { static int maxalder=100; int alder=0; String navn=""; maxalder = 100 når klassen refereres første gang new Person (); new Person (); new Person (); alder: 0 navn: alder: 0 navn: alder: 0 navn: class Person { static int maxalder=100; int alder=0; String navn=""; Denne variabelen blir deklarert når klassen Person blir referert til for første gang under kjøringen av programmet. Variabelen lever helt til programmet avsluttes. Første gang klassen Person blir referert til = første gang programeksekveringen "møter på" Person-klassen, f.eks. : new Person() Person.maxAlder Person.metode() 2006-04-03 21 2006-04-03 22 Oppsummering: Klassevariable og objektvariable Objektvariable Bare definert i objekter av en klasse. Hvert objekt har sitt eget sett med objektvariable. Klassevariable Definert selv om det ikke er laget objekter av klassen. Alle objekter av klassen deler de samme klassevariablene. Klassemetoder og objektmetoder Klassemetoder (static-metoder) Definert selv om det ikke er laget noen objekter av klassen Kan ses av alle objekter av klassen Kan brukes av andre gjennom dot-notasjon: <klassenavn>.metode() Har ikke tilgang til objektvariable eller objektmetoder Objektmetoder Bare definert i objekter av klassen Kan ses av objektet som metoden befinner seg i Kan brukes av andre gjennom dot-notasjon: <peker>.metode() Har tilgang til alle variable (både klassevariable og objektvariable) og alle metoder (både klassemetoder og objektmetoder) 2006-04-03 23 2006-04-03 24

Statisk programmering Programmering med objekter class VolumBeregning { static double pi = 3.14; static int maxantall = 10; static double finnvolum(double radius) { static int finnsum(int k) { Alle variable er deklarert som static Alle metoder er deklarert som static 2006-04-03 25 class StudentRegister { Variable er ikke deklarert som static (vanligvis) class Student { String navn; String fnr; void init() { Metoder er ikke deklarert som static (vanligvis) String finnnavn() { 2006-04-03 26 Hvorfor programmere med objekter? (1) Hvordan programmere med objekter (2)? Med objekter kan vi ofte organisere våre data bedre. Eksempel: String [] navn = new String[100]; String [] fnr = new String[100]; int [] tlfnr = new int[100]; Informasjonen knyttet til en bestemt person er splittet opp i tre arrayer. Objekter tillater oss å samle data og tilhørende operasjoner data omstudenter data om ansatte data omkurs student-metoder ansatt-metoder kurs-metoder Her ligger alle data og alle metoder på samme sted Class Person { String navn; String fnr; int tlfnr; Person [] personreg = new Person[100]; Informasjonen knyttet til en bestemt person er samlet i et objekt. Bedre organisering særlig når det er mye data å holde styr på. 2006-04-03 27 class Student { data om studenter student-metoder class Ansatt { data om ansatte ansatt-metoder class Kurs { data om kurs kurs-metoder Metoder og data som hører sammen er samlet. Lett å se hvilke metoder som jobber på hvilke data (modularisering av koden). Lett å kopiere alt som har med personer å gjøre (data+metoder) til andre programmer (gjenbruk). 2006-04-03 28

Hvordan programmere med objekter (3)? Eksempel: Register for studentboliger En rekke studenter class Student En rekke hybler class Hybel Et hybelhus (eller flere) class Hybelhus En objektorientert løsning sørger for at Variabler og metoder som logisk hører sammen også ligger samlet i programkoden Variabler og metoder som ikke har noe med hverandre å gjøre holdes godt adskilt i programkoden Analogi Ville du hjemme hos deg selv plassert verktøy, CD er og søvtøy i samme skuff? Det er sannsynlig at du allerede tenker objektorientert! 2006-04-03 29 2006-04-03 30 Hvordan programmere med objekter Initialisering av variable i et objekt Grunnregel: Et objekt skal inneholde data og operasjoner som naturlig hører sammen. Anta at programmet inneholder denne klassen: class Person { String navn; String fnr; Når vi har laget et objekt (med new) ønsker vi å gi variablene i objektet verdier. Et objekt kan representere: Et objekt i problemdomenet: En konto, en bil, en student, et lån, en eiendom (brukes til å definere datamodell en modell av virkeligheten) Et objekt av mer programteknisk art: Et skjermvindu, en fil, en tekststreng, en tabell (slike objekter ofte ikke del av datamodell bare en effektiv grupperin av sammenhørende programelementer) 2006-04-03 31 Prikk-notasjon Person p = new Person(); p.navn = Petter ; p.fnr = 15108559879 ; Init-funksjon Person p = new Person(); p.init( Petter, 15108559879 ); Konstruktør Person p = new Person( Petter, 15108559879 ); 2006-04-03 32

Finn- og sett-metoder Konstruktør - repetisjon Når man skal lage "virkelige" programmer er det vanlig å Deklarere alle objektvariable som private Bruke finn- og sett-metoder for å endre på objektvariable Konstruktør spesiell type objektmetode som sikrer at objektet opprettes med fornuftige verdier i objektvariablene class Eksempel { Student stud = new Student(); stud.settnavn("petter"); System.out.println(stud.finnNavn()) class Student { private String navn; private String fnr; void settnavn(string navn) {this.navn = navn; String finnnavn() {return this.navn; 2006-04-03 33 Konstruktører Har alltid samme navn som klassen de ligger i Utføres automatisk når et objekt opprettes med new Har ingen returverdi, men skal ikke ha void foran seg Overlastes ofte, dvs det er ofte flere konstruktører i en og samme klasse, hvor konstruktørene skiller seg fra hverandre ved antall parametre og/eller typen på parametrene 2006-04-03 34 Eksempel Når det ikke finnes noen konstruktør Når en klasse ikke inneholder noen konstruktør, vil Java selv føye på en "tom konstruktør" uten parametre når programmet kompileres. Dermed er følgende to klassedeklarasjoner ekvivalente: Merk: dersom klassen inneholder en eller flere konstruktører, vil Java ikke føye på en "tom konstruktør" uten parametre. 2006-04-03 35 2006-04-03 36

Virker dette? Valg av datamodell: eksempel class Oppgave1 { Bil b = new Bil(); class Bil { String regnr; Bil (String regnr) { this.regnr = regnr; 2006-04-03 37 Eksempel: Du har gitt en fil med opplysninger om hvor mange registrerte tilfeller det var av tre ulike sykdommer i Norge hvert av årene 19502000: INFLUENSA KYSSESYKE MENINGITT 1950 1951 1952.. 2000 Hvordan er det naturlig å modellere dette? 2006-04-03 38 Noen muligheter Valg av datamodell: oblig 4 Forslag 1: Gruppere tellinger relatert til samme sykdom class Sykdom { String navn; int[] antalltilfeller = new int[51]; Forslag 2: Gruppere tellinger foretatt samtidig class Aarsdata { int antinfluensa; int antkyssesyke; int antmeningitt; Forslag 3: Ingen gruppering - tre arrayer int[] influensatilfeller = new int[51]; int[] kyssesyketilfeller = new int[51]; int[] meningittilfeller = new int[51]; Forslag 4: Ingen gruppering en 2D-array int[][] sykdomstilfeller = new int[3][51]; Beste datastruktur avhenger av hva du skal bruke dataene til. 2006-04-03 39 Anta at du har gitt en fil med opplysninger om en rekke værstasjoner: 4780 GARDERMOEN 202 ULLENSAKER AKERSHUS 10400 RØROS 628 RØROS SØR-TRØNDELAG 18700 OSLO-BLINDERN 94 OSLO OSLO 25590 GEILO-GEILOSTØLEN 810 HOL BUSKERUD.. Her virker det naturlig å gruppere dataene stasjonsvis: class Stasjon { String nummer; String navn; double høyde; String kommune; String fylke; 2006-04-03 40

Valg av datamodell: oblig 4 Valg av datamodell: oblig 4 For hver værstasjon har du gitt daglige værmålinger for et halvt år: 4780 01 01 1.5 0.0-23.6-13.3 4780 02 01 2.6 0.8-13.7-10.0 4780 03 01 4.6 1.3-17.9-11.7 4780 04 01 4.6 0.1-23.3-16.7 4780 05 01 5.7 0.0-22.9-15.7 4780 06 01 3.1 1.0-22.9-16.0.. Hvordan modellerer vi disse dataene? Svaret er mindre opplagt. 2006-04-03 41 Forslag 1: Ingen gruppering class Stasjon { double[] maxvind; double[] nedbør; double[] mintemp; double[] maxtemp; Forslag 2: Gruppere målinger utført samtidig (dvs gruppere etter dag) class Dagdata { double maxvind; double nedbør; double mintemp; double maxtemp; class Stasjon { Dagdata[] dagdata; 2006-04-03 42 Valg av datamodell: oblig 4 Organisering av veldig små programmer Forslag 3: gruppere etter både måned og dag class Dagdata { double maxvind; double nedbør; double mintemp; double maxtemp; class Maanedsdata { Dagdata[] dagdata = new Dagdata[31]; int antdager; // Antall dager i måneden class Stasjon { Maanedsdata[] mdata = new Maanedsdata[6]; Dette er den varianten som blir anbefalt i hjelpenotatet for oblig 4 I veldig små programmer (noen få linjer) med en enkelt klasse og ingen`objekter av egne klasser, kan all programkode ligge i main-metoden: import easyio.*; import java.io.*; class VeldigLiteProgram { In tast = new In(); System.out.print("Gi et filnavn: "); String fnavn = tast.inline(); if (new File(fnavn).exists()) { System.out.println("Filen fins"); else { System.out.println("Filen fins ikke"); 2006-04-03 43 2006-04-03 44

Organisering av alle andre programmer: Variant 1 I alle andre programmer bør main-metoden kun brukes til å få igang programmet. Eksempel: class MittProgram { Flyreservasjon fr = new Flyreservasjon(); fr.ordreløkke(); class Flyreservasjon { void ordreløkke() { 2006-04-03 45 Det er mulig å slå sammen de to klassene på forrige foil til en klasse: class MittProgram { MittProgram mp = new MittProgram(); mp.ordreløkke(); void ordreløkke() { Det blir en smakssak om man velger å gjøre det slik, eller slik som på forrige foil. I undervisningen vil du hovedsakelig se eksempler på den varianten som bruker to klasser. 2006-04-03 46 Variant 2 Rollefordeling i større programmer Istedet for å lage en egen ordreløkke-metode, kan koden for ordreløkken ligge i konstruktøren: class MittProgram { Flyreservasjon fr = new Flyreservasjon(); class Flyreservasjon { Flyreservasjon() { ordreløkken Dette blir også en smakssak, men varianten ovenfor bruker konstruktøren til noe annet enn initialisering av objektvariable og er mindre gjennomsiktig/selvforklarende enn å bruke en egen ordreløkkemetode. 2006-04-03 47 2006-04-03 48

Oppsummering Legg ikke annen programkode i main enn det som skal til for å få igang programmet (typisk: lage et objekt og kalle på en metode i dette), unntatt i bittesmå programmer. I main kan du velge å lage et objekt av klassen som main ligger i - eller et objekt av en annen klasse. I kurset bruker vi stortsettsistevariant. Metoden som kalles fra main er typisk den som er ansvarlig for programkontrollen (f.eks. en ordreløkke), eller en del av den. Programkontrollen kan ligge i en konstruktør eller i en annen metode (f.eks. void ordreløkke()). I kurset gjør vi stort sett det siste. 2006-04-03 49