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

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

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?

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 9. Hashmap Eksempel: Flyreservasjon

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

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

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

1. Separatorer (skilletegn) i easyio

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

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

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

Gjennomgang av en tenkt eksamensoppgave

Gjennomgang av en tenkt eksamensoppgave

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

INF1000 (Uke 11) Programmering

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

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

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

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

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

INF1000: Forelesning 7. Konstruktører Static

Oblig4 - forklaringer. Arne og Ole Christian

INF1000: Forelesning 7

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Inf1000 (Uke 10) Oppgaveløsning. Hashmap

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

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

INF1000: noen avsluttende ord

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

Blokker og metoder INF1000 (Uke 6) Metoder

Forelesning inf Java 4

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

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

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

Introduksjon til objektorientert programmering

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?

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

Oblig4 - forklaringer. Arne og Ole Christian

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

Dagens tema Kapittel 8: Objekter og klasser

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.

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

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 : Forelesning 4

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

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

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

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

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

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

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

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

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

INF1000 Prøveeksamen Oppgave 7 og 9

Inf1000 (Uke 8) Mer om objekter og filbehandling

UNIVERSITETET I OSLO

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

INF1000: Forelesning 6. Klasser og objekter del 1

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

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

Inf1000 uke 5 18.sept. 2007

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

UNIVERSITETET I OSLO

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

INF1000 (Uke 6) Mer om metoder, tekster

Enkle generiske klasser i Java

Forelesning inf Java 5

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

Gjennomgang av eksamen H99

Transkript:

INF 1000 høsten 2011 Uke 10: 25. november Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Kursansvarlige: Arne Maus og Siri Moe Jensen Objektorientering: Hvorfor? Et program (særlig i eldre og mer lavnivå språk) kan bestå av en lang rekke setninger der kontrollen hopper frem og tilbake, kanskje bare med direkte hopp -instruksjoner ( goto ) Data kan deklareres som en uendelig lang rekke felles variable, som brukes når de trengs og er tilgjengelige over alt Dette er uproblematisk for datamaskinen som skal utføre programmet, MEN: det blir fort vanskelig å holde oversikten for programmereren svært tidkrevende å finne feil nesten umulig å sette seg inn i for andre (eller huske hvordan det fungerte noen måneder etter at man skrev det) vanskelig (farlig!) å utvide/ endre nesten umulig å dele opp for å samarbeide om utvikling 1 3 Innhold uke 10 Mer om objektorientering, klasser og metoder Repetisjon forrige uke: HashMaps Hvordan gripe an et stort problem? 5 råd Eksempel: Flyreservasjon Mål for uke 10: * Mer utfyllende om klasser * Hvordan designe og programmere objektorientert * Støtte til oppstart på Oblig 4: Jobbe frem eget forslag til datastruktur Objektorientering: Hvordan? s 678 bn y /(& kl Think globally, act locally! Data: kjsdf 34 Tenk helhet, overordnet gruppering gjennom identifisering av viktige ting (substantiver) -> klasser Arbeid lokalt med bestanddeler, representasjon -> variable Handlinger (metoder): Først hvilke oppgaver som skal løses, og hvor de best løses (hvor er dataene de skal arbeide med)..deretter: Hvordan løse oppgaven 45 2 4

Hva er en klasse? En klasse er et mønster for/ 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 En egenskap i en klasse som viser til en annen klasse representeres som en peker-variabel til et objekt av den andre klassen. (Til mange objekter: Peker-array eller HashMap) Klassemetoder(-variable) og objektmetoder(-variable) 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 (opprettet med new ) 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) 7 Skille mellom deklarasjon og bruk av en klasse Klassedeklarasjoner i programmet medfører lite aktivitet: De variable og metodene det står static foran er tilgjengelige (klassevariable og klassemetoder)..dvs static metoder kan kalles (eks. main ved start av programmet) Mønsteret for nye objekter av klassen er tilgjengelig Hvis det aldri blir sagt new på klassen, finnes det ingen objekter, og dermed ingen objektvariable eller objektmetoder Når utførelsen kommer til en setning med new på en klasse, får vi laget et objekt av klassen Objektet inneholder alle objekt-variable og metoder (variable og metoder som ikke har static foran deklarasjonen i klassen) Det kalles automatisk en konstruktør-metode i klassen, og først når den er ferdig, returnerer new med det nye objektet. Konstruktøren sørger for at objektvariablene i det nye objektet har de initialverdiene vi ønsker. Disse verdiene kan for eksempel hentes fra parametre til konstruktøren eller leses fra fil eller terminal. 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.)

Oppgave Vi skal lage en konstruktør til klassen Student. Konstruktøren skal ha studentens navn som parameter og skal initiere objektvariabelen navn. Vi skal også skrive en objektmetode void økpoeng(int poeng) i klassen Student som øker antall studiepoeng for en student med parameterens verdi. class Student { String navn; int antallstudiepoeng = 0; // Her skal du skrive konstruktøren // Her skal du skrive objektmetoden økpoeng Oppgave Vi skal lage en konstruktør til klassen Student. Konstruktøren skal ha studentens navn som parameter og skal initiere objektvariabelen navn. Vi skal også skrive en objektmetode void økpoeng(int poeng) i klassen Student som øker antall studiepoeng for en student med parameterens verdi. Du skal deretter deklarere klassen StudentTest som kan holde rede på et antall Student-objekter i en array uiostud - hvor mange bestemmes når StudentTest-objektet opprettes. Studentobjektene i arrayen uiostud skal initieres med hvert sitt studentnavn Stud-1, Stud-2, Stud-3,... Stud-32000. Dermed skal f.eks. uiostud[252] peke på et Student-objekt hvor studentens navn er satt lik Stud-253. Konstruktør og metode i klassen Student class Student { String navn; int antallstudiepoeng = 0; // Her skal du skrive konstruktøren Student (String navn) { this.navn = navn; // Her skal du skrive objektmetoden økpoeng void økpoeng (int poeng) { antallstudiepoeng += poeng; Opprettelse og initiering av Studentobjekter class StudentTest { Student[] uiostud; int ant; StudentTest(ant) { this.ant = ant; uiostud = new Student[ant]; for (int i = 0; i<= ant; i++) { uiostud[i] = new Student ( Stud- + (i+1)); // end konstruktør for StudentTest // end class StudentTest <i main:>... // oppretter register med 32000 studenter: StudentTest st = new StudentTest (32000); // 30 ekstra studiepoeng til de første 25000 studentene for (int i=0; i<25000; i++) { st.uiostud[i].økpoeng(30);...

Innkapsling Hvis alle.java filene ligger på samme filområde Ikke alt i et objekt bør være synlig fra resten av programsystemet! 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 metodene settinn() og taut(). ingenting foran en deklarasjon/metode fullt tilgjengelig for all annen kode på samme filområde usynlig /sperret for kode på andre filområder. private kun synlig fra metoder deklarert i samme klasse, usynlig/sperret for all annen kode public: Vi kan regulere tilgangen til variable og metoder ved å sette en av følgende modifikatorer foran en variabel- eller metodedeklarasjon: private public protected Synlig for all annen kode (forutsetter katalogen referert i CLASSPATH) Nødvendig for main Ellers det samme som <ingenting> i vårt tilfelle Slik delvis sperring av adgang sikrer oss at vi selv bestemmer hvordan en variabel i en klasse skal endres. 13 14 HashMap - repetisjon Hva er et HashMap? Hvorfor/ når? ukjent antall objekter av en type (array har fast lengde) HashMap<String,Person> h = new HashMap <String,Person>(); direkte oppslag på andre (eller flere) egenskaper enn indeks 0-N h Hva inneholder et HashMap? fnr1 per1 sekk med objekter av samme type (i INF1000) pern hvert objekt har en unik identifikator (av typen String i INF1000) fnrn Hva kan et HashMap? per2 Legge inn et nytt objekt fnr2 Slå opp et objekt Fjerne et objekt Lage en samling av alle verdier (pekere) (tilfeldig rekkefølge) Lage en samling av alle identifikatorer (tilfeldig rekkefølge) ++, se s190 i boken nøkler verdier (keys) (values) Personobjekter Stringpekere Personpekere 15 16

Hva må jeg kunne om HashMaps? Oppgave: Minimalistisk HashMap Bruke det stikkord: Ukjent antall objekter, oppslag Klargjøre og deklarere import java.util.*; Filen SpamOrd.txt inneholder en del spam-ord (atskilt av blanke tegn). HashMap<String,Person> h = new HashMap <String,Person>(); Legge inn objekter h.put (s,k); Hente ut (lese) objekter p=h.get(s); Fjerne objekter h.remove (s); Lese antall objekter Gjennomløpe alle objektene (NB usortert!) vha peker eller nøkler for (Person p: h.values()) { for (String s: h.keyset()) { Du skal lage et program som leser SpamOrd.txt og som deretter leser filen Epost.txt og sjekker om denne inneholder noen av spam-ordene. Programmet skriver til slutt ut på skjermen om filen Epost.txt inneholdt noen spam-ord eller ikke (du trenger ikke å skrive ut hvilke eller hvor mange spam-ord filen inneholdt). Du kan anta at SpamOrd.txt maksimalt inneholder 200 ord. I denne oppgaven kan du godt legge all programkoden inn i mainmetoden. se RpJ s. 187-188 om iterator og videre behandling, eks sortering 17 Løsning * import easyio.*; import java.util.*; Trenger en String-variabel for hvert ord (spamkjennetegn) fra spam-filen class Spam { public static void main (String[] args) { HashMap<String,String> h = new HashMap<String,String> (); Trenger å holde rede på ukjent antall ord Må kunne slå opp ett og ett ord fra mail-fil mot spam-ordene Lager et HashMap med spam-ord som nøkler In spamfil = new In( SpamOrd.txt ); while (!spamfil.lastitem()) { h.put(spamfil.inword(), null); In epostfil = new In( Epost.txt ); boolean funnet = false; while (!epostfil.lastitem() &&!funnet) { String s = epostfil.inword(); if (h.containskey(s)) funnet = true; Hva lagrer vi som verdier i HashMap en?? 19 if (funnet) System.out.println( Spam-ord! ); else System.out.println( Ingen spam-ord );

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 Spør: Hva kan objektene gjøre for meg? Flytt funksjonalitet ut i objektene deleger! 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 Oppgave Norge består av 19 fylker som hver består av et antall kommuner. Anta at vi modellerer dette ved hjelp av tre klasser Land, Fylke og Kommune slik at Norge representeres ved et objekt av klassen Land, hvert fylke er representert ved et objekt av klassen Fylke og hver kommune er representert ved et objekt av klassen Kommune. Lag et UML klassediagram som viser forholdet mellom de tre klassene Land, Fylke og Kommune, og få på riktige antall i hver ende av forholdene. 1 19 1 1..* Land Fylke Kommune består består av av Gruppering etter eier String[] navn = new String[100]; String[] fnr = new String[100]; int[] tlfnr = new int[100]; Ikke objektorientert: Info om person splittet opp i tre arrayer class Person { String navn; String fnr; int tlfnr;... Person [] personreg = new Person[100]; Info om én person samlet i samme objekt, beskrevet ved klassen Person NB, objektene må opprettes med new

Data og metoder hører sammen... data om studenter...... data om ansatte...... data om kurs...... student-metoder...... ansatt-metoder...... kurs-metoder... Metoder og data som hører sammen samles * Lett å se hvilke metoder som jobber på hvilke data * Lett å kopiere alt som har med personer å gjøre (data + metoder) til andre programmer class Student {... data om studenter...... student-metoder... class Ansatt {... data om ansatte...... ansatt-metoder... class Kurs {... data om kurs...... kurs-metoder... 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 Delegering kan overdrives.. Råd 2: Metoder "utenfra og inn" Hva er input og output til metoden du skal skrive? Input: Kan være data metoden finner i (klassevariable eller) objektvariable eller noe som skal leses fra bruker eller fil Hvis det bestemmes når metoden kalles, og vi vet verdien på kallstedet, bruker vi parametere til metoden Output: Kan være modifikasjoner av (klassevariable eller) objektvariable, eller noe som skrives ut til bruker eller på fil Hvis noe skal tas med tilbake til kallstedet og brukes videre i programmet lager vi en returverdi fra metoden 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 via pekere: kaller hverandres metoder overfører informasjon i form av parametere og returverdier Metodekallene har en entydig mottager som overtar ansvaret for oppgaven (metoden i det aktuelle objektet)

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 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 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"); 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"); 5 råd oppsummert Råd 1: Programmer ovenfra ned Råd 2: Metoder "utenfra og inn Råd 3: Deleger oppgaver Råd 4: Formater koden Råd 5: Ingen skam å snu! DÅRLIG! BRA! 32

Flyreservasjon Klasser Egenskaper Metoder Systemet skal brukes til flyreservasjon: 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 fra en fil med flyvninger Det skal kunne reservere seter, avbestille og skrive ut en oversikt over flyets seter, med klasse og om det er ledig eller ikke class Systemet import easyio.*; import java.util.*; class Systemet { public static void main (String[] args) { String s1 = Flyvninger.txt"; Flyreservasjon f = new Flyreservasjon(s1); f.brukerdialog(); * Klasseinndeling class Systemet Inneholder kun main-metoden Lager objekt av klassen under og kaller på brukerdialog-metode. class Flyreservasjon Inneholder brukerdialogen og andre metoder + HashMap-tabell for å holde orden på flyvningene. class Flyvning Hvert objelt har info om kode, avreisested, destinasjon, fly, etc class Fly Hvert objekt inneholder id.nr på flyet + alle seteradene og setene class Seterad Setene i raden class Sete Setenr, klasse og om det er opptatt eller ikke class Flyreservasjon Datastruktur class Flyreservasjon { HashMap<String, Flyvning> flyvninger = new HashMap<String,Flyvning>(); Flyreservasjon(String s1) { lesflyvninger(s1); void lesflyvninger(string filnavn) {... void brukerdialog() {...... 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 flere metoder som skal kalles fra brukerdialogen

Flyreservasjon: Brukerdialogen For hver kommando skal brukerdialogen kalle på en metode i klassen Flyreservasjon Sørg for å deklarere alle de metodene som du kaller på fra brukerdialog-metoden Du kan vente med å fylle inn innholdet i disse metodene Eksempel: kaller brukerdialogen på metoden visflyvning(), kan du skrive en dummy-metode void visflyvning() { System.out.println( Metoden visflyvning utført ); class Flyvning Metoden skrivut() 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 Skrive ut flyvning Lag kode for metodene som kalles fra brukerdialogen 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 Fly Skriver ut informsjon on flyet Delegerer videre til seteradene som delegerer til sete class Fly { String flykode; Seterad[] seterader; int skrivut() { System.out.println( Flykode: + flykode); for(int i=0; i<seterader.length; i++){ System.out.println( Seterad + (i+1) + : ); seterader[i].skrivut(); Fly delegerer til Seterad