Inf1000 (Uke 9) UML og enda mer om klasser

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

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

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

INF1000: Forelesning 7. Konstruktører Static

INF1000: Forelesning 7

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

Et meget enkelt banksystem

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

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

Uke 7 Mer om Objekter, klasser og pekere;

Uke 7 Mer om Objekter, klasser og pekere;

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

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

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

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

Klasser, objekter, pekere og UML. INF gruppe 13

Verden består av mange objekter, noen ganske like, noen ulike

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

Først: Parametre til oppstart av programmet, Hvordan kan vi bruke args[]? String [] args. Parameteren args[] blir laget av deg

26. Sept. 2012, Arne Maus Inst. for informatikk, UiO

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

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

Inf1000 (Uke 7) Objekter, klasser og pekere

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

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

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

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

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.

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

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

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

INF1010 UML. Marit Nybakken 26. januar 2004

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

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

Repetisjon. INF gruppe 13

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

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

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

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

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

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

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

INF1000: noen avsluttende ord

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

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

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

UNIVERSITETET I OSLO

Oblig 4Hybelhus litt mer tips enn i oppgaven

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

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

Mer om uttrykk, terminal I/O, forgreninger. Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

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

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

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

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

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

INF1000: noen avsluttende ord

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

INF1000: Forelesning 6. Klasser og objekter del 1

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

INF1000 : Forelesning 5

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

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner

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

UNIVERSITETET I OSLO

Repetisjon INF 1000 våren 2006

Oblig 3 tips litt mer tips enn i oppgaven

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

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

Oblig4 - forklaringer

INF 1000 høsten 2011 Uke 3 6. september

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

Forelesning inf Java 5

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Inf1000 (Uke 8) Mer om objekter og filbehandling

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

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

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

PRØVEEKSAMEN (rettet versjon 27/11)

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

Transkript:

Inf1000 (Uke 9) UML og enda mer om klasser Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset

Hva skal vi lære i dag? Repetisjon om filbehandling UML Eksempler med klasser og objekter Oppsummering/repetisjon av klasser, objekter og UML. 07.03.2005 2

Filbehandling Importer pakken easyio.*; Lesing til/fra fil er veldig likt det å skrive til/fra skjerm. Åpn filen fil.txt for lesing ved å lage et objekt (her lesfra) av klassen In: In lesfra = new In( fil.txt ); Åpn filen ut.txt for skriving ved å lage et objekt (her lestil) av klassen Out: Out lestil = new Out( ut.txt ); Husk alltid å lukke objektet av klassen Out når du ikke skal skrive mer til filen: lestil.close(); 07.03.2005 3

Hvilke lesemetoder finnes? Datatype Int Double Char String Eksempel lesfra.inint(); lesfra.indouble(); lesfra.inchar(c); lesfra.inword(); lesfra.inword("\n"); lesfra.inline(); lesfra.endoffile(); lesfra.lastitem(); Beskrivelse Leser inn et heltall Leser inn et desimaltall Leser inn et tegn Leser inn et ord (fram til mellomrom) Leser neste ikke-tomme linje Leser inn neste linje Sjekker om slutten på filen er nådd Sjekker om slutten på filen er nådd, leser forbi blanke tegn. 07.03.2005 4

Hvilke skrivemetoder finnes? Datatype int double char String Eksempel lestil.out(x); lestil.out(x, 6); lestil.out(x, 2); lestil.out(x, 2, 6); lestil.out(c); lestil.out(s); lestil.out(s, 6); lestil.outln(); lestil.close(); Beskrivelse Skriv x Skriv x høyrejustert på 6 plasser Skriv x med 2 desimaler Skriv x med 2 desimaler på 6 plasser Skriv c Skriv s Skriv s på 6 plasser (venstrejustert) Skriv en linjeskift Lukk filen Merk: dersom antall plasser spesifiseres og det ikke er plass til det som skal skrives ut, vil det som skrives ut avsluttes med tre punktumer:... 07.03.2005 5

Eksempel Anta at det fins en fil med navn på alle studenter samt kjønn og alder. Først i filen er det opplysning om kursnavn og antall studenter. Beregn prosentandelen jenter blant studentene. Beregn gjennomsnittsalder til studentene Skriv til ny fil: kursnavn antall studenter prosentandel jenter gjennomsnittsalder 07.03.2005 6

Eksempler på tekstfilene Les fra: Inf1000 5 M 30 Per Hansen M 20 Ola Normann K 23 Heidi Larsen M 22 Inge Braa K 35 Anna Enger Utskriftsfilen: Inf1000 5 40% jenter Gjennomsnittsalder: 26 år 07.03.2005 7

Hva må vi lese inn / hvilke variable skal vi ha Kursnavn: kaller variabelen kurs, les med inword() Antall studenter: kaller variabelen antstud, les med inint() (les resten av linjen med inline()) Nå vet vi hvor mange linjer det er i resten av filen, dermed kan vi bruke ei for-løkke. For hver linje les inn: Kjønn (inchar()), øk en tellevariabel med en, enten k eller m Alder (inint()), øk samlet alder med alder Navnet (inline()), dette trenger vi ikke senere, vi tar heller ikke vare på det 07.03.2005 8

Hva skal vi skrive ut Kursets navn:.outln(kurs); Antall studenter:.outln(antstud); Prosentandel jenter Formel: Math.round(100*k/antStud) Gjennomsnittsalder Formel: Math.round(alder/antStud) NB! HUSK Å LUKKE FILEN..close(); 07.03.2005 9

import easyio.*; class StudentInfo{ public static void main (String args[]){ String frafilnavn = args[0]; String tilfilnavn = args[1]; In frafil = new In(fraFilNavn); String kurs = frafil.inword(); int antstud = frafil.inint(); frafil.inline(); int alder = 0; int m = 0; int k = 0; for (int i = 0; i < antstud; i++){ char c = frafil.inchar(); switch (c){ case 'M': m++; break; case 'K': k++; break; } alder = alder + frafil.inint(); frafil.inline(); } Out tilfil = new Out(tilFilNavn); tilfil.outln(kurs); tilfil.outln(antstud); tilfil.out(math.round(k*100/antstud)); tilfil.outln("% jenter"); tilfil.out("gjennomsnittsalder: "); tilfil.outln(math.round(alder/antstud)); tilfil.close(); } } 07.03.2005 10

Hva er UML (Unified Modeling Language) Internasjonal standard for å planlegge og å dokumentere programmer (uavhengig av programmeringsspråk). Det fins mange typer diagrammer innen UML, vi skal lære om: Objektdiagrammer Klassediagrammer UML brukes både som hjelp og støtte til utforming av programmet og til dokumentasjon av et ferdig program. 07.03.2005 11

UML-diagrammer av programmene våre Diagrammer over programmene gir oversikt gjør samarbeid med andre programmererer / systemutviklere enklere Arkitekter, ingeniører tegner først, så bygger de! Enklere å endre en tegning enn et program Enklere å diskutere en tegning enn et program 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) 07.03.2005 12

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 07.03.2005 13

Tegning av et objekt (med mer eller mindre detaljer) 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 07.03.2005 14

Andre elementer i et objektdiagram Pekere Peker-arrayer 07.03.2005 15

Eksempel: En 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 (dvs. skriv ut alle CD-ene til en artist) skrive ut register over alle CD-ene Hvilke klasser har vi i dette problemet Opplagt class CD Noen flere? 07.03.2005 16

Klassene: CD og CDsamling Vi tenker oss følgende datastruktur Er den tilstrekkelig? Vi har her forenklet programmet (klassen CDsamling forventes å inneholde main, meny-metode og sentral switch,..., mens CD inneholder utskriftsrutine). 07.03.2005 17

import easyio.*; 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; public static void main(string args[]) { In tast = new In(); Out skj = new Out(); CDsamling e = new CDsamling(); String a; CD c; int valg; 07.03.2005 18

do{ skj.outln("velg:"); skj.outln(" 1 - les ny CD (skriv artist og CD-tittel"); skj.outln(" 2 - skriv ut alle CD-er til gitt artist"); skj.outln(" 3 - avslutt"); valg = tast.inint(); }} switch(valg) { case 1: // les inn ny CD c = new CD(); e.minsamling[e.antcder++] = c; skj.out("gi artistnavn:"); c.artist = tast.inword("\n"); skj.out("gi tittel:"); c.tittel = tast.inword("\n"); break; case 2: // skriv data skj.out("gi artistnavn:"); a = tast.inword("\n"); for (int i = 0; i < e.antcder; i++){ if (e.minsamling[i].artist.equals(a)){ e.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); 07.03.2005 19

Eksempel: et helt studentregister med kurs og studenter Studenter ved Universitetet i Oslo tar generelt tre kurs hvert semester. Vi har behov for å registrere hvilke kurs som eksisterer/går hvert semester og hvor mange studenter som tar hvert kurs. Vi tegner først en tenkt datastruktur et UML objektdiagram Så skriver vi programmet 07.03.2005 20

UML-diagram for Studentregister2 Objektdiagrammet er en forenkling av programmet. Det tar bare med den essensielle datastrukturen (mest pekere og peker-arrayer) som holder datastrukturen sammen 07.03.2005 21

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++; } } } 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; } 07.03.2005 22

class StudentRegister2{ public static void main(string args []) { String[] kurskode = {"INF1000","INF1050","MAT1030"}; Kurs[] infkurs = new Kurs[3]; for (int i = 0 ; i< infkurs.length; i++) infkurs[i] = new Kurs(kurskode[i]); Student[] stud = new Student[2]; stud[0] = new Student("Ola N", infkurs); stud[1] = new Student("Åsne S",infKurs); } for (int i = 0 ; i< stud.length; i++) stud[i].skrivut(); } 07.03.2005 23

Klassediagrammer En mer kompakt måte å tegne sammenhengen i programmet på enn objektdiagrammer 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(). 07.03.2005 24

Tre (fire) mulig felter i tegning av en klasse Symboler for synlighet (fra resten av programmet) + public - private # protected ~ package Navnefeltet (alltid) klassenavnet Kan utelates: Variabelfeltet (attributtene) variabelnavn evt. med type Metode-feltet Evt med parametere og returverdi (Unntaks-feltet) 07.03.2005 25

UML Klassediagrammet kan nyttes til Modell av problemområdet (domenemodell) Modell av klassene i programmet (+ modell av databasen,...) Men siden vi skal modellere virkeligheten entil-en i programmet vårt, så blir de like i utgangspunktet 07.03.2005 26

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 07.03.2005 27

Navnet på forbindelsen antall Student antall Eksamen Forbindelsen leses fra venstre: En student har tatt null, en eller flere Eksamener Antallet objekter angis slik:

Et litt mer komplisert studentregister Et studentregister holder orden på studentene og kursene. En student tar 3 kurs hvert semester I tillegg holder objektene i kurs rede på hvilke studenter som tar kurset 07.03.2005 29

Sammenligning: Objektdiagram og Klassediagram

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 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 gjentar pkt. 1-3 07.03.2005 31

Hvilke forhold skal vi ha med i klassediagrammet Hva ett objekt av den ene klassen: inneholder består av eier,.. en eller flere objekter av den andre klassen Der 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å. 07.03.2005 32

Oppsummering om klasser, objekter, pekere og. Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en bestemt type. Objekter som er av samme klasse, beskrives med de samme variablene, men vil ha forskjellige verdier på noen av disse. Eks: To bankkonti med ulik eier og kontonummer, men samme beløp på saldo (tilfeldigvis) Vi lager objekt orienterte programmer ved å lage en modell av problemområdet i Java programmet ett objekt i verden gir ett tilsvarende Java-objekt i programmet Objekter kan være av ulik type, og for hver slik type deklarerer vi en klasse i programmet 07.03.2005 33

.. oppsummering forts. Et Javaprogram består av en eller flere klasser En klasse er en deklarasjon av data og metoder for ett objekt av klassen. Vi deklarerer pekere til objekter av en bestemt klasse f.eks. class Kurs {..} slik: Kurs kurs14, k2, k; Vi lager objekter fra klassen med new k2 = new Kurs(); Et objekt inneholder en kopi av alle ikke-statiske variable og ikkestatiske metoder i klasse Disse kalles objekt-variable og objekt-metoder Vi får adgang (lese, skrive og kalle metoder) til det som er inni et objekt ved. Operatoren : Vi må ha en peker til et objekt etterfulgt av punktum. s2.adresse ="bokhandelen i Kabul"; s1.skrivut(); 07.03.2005 34

oppsummering forts. Klasser er oppskrifter for hvordan vi lager objekter med new Vi deklarerer pekere til objekter og bruker punktum. Kan ha arrayer av pekere til objekter Konstruktører er startmetoder med samme navn som klassen. Konstruktørene kalles hver gang vi sier new. UML-diagrammer (Objekt- og Klasse-diagram) gir oversikt og forenkling som skikkelige ingeniører lager vi tegninger før vi lager systemet (programmerer) 07.03.2005 35

Lenge til neste forelesning Uke 11: undervisningsfri / midtterm eksamener (Vi har ikke midttermeksamen i inf1000) Uke12: påske Uke13: mandagen er 2. påskedag dermed ingen undervisning og heller ingen grupper den uken Vi ses 4. april, da skal dere lære om HashMap som dere trenger for å løse oblig4. 07.03.2005 36