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



Like dokumenter
Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

INF1000 : Forelesning 5

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Forelesning inf Java 5

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

Endret litt som ukeoppgave i INF1010 våren 2004

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

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

Java 6. Eksempel med to-dimensjonal array Filbehandling Tekster

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

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

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

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

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

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

INF1000 Uke 5. Litt om objekter, filer med easyio, tekst

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

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

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

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

Forelesning inf Java 5

Forelesning inf Java 5

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

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

INF1000 : Forelesning 3

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

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

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

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

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

INF1000 : Forelesning 4

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

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

Inf1000, uke 5 19 sept. 2006

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

Oversikt. Filer. Litt mer om tekster. INF1000 Uke 6. Lese og skrive fra/til fil. Eksempel. Vi importerer pakken easyio. Klassene In og Out i easyio

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

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

UNIVERSITETET I OSLO

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; }

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

Eksempel: Body Mass Index (BMI)

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

INF Uke 10. Ukesoppgaver oktober 2012

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)

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

INF1000 : Forelesning 1 (del 2)

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

UNIVERSITETET I OSLO

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

Blokker. Uke 4, INF 1000, 13 sept Løkker og arrayer. Eksempel. Deklarasjoner inne i blokker. Institutt for Informatikk Universitet i Oslo

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

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

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

(MVC - Model, View, Control)

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

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

Inf1000 (Uke 8) Mer om objekter og filbehandling

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

UNIVERSITETET I OSLO

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

Obligatorisk oppgave 1 INF1020 h2005

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

INF1000 Prøveeksamen Oppgave 7 og 9

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

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

Forelesning inf Java 3

INF1000 oppgaver til uke 38 (17 sep 23 sep)

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

INF 1000 høsten 2011 Uke 3 6. september

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Forelesning inf Java 3

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

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

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

Løsningsforslag til eksamen i INF1000 våren 2006

INF1010 våren januar. Objektorientering i Java

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

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

INF Løsning på seminaropppgaver til uke 8

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

Innhold uke 3. INF 1000 høsten 2011 Uke 3 6. september. Uttrykk. Variabel: En plass i hukommelsen

Seminaroppgaver IN1010, uke 2

Transkript:

Dagens forelesning Java 13 Design av større programmer : fordeling av roller INF 101-13. mars 2003 Flere eksempler på bruk av objekter MVC-prinsippet MVC-prinsippet Flere eksempler på programmer med objekter Ole Christian Lingjærde Gruppen for bioinformatikk (www.ifi.uio.no/bioinf) Institutt for informatikk Universitetet i Oslo Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 2 Rollefordeling (variant 1) Rollefordeling (variant 2) En klasse som inneholder alt Hovedklassen Oppstart, initialisering, kommandoløkke, grensesnitt mot omverden, avslutte Datamodellen Holder rede på hele datastrukturen og metodene som jobber på datastrukturen Øvrige klasser som inngår som del av datastrukturen En klasse som inneholder alt Hovedklassen (kontrollen) Oppstart, initialisering, kommandoløkke, avslutte Grensesnitt mot omverden Kommunikasjon m/bruker, filbehandling, nettverk,... Datamodellen Holder rede på hele datastrukturen og metodene som jobber på datastrukturen Øvrige klasser som inngår som del av datastrukturen Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 3 Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 4

Variant 2: MVC-prinsippet MVC: overordnet programstruktur Model: datamodellen, dvs datastrukturen og operasjonene på den En klasse for hver type objekt som datastrukturen skal inneholde En overordnet klasse som holder orden på datastrukturen ved hjelp av tabeller osv, og som inneholder metoder for alle de operasjonene vi måtte ønske å utføre på datastrukturen Controller fil Views Tre Sko g høy de 12.3 main Tre gran = new Tre ( ); Tre furu = new Tre ( ); årsvekst Tre bjørk = new Tre ( ); gran høy de 12.3 furu høy de årsvekst 12.3 bjørk årsvekst Model Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 5 View: grensesnittet mot brukeren Klasser som styrer programmets kommunikasjon med filer og terminal Controller: den delen av programmet som styrer det hele En klasse med metoden main som styrer programmet initialisering av datastruktur (model) og brukergrensesnitt (view) kommandoløkke avslutninger Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 6 Hvilken variant skal vi bruke? Eksempel: et personregister Avhenger av problemet Variant 1 Todeling: kontroll/grensesnitt + datamodell Lett å plugge inn en annen datamodell Holder for de fleste formål i kurset Variant 2 Tredeling: kontroll + grensesnitt + datamodell Lett plugge inn en annen datamodell Lett å plugge inn et annet grensesnitt Er godt egnet for større systemer Kontrollør og grensesnitt Datamodell class Hovedkontroll { public static void main { new Personregister class Register { Person [] medlem; int antmedlemmer, maxmedlemmer; <Ordre-metoder> <Metoder for operasjoner på hele registret> class Person { <Data om denne personen> <Metoder for endring av persondata> Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 7 Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 8

Hva designes som objekter? To små spørsmål Grunnregel: Objektet må enten ha egne data eller egne operasjoner (eller begge deler) som hører sammen - ellers kunne det like gjerne vært programmert som en enkel variabel eller en metode. I datamodellen: Et abstrakt eller konkret fenomen som skal representeres i datasystemet - en konto, en person, en type kaffe, et parti kaffe, en bil på en vei I grensesnittet: En mekanisme i et datasystem eller en annen gjenstand styrt av datateknikk - et skjermvindu, en fil, kanalvelgeren, lydstyrkeregulatoren Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 9 Hvor mange Person-objekter lages her: Person [] allepersonene = new Person[50]; Anta at vi har laget klassen Person: class Person { String navn; String fødselsnummer; String adresse; Hvordan ville du sjekke om to Person-pekere p1 og p2 faktisk representerer samme person? Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 10 Oppgave: hva gjøres når? I hvilken rekkefølge skjer de ulike tingene når dette programmet kjøres? class Oppgave2 { static double pi = 3.14; // (1) String navn; // (2) public static void main (String [] args) { Oppgave2 op = new Oppgave2("Petter"); // (3) op.skrivnavn(); // (4) Oppgave2 (String navn) { this.navn = navn; // (5) void skrivnavn() { System.out.println("Navnet er : " + navn); // (6) Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 11 Oppgave: hva skrives ut? class Oppgave3 { static String s1 = v('a'); String s2 = v('b'); public static void main (String [] args) { String s3 = v('c'); Oppgave3 op = new Oppgave3(); op.skrivut(); Oppgave3 () { s2 = v('d'); static String v (char c) { System.out.println(c); return "" + c; void skrivut() { Test programmet System.out.println('e'); Editer programmet Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 12

Eksempel: vareregister Framgangsmåte Anta at vi skal lese en fil med følgende format: Først er det en linje med 3 overskrifter (separert av blanke tegn) Deretter kommer det en eller flere linjer, som hver består av et heltall, et desimaltall og en tekststreng (separert av blanke tegn) Eksempel: Antall Pris Varenavn 35 23.50 Oppvaskkost 53 33.00 Kaffe 97 27.50 Pizza.................. Den første linja er spesiell, og vi tenker oss her at den ikke er så interessant - vi ønsker bare å få lest forbi den. Det kan vi gjøre med instringln(). De andre linjene har samme format, så vi kan lage en løkke hvor hvert gjennomløp av løkken leser de tre itemene på en linje. Vi bruker da henholdsvis inint(), indouble() og instringln(). For å vite når filen er slutt, kan vi enten bruke endoffile() eller lastitem(). Siden vi leser filen itemvis, er det mest naturlig å bruke lastitem(). Da får vi heller ikke problemer dersom det skulle ligge noen blanke helt på slutten av filen. Dataene som leses skal programmet ta vare på for senere formål. Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 13 Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 14 Å holde rede på dataene Hvert vareslag representeres som et objekt av klassen: class Vareslag { private String varenavn; private int antall; private double pris; Vareslag (String varenavn, int antall, double pris) { this.varenavn = varenavn; this.antall = antall; this.pris = pris; // I tillegg har vi metoder fåvarenavn(), osv Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 15 Å holde rede på dataene (forts.) Datamodellen representeres som et objekt av klassen: class Varer { private int MAX_ANT_VARER = 100; private int antallvarer = 0; private Vareslag [] varene = new Vareslag[MAX_ANT_VARER]; void nyvare(string varenavn, int antall, double pris) { Vareslag v = new Vareslag(varenavn, antall, pris); varene[antallvarer++] = v; boolean harvare(string varenavn) {... int fåantall(string varenavn) {... double fåpris(string varenavn) {... Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 16

Å holde rede på dataene (forts.) class LesVarerFraFil boolean harvare(string varenavn) { for (int i=0; i<antallvarer; i++) { if (varene[i].fåvarenavn().equals(varenavn)) return true; return false; int fåantall(string varenavn) { for (int i=0; i<antallvarer; i++) { if (varene[i].fåvarenavn().equals(varenavn)) return varene[i].fåantall(); return 0; Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 17 import inf101.*; class LesVarerFraFil { public static void main (String[] args) { Varer v = new Varer(); Inn fil = new Inn("varer.txt"); fil.instringln(); // Les forbi overskriften while (!fil.lastitem()) { int antall = fil.inint(); double pris = fil.indouble(); String varenavn = fil.instringln().trim(); v.nyvare(varenavn, antall, pris); if (v.harvare("kaffe")) { System.out.println("Pris kaffe: " + v.fåpris("kaffe")); Test programmet Editer programmet Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 18 En samtalepartner Lag programmet Test programmet Vi skal lage to programmer som tilsammen gjør det mulig å "snakke med maskinen", slik at hver gang maskinen gjenkjenner et ord i det vi skriver så gir den et bestemt (og tilnærmet fornuftig) svar. Det første programmet går i løkke og ber brukeren om å oppgi et ord og et tilhørende svar, og legger dette på en fil "svar.txt". Det andre programmet skal starte med å lese filen "svar.txt" og skal deretter gå i løkke og be brukeren skrive noe, hvoretter programmer skriver ut tilhørende svar (hvis ordet er registrert). Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 19 Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 20

Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 21 Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 22 Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 23 Ole Chr. Lingjærde Institutt for informatikk 13. mars 2003 24