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

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

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

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

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

Oblig4: Komme igang. INF1000 Uke 11. Filer Vi skal lese data fra to filer og analysere dem (Stasjoner-1.txt, Vaerdata-1.txt) Noen generelle tips

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

HashMap. INF1000 Forelesning 9. Ulike versjoner i Java 1.4 (gammel) og Java 1.5/1.6 av HashMap. Objekter lagres med en søkenøkkel

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

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

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

1. Separatorer (skilletegn) i easyio

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

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

Oblig4 - forklaringer. Arne og Ole Christian

Oversikt (for deg som ikke er helt sikker på å få A) Inf1000 uke 12 4.nov Sjekkliste forts. variabler, typer og tilordning

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

INF1000 Uke 10. Klassevariablenes levetid Ikke alt i et objekt bør være synlig fra resten av programsystemet - innkapsling

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

Oblig4 - forklaringer. Arne og Ole Christian

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

Inf1000 (Uke 10) Oppgaveløsning. Hashmap

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

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

INF1000 (Uke 11) Programmering

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

Blokker og metoder INF1000 (Uke 6) Metoder

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

UNIVERSITETET I OSLO

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

INF1000: Forelesning 7

UNIVERSITETET I OSLO

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 5 18.sept. 2007

Oblig 4Hybelhus litt mer tips enn i oppgaven

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 (Uke 6) Mer om metoder, tekster

INF1000: noen avsluttende ord

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

INF Uke 10. Ukesoppgaver oktober 2012

Introduksjon til objektorientert programmering

INF1000 : Forelesning 4

Oblig4 - forklaringer

Framgangsmåte for å løse oblig 4 i INF1000

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

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

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

Dagens tema Kapittel 8: Objekter og klasser

INF1000 (Uke 6) Mer om metoder, tekster

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Forelesning inf Java 5

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

Forelesning inf Java 5

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Gjennomgang av eksamen H99

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

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

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

En klasse er noe - en metode gjør noe (! / # <= (! * +!! ",-' %. "- -/ %.!#) )! " 0'%! * *$! "1-)) '' % '. 22!'( 7/ /! * 2 2! "*"% 8"%% 9 - -!

Oblig 3 tips litt mer tips enn i oppgaven

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

Forelesning inf Java 4

UNIVERSITETET I OSLO

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

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

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

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

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

INF1000: Forelesning 4. Mer om arrayer Metoder

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

UNIVERSITETET I OSLO

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

Oblig 3 tips litt mer tips enn i oppgaven

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

UNIVERSITETET I OSLO

Repetisjon. INF gruppe 13

Teste om to tekster er like. Inf1000 uke 6 26.sept Alfabetisk ordning. Inneholder en tekst en annen? Litt om tekster Metoder

INF 1000 høsten 2011 Uke september

Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene.

Oversikt. INF1000 Uke 5. Hva er for-løkker - repetisjon. Spørsmål forrige uke. Svar på spm. fra forrige uke. Litt mer om arrayer.

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

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

2 Om statiske variable/konstanter og statiske metoder.

Transkript:

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

Råd 1: Programmer ovenfra ned Hvilke klasser skal være med? Les oppgaven Se etter substantiver Lag klassediagram Bestem datastruktur Hvordan er input-dataene? Fyll inn de mest sentrale variablene Trengs nye klasser? Følg programflyten når du bestemmer metoder Skriv først metodene på toppnivå f.eks. en kommandoløkke Kall på metoder ved behov, selv om disse ennå ikke er skrevet Skriv metodene du kaller på, og fortsett til programmet er ferdig

Velg datastruktur etter hva som skal gjøres! I objekt-orientert programmering tenker vi i form av objekter men programmer i form av klasser Prøv å gruppere data etter objekter som eier dem variable og metoder som logisk hører sammen bør ligge samlet variable og metoder som ikke har noe med hverandre å gjøre bør holdes godt atskilt

Gruppering etter eier String[] navn = new String[100]; String[] fnr = new String[100]; int[] tlfnr = new int[100]; Info knyttet til person splittet opp i tre arrayer class Person { String navn; String fnr; int tlfnr; Person [] personreg = new Person[100]; Info samlet i ett objekt.

Data og metoder sammen... data om studenter...... data om ansatte...... data om kurs...... student-metoder...... ansatt-metoder...... kurs-metoder... 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 Lett å kopiere alt som har med personer å gjøre (data + metoder) til andre programmer

Valg av datamodell: nytt eksempel Gitt fil med opplysninger om antall registrerte tilfeller det var av tre ulike sykdommer i Norge : INFLUENSA KYSSESYKE MENINGITT 1950......... 1951......... 1952........... 2000......... Hvordan er det naturlig å modellere dette?

Noen muligheter Gruppere tellinger relatert til samme sykdom class Sykdom { String sykdomsnavn; int[] antalltilfeller = new int[51]; Gruppere tellinger foretatt samtidig class Aarsdata { int antinfluensa; int antkyssesyke;int antmeningitt; Ingen gruppering tre arrayer int[] influensatilfeller = new int[51]; int[] kyssesyketilfeller = new int[51]; int[] meningittilfeller = new int[51]; Ingen gruppering en 2D-array int[][] sykdomstilfeller = new int[3][51]; Beste datastruktur avhenger av hva du skal bruke dataene til!

Råd 2: Metoder "utenfra og inn" Hva er input og output til metoden? Input: Eventuelle parametere til metoden Kan også være klassevariable/objektvariable Output: Eventuell returverdi fra metoden Kan også være modifikasjoner av klassevariable/ objektvariable (f.eks. endring av innholdet i en HashMap).

Råd 3: Deleger oppgaver Stykk opp oppgavene og fordel dem Dermed blir hver enkelt del mer oversiktlig faren for feil minker lettere å finne feil senere Ofte lurt: Deleger operasjoner på data til objekter som er nærme dataene Ikke overdriv delegering! hvert objekt trenger ikke metoder for å lese fra terminal! av og til bedre å gjøre ting sentralt og kalle på metoder i objektene for å oppdatere deres variable

Ideen bak objektorientering Hvert objekt skal ha sin bestemte og naturlige oppgave Kollektivt samarbeid om å løse oppgavene Objektene opprettes som instanser av klasser Objektene samarbeider ved å sende meldinger: kaller hverandres metoder overfører informasjon i form av parametere og returverdier Metodekallene har en entydig mottager som overtar ansvaret for oppgaven

Helhet og deloppgaver i OOP Vi trenger ikke å ha oversikt over hele programmet eller hele datastrukturen når vi skriver en metode Vi skifter hatt og ser systemet gjennom øynene til hver av aktørene for seg Når vi er kelner, beskriver vi kelneren ut fra kelnerens perspektiv, når vi er hovmesteren ser vi det ut fra hans perspektiv osv. Vi programmerer en klasse ut fra klassens perspektiv og glemmer da resten av helheten

Objekter svarer til programmer Vi kan tenke oss at hvert objekt av en gitt klasse svarer til en kjøring av klassen Et objekt kan samarbeide med alle det kjenner til ved metodekall Vi starter ett av programmene ved å kalle klassens main-metode Deretter: objektene opprettes når programmet kjører

Råd 4: Formater koden class Eksempel { public static void main (String [] args) { int x = 0; for (int i=0; i<10; i++) { x = x + 1; if (x < 0) {System.out.println("Det var rart"); DÅRLIG! class Eksempel { public static void main (String [] args) { int x = 0; for (int i=0; i<10; i++) { x = x + 1; if (x < 0){ System.out.println("Det var rart"); BRA!

Råd 5: Ingen skam å snu! Programmer blir til ved at vi jobber litt her og der Vi kan bruke mange runder før vi er fornøyd Vi finner ofte ut at vi trenger flere klasser eller at en klasse bare er i veien og fjerner den Det endelige programmet kan ha andre klasser og metoder enn vi startet med Pass likevel på å holde programmet kompilerbart! Lag tomme metoder som du kan fylle ut siden Hold koden ryddig

Klasser Flyreservasjon Egenskaper Prosedyerer Systemet skal holde orden på alle selskapets flyvninger og reserverte seter på flyene En flyvning har en kode, et avreisested og en destinasjon, i tillegg til et fly, som har et identifikasjonsnummer Et fly består av seterader, med seter Systemet skal lese inn beskrivelse av flyene, med antall seter, klasser på de forskjellig seteradene, osv Det skal kunne reservere seter, avbestille og skrive ut en oversikt over flyets seter, med klasse og om det er ledig eller ikke

Klasseinndeling class Systemet Inneholder kun main-metoden Lager objekt av klassen under og kaller på ordreløkke-metode. class Flyreservasjon Inneholder ordreløkke og andre metoder + HashMap-tabeller for å holde orden på flyvningene. class Fly Hvert objekt inneholder info om en flyet + alle seteradene og setene class Seterad Setene i raden class Sete Klasse og om det er opptatt eller ikke

class Systemet import easyio.*; import java.util.*; class Systemet { public static void main (String[] args) { String s1 = Fly.txt"; String s2 = Bestillinger.txt"; Flyreservasjon f = new Flyreservasjon(s1, s2); f.ordreløkke();

class Flyreservasjon class Flyreservasjon { HashMap fly = new HashMap(); HashMap flyvninger = new HashMap(); Datastruktur Flyreservasjon(String s1, String s2) { lesfly(s1); lesreservasjoner(s2); void lesfly(string fnavn) {... void lesreservasjoner(string fnavn) {... void ordreløkke() {... Konstruktør som gjør initialisering (her: lese data fra fil) Metoder for å lese fra fil og for å lese inn kommando fra bruker... Her kommer det metoder som skal kalles fra ordreløkken

Flyreservasjon: ordreløkken For hver kommando skal ordreløkken kalle på en metode i klassen Flyreservasjon. Sørg for å deklarere alle de metodene som du kaller på fra ordreløkke-metoden Du kan vente med å fylle inn innholdet i disse metodene Eksempel: kaller ordreløkken på metoden visflyvning(), kan du skrive en dummy-metode : void visflyvning() { System.out.println( Metoden visflyvning utført );

Skrive ut flyvning Programmer metodene som kalles fra ordreløkken Eksempel (i klassen Flyreservasjon): void visflyvning() { System.out.println( Flyvning: ); String flightkode = tast.inline(); Flyvning flight = <finn flyvingen ved oppslag i flyvninger>; flight.skrivut(); Oppdraget delegeres videre til en metode i Flyvning-objektet som er aktuelt.

class Flyvning Skriver ut litt informasjon om flyvningen og delegerer så ansvaret for utskrift av oppsettet i flyet til klasen fly. class Flyvning { String flightkode; String avreisested; String destinasjon; Fly fly; void skrivut() { System.out.println( Flight: + flightkode); System.out.println( Fra: + avreisested); System.out.println( Til: + destinasjon); fly.skrivut(); Oppdraget delegeres videre til en metode i Fly-objektet

class Fly Skriver ut informsjon on flyet Delegerer videre til seteradene Delegerer videre til setene. class Fly { String flykode; Seterad[] seterader; int skrivut() { System.out.println( Flykode: + flykode); for(int i=0; i<seterader.length; i++){ seterader[i].skrivut(); Og Fly delergerer videre

class Flyreservasjon { void ordreløkke() {... visflyvning();... void visflyvning() {... flight.skrivut();... Vi har ett objekt av denne. class Flyvning { skrivut() {...... fly.skrivut(); Vi har flere objekter av disse. class Fly{ skrivut() {...

Oblig4: Komme i gang Les hele oppgaven. Identifiser klasser Lag et enkelt klassediagram Skisser de viktigste variablene og metodene Lag et skall til programmet Råd 1: Programmer ovenfra ned Råd 2: Metoder "utenfra og inn Råd 3: Deleger oppgaver Råd 4: Formater alltid koden underveis Råd 5: Ingen skam å snu!

Les teksten, finn klassene Meteorologisk institutt har en rekke værstasjoner rundt om i Norge. For hver slik værstasjon får vi oppgitt et entydig stasjonsnummer, stasjonens navn, stasjonens høyde over havet, kommunen, fylket, regionen hvor stasjonen ligger. Stnr Navn Hoh Kommune Fylke Region 180 TRYSIL_VEGSTASJON 360 TRYSIL HEDMARK ØSTLANDET 5590 KONGSVINGER 148 KONGSVINGER HEDMARK ØSTLANDET 10380 RØROS_LUFTHAVN 625 RØROS SØR-TRØNDELAG MIDT-NORGE 94500 FRUHOLMEN_FYR 13 MÅSØY FINNMARK NORD-NORGE 99950 JAN_MAYEN 10 JAN MAYEN JAN MAYEN ARKTIS

Se på substantivene! Meteorologisk institutt har en rekke værstasjoner rundt om i Norge. For hver slik værstasjon får vi oppgitt et entydig stasjonsnummer, stasjonens navn, stasjonens høyde over havet, kommunen, fylket, regionen hvor stasjonen ligger. Stnr Navn Hoh Kommune Fylke Region 180 TRYSIL_VEGSTASJON 360 TRYSIL HEDMARK ØSTLANDET 5590 KONGSVINGER 148 KONGSVINGER HEDMARK ØSTLANDET 10380 RØROS_LUFTHAVN 625 RØROS SØR-TRØNDELAG MIDT-NORGE 94500 FRUHOLMEN_FYR 13 MÅSØY FINNMARK NORD-NORGE 99950 JAN_MAYEN 10 JAN MAYEN JAN MAYEN ARKTIS

Skisse klassediagram Hvilke substantiver passer som klasser? De som er noe Hva er variable i klassene? Egenskaper ved klassene Hva passer som metoder Det som gjøres med eller av klassene Observasjons - data?

Observasjonsdata FFM Middel av vindhastigheter m/s FFX Høyeste vindhastighet m/s RR Nedbør mm SA Snødybde cm TAM Middeltemperatur ºC TAN Minimumstemperatur ºC TAX Maksimumstemperatur ºC Stnr Dato FFM FFX RR SA TAM TAN TAX 180 01.01.2009 0,6 1,1 0,1-999 -20,4-24,5-16,2

Manglende data -999 betegner at observasjon mangler Ved beregning av gjennomsnitt ol, må det sjekkes om verdiene er -999 Kan bruke en konstant (final int)! Mangler det måling for en dag kan den ikke være med i gjennomsnittet for måneden antallet blir også mindre! Mangler alle data/dagne for en måned kan vi ikke finne gjennomsnitt for den

ÆØÅ-problemer Bruker du PC via Windows, blir æ, ø, å, Æ, Ø, Å blir skrevet ut som andre tegn på skjermen Hvis man f.eks taster inn æ, ø, å på en Windowspc, vil de ikke bli oppfattet som de æ-ene, ø-ene og å- ene du har lest inn fra fila. Eksempler: NY- LESUND (99910) MIDTL GER (46510), VARD (98550) ) Bruk stasjonsnumrene til å identifisere stasjonene, både i brukerdialogen og når du leser data-filene. Skriv derfor både ut navn og nummer på stasjonene Når brukeren skal velge stasjon: List opp alle stasjoner med nummer og navn Be brukeren skrive inn stasjonsnummer

To HashMap-er? Trenger du å kunne søke ut fra både stasjonsnr og navn? Bruk to HashMap er! en hvor nøkkelen er navnet en hvor nøkkelen er stasjonsnummeret Det er det samme objektet du legger (peker til) i de to HashMap ene, men nøklene vil være ulike

Unngå int som nøkkel i HashMap Trenger du en nøkkel til en HashMap av noe som egentlig er et heltall, si: int num? Lag en nøkkel slik: String numsomtekst = + num; Dette lager en String med tallverdien i num ved å legge til den tomme tekststrengen

Start med skallet /** * Omsluttende klasse for problemet, tar opp parametre * fra kommandolinja og starter kommandoløkka. Feilmelding * hvis ikke minst to parametere. *****************************************************/ class Oblig4 { /** * Sjekker parametere, starter opp ordreløkka etter at * filene er lest via konstruktoren til 'MetInst' *****************************************************/ public static void main(string[] args) { if (args.length >= 2) { MetInst m = new MetInst(args[0],args[1]); m.ordreløkke(); else System.out.println("Bruk: >java Oblig4 <fil med + Stasjonsdata> < fil med Observasjonsdata>"); // end class Oblig 4

Javadoc Javadoc-generering av systemet: >javadoc package *.java package: alle variable, klasser og metoder uten modifikator, samt de med public foran, blir med Har du ikke med package, kommer bare public med La kun.java -filene på filområdet tilhøre Oblig4!

Korte Javadoc-kommentarer Skrives på en linje: /** Skriver ut bruker-menyvalg */ void meny (Out ut) { Javadoc-kommentarer for en variabel skrives over deklarasjonen: /** Stasjonenes høyde over havet (meter) */ int moh;