INF1000: Forelesning 7

Like dokumenter
INF1000: Forelesning 7. Konstruktører Static

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

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

Et meget enkelt banksystem

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

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

Klasser, objekter, pekere og UML. INF gruppe 13

Inf1000 (Uke 7) Objekter, klasser og pekere

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

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

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

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

INF1010 UML. Marit Nybakken 26. januar 2004

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

INF1000: Forelesning 6. Klasser og objekter del 1

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

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

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

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

2 Om statiske variable/konstanter og statiske metoder.

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

UNIVERSITETET I OSLO

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

INF1000: noen avsluttende ord

Oblig 4Hybelhus litt mer tips enn i oppgaven

Jentetreff INF1000 Debugging i Java

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

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

UNIVERSITETET I OSLO

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

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

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

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

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

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

Velkommen til. INF våren 2016

UNIVERSITETET I OSLO

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

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

Fra problem til program

Gjennomgang av eksamen H99

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; 23. og 30. sept. 2008, 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

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Dagens tema Kapittel 8: Objekter og klasser

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

UNIVERSITETET I OSLO

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

2 Om statiske variable/konstanter og statiske metoder.

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

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

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

INF våren 2017

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

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

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Seminaroppgaver IN1010, uke 2

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

Løsningsforslag ukeoppg. 7: okt (INF Høst 2010)

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

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

Oversikt. Inf1000 (Uke 7) Objekter, klasser og pekere. Variable, deklarasjon og tilordning. Løkker gjør setninger flere ganger

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

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

UNIVERSITETET I OSLO

Forelesning inf Java 4

INF1000 : Forelesning 4

Spesifikasjon av Lag emne

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

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 3 tips litt mer tips enn i oppgaven

IN våren 2019 Onsdag 16. januar

INF1000: noen avsluttende ord

IN våren 2018 Tirsdag 16. januar

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 Prøveeksamen Oppgave 7 og 9

Velkommen til. INF våren 2012

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Transkript:

INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Repetisjon forts. 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 kan f.eks ha samme beløp på saldo (tilfeldigvis) Vi lager OO-programmer ved å lage en modell av problemområdet i Javaprogrammet 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 3 Et Javaprogram består av en eller flere klasser En klasse er en deklarasjon av data og metoder for ett objekt av klassen: int iepoeng; For å ta vare på objekter, trenger vi pekere til dem: Kurs inf; inf Vi lager objekter med new: INF1000 inf = new Kurs(); Vi får adgang til det som er inni et objekt med. : inf. = "INF1000"; iepoeng 4

Komplett eksempel int iepoeng; void skrivut() { System.out.println("Kurs med kode: " + + ", og stp: " + iepoeng); class KursRegister { public static void main(string[] args) { Kurs inf; inf = new Kurs(); inf. = "INF1000"; inf.iepoeng = 10; inf.skrivut(); >java KursRegister Kurs med kode: INF1000, og stp:10 5 KONSTRUKTØRER 6 Konstruktører startmetoder i klasser Ofte ønsker vi å gi (noen av) variablene i et objekt fornuftige startverdier samtidig som det opprettes. Dette kan gjøres ved hjelp av en konstruktør. Eksempel på deklarasjon: int iepoeng; this Av og til trenger vi en peker til det objektet metoden vi utfører er inne i. Java-ordet this gir oss alltid det. Brukes i to situasjoner: Vi har en konstruktør, og parametrene til denne heter det samme som objekt-variable i objektet: int iepoeng; Kurs(String kode, int poeng) { = kode; iepoeng = poeng; Eksempel på bruk: Kurs k = new Kurs("INF1000", 10); 7 Kurs(String, int iepoeng) { this. = ; this.iepoeng = iepoeng; Vi skal kalle en metode i et annet objekt (gjerne av en annen klasse). Da kan vi bruke this for å overføre en parameter til denne metoden om hvilket objekt kallet kom fra. 8

Stringer er ordentlige objekter String er en klasse i Java-biblioteket, men har en egen spesiell syntaks (skrivemåte) Når vi har en string, har vi alså både en peker (den vi deklarerer et på) og et stringobjekt. String-objekter kan ikke endres Egen skrivemåte for stringkonstanter: String s1 = "En fin dag i mai"; String s2 = new String("En fin dag i mai"); Klassen String inneholder mer enn 50 metoder for konvertering mellom ulike datatyper og tekst, samt tekstsøking. Merk forskjellen på: if (s1 == s2) {... if (s1.equals(s2)) {... 9 STATIC 10 Klasse-variable (statiske variable) Klasse-variable eksempel Anta at alle kontoene i banken skal ha samme rente. Hvordan lagre denne? En mulighet er å la rente være en statisk variabel i klassen Konto: class Konto { String, adr; int kontonr; double saldo; static double rente; Denne blir da felles for alle Konto-objektene, dvs at det bare finnes en kopi av denne variabelen som alle objektene av klassen har tilgang til. For å få tilgang til variabelen utenfor et Konto-objekt: objekt: System.out.println(Konto.rente); 11 Hver skal ha en unik id, som starter på 1 for det første et som opprettes. Må i tillegg holde rede på hvor mange vi har laget så langt. Dette er en egenskap ved klassen, ikke hvert enkelt objekt vi bruker derfor en statisk variabel til dette: int iepoeng, int id; static int antallkurs = 0; Kurs(String, int iepoeng) { this. = ; this.iepoeng = iepoeng; id = ++antallkurs; 12

Klasse-metoder (statiske metoder) Metoder kan også deklareres som statiske, dersom de logisk hører til klassen som helhet og ikke hvert enkelt objekt de bare benytter seg av de statiske variablene i klassen (og eventuelt andre statiske metoder) Eksempel: metode for å oppdatere renten class Konto { String, adr; int kontonr; double saldo; static double rente; static void nyrente(double ny) { rente = ny; Eksempel på bruk: Konto.nyRente(2.75); 13 Static vanlig feilmelding Hvis vi i en klasse-metode prøver å aksessere en objekt-variabel (f.eks. saldo), gir kompliatoren en feilmelding: class Konto { String, adr; int kontonr; double saldo; static double rente; static void nyrente(double ny) { if (saldo > 0) { rente = ny; >javac Konto.java Konto.java:8: non-static variable saldo cannot be referenced from a static context if (saldo > 0) { ^ 1 error 14 main en statisk metode Hva er galt med denne? class Start { int k; public static void main(string[] args) { k = 1; UML Hvordan rette feilen? 15 16

UML-diagram Hvorfor tegne diagrammer over systemet? Planlegging (arkitekter og ingeniører tegner først så bygger de!) Oversikt Samarbeid med andre programmererer / systemutviklere Dokumentasjon Unified Modeling Language en industristandard fra OMG (Object Management Group) 13 ulike diagramtyper, vi skal se på klassediagram objektdiagram Klassediagrammer En mer kompakt måte enn objektdiagram å tegne sammenhengen i programmet. Skiller seg fra objektdiagram ved at vi ikke direkte tegner datastrukturen (pekere, arrayer og objekter), men bare forhold (assossiasjoner, forbindelser) mellom klassene. I klassediagrammer dokumenterer vi også sentrale metoder. Forholdene er linjer med et logisk 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(): 17 18 Tre (fire) mulig felter i tegning av en klasse Symboler for synlighet (fra resten av programmet) + public - private # protected ~package Alltid: Navnefeltet klasseet Kan utelates: Variabelfeltet lt t (attributtene) variabel, evt. med type Metode-feltet Evt med parametere og returverdi Bruk av klassediagram Modell av problemområdet (domenemodell) Modell av klassene i programmet (+ modell av databasen,...) Siden vi prøver å modellere virkeligheten en-til-en i programmet vårt, så blir disse to modellene like i utgangspunktet (Unntaks-feltet) 19 20

Forhold mellom klasser Vi tegner et forhold (en assossiasjon) mellom to klasser dersom de har med hverandre å gjøre logisk sett, og vi i programmet vil kunne følge pekere for å få tilgang til variable og/eller metoder i de tilhørende objektene Vi angir også hvor mange objekter det maksimalt på kan være (på samme tidspunkt) på hver side av et slikt forhold Eksempel: En ent har tatt null eller flere eksamener Med eksamen mener vi en avlagt enkelt-eksamen, dvs at en eksamen vil bare være tilknyttet en bestemt ent. antall Student Navnet på forbindelsen antall Eksamen Forbindelsen leses fra venstre: En ent har tatt null, en eller flere Eksamener Antallet objekter angis slik: 21 22 Studentregister Et entregister holder orden på og ene, og en ent tar 3 hvert semester Hvert har oversikt over som tar et Tar Student Kurs 1..* 3 3..* * Er registrert i 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 (jfr. tabellen) 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 gjenntar pkt. 1-3 Har oversikt over StudentRegister 1 1 24

Hvilke forhold skal vi ha med i klassediagrammet? Slike forhold hvor 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. Objekt-diagram Vi tegner en typisk situasjon av objekter i systemet vårt, når vi har fått datastrukturen på plass. Vi tegner og gir bare de mest sentrale dataene som: pekere peker-arrayer noen sentrale variable i objektene 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å. 25 26 Tegning av et objekt To eller ett felt(er) i en boks Navnefeltet t objekt:klasse eller bare :klasse Attributtfeltet (kan være tomt) Navnet på sentrale objektvariable, evt også med verdier Andre elementer i et objektdiagram Pekere Peker-arrayer 27 28

Et helt entregister med, enter og registeret Vi har Studenter t på Ifi som første semester tar tre, samtidig som vi har behov for å registrere og hvor mange enter som tar hvert. Vi tegner først en tenkt datastruktur et UML objektdiagram så skriver vi programmet Objektdiagrammet er en forenkling av programmet. Det tar bare med den essensielle datastrukturen (mest pekere og peker-arrayer) som holder datastrukturen sammen 29 Fra objektdiagram til Java: Student Fra objektdiagram til Java: Kurs class Student { String ; Kurs[] ; int ; Student[] ;

Fra objektdiagram til Java: StudentRegister Sammenligning: Objekt- og klassediagram t class StudentRegister { Kurs[] ; Student[] ; Student * Tar 1..* 3 Er registrert i Kurs 3..* 1 StudentRegister Har oversikt over 1 34 Oppsummering OPPSUMMERING Klasser er oppskrifter for hvordan vi lager objekter med new Vi deklarerer pekere til objekter og bruker operatoren:. Kan ha arrayer av pekere til objekter Klasse- og objektvariable og metoder. Konstruktører er startmetoder med samme som klassen, 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) 35 36