INF1000: Forelesning 7. Konstruktører Static

Like dokumenter
INF1000: Forelesning 7

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[])

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

Inf1000 (Uke 7) Objekter, klasser og pekere

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

Klasser, objekter, pekere og UML. INF gruppe 13

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

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

INF1010 UML. Marit Nybakken 26. januar 2004

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

INF1000: Forelesning 6. Klasser og objekter del 1

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

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

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

Jentetreff INF1000 Debugging i Java

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

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

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.

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

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

INF1000: noen avsluttende ord

Velkommen til. INF våren 2016

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

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

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

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

Introduksjon til objektorientert programmering

Dagens tema Kapittel 8: Objekter og klasser

UNIVERSITETET I OSLO

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

Inf1000 (Uke 9) UML og enda mer om klasser

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

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

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

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

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

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

UNIVERSITETET I OSLO

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

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

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

Enkle generiske klasser i Java

2 Om statiske variable/konstanter og statiske metoder.

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

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

Fra problem til program

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å

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

UNIVERSITETET I OSLO

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

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

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

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

INF våren 2017

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

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

Oblig4 - forklaringer. Arne og Ole Christian

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Seminaroppgaver IN1010, uke 2

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

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

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

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

Forelesning inf Java 4

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Velkommen til. INF våren 2012

UNIVERSITETET I OSLO

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

INF1000 : Forelesning 4

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

IN våren 2019 Onsdag 16. januar

Oblig 3 tips litt mer tips enn i oppgaven

Transkript:

INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML

REPETISJON 2

Repetisjon 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

Repetisjon forts. Et Javaprogram består av en eller flere klasser En klasse er en deklarasjon av data og metoder for ett objekt av klassen: class Kurs { String kurskode; int studiepoeng; For å ta vare på objekter, trenger vi pekere til dem: Kurs inf; inf Vi lager objekter med new: inf = new Kurs(); INF1000 kurskode studiepoeng Vi får adgang til det som er inni et objekt med. : inf.kurskode = "INF1000"; 4

Komplett eksempel class Kurs { String kurskode; int studiepoeng; void skrivut() { System.out.println("Kurs med kode: " + kurskode + ", og stp: " + studiepoeng); class KursRegister { public static void main(string[] args) { Kurs inf; inf = new Kurs(); inf.kurskode = "INF1000"; inf.studiepoeng = 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: class Kurs { String kurskode; int studiepoeng; Kurs(String kode, int poeng) { kurskode = kode; studiepoeng = poeng; Eksempel på bruk: Kurs k = new Kurs("INF1000", 10); 7

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: class Kurs { String kurskode; int studiepoeng; Kurs(String kurskode, int studiepoeng) { this.kurskode = kurskode; this.studiepoeng = studiepoeng; 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 navnet 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) 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 navn, 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

Klasse-variable eksempel Hver kurs skal ha en unik id, som starter på 1 for det første kurset som opprettes. Må i tillegg holde rede på hvor mange kurs vi har laget så langt. Dette er en egenskap ved klassen, ikke hvert enkelt objekt vi bruker derfor en statisk variabel til dette: class Kurs { String kurskode; int studiepoeng, int id; static int antallkurs = 0; Kurs(String kurskode, int studiepoeng) { this.kurskode = kurskode; this.studiepoeng = studiepoeng; 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 navn, 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 navn, 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; Hvordan rette feilen? 15

UML 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 17

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 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(): 18

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

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 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 student 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 student. 21

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

Studentregister Et studentregister holder orden på studentene og kursene, og en student tar 3 kurs hvert semester Hvert kurs har oversikt over studentene som tar kurset Tar Student Kurs 1..* 3 3..* * Er registrert i Har oversikt over StudentRegister 1 1

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 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. 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

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 navngir bare de mest sentrale dataene som: pekere peker-arrayer noen sentrale variable i objektene 26

Tegning av et objekt To eller ett felt(er) i en boks Navnefeltet t objektnavn:klassenavn eller bare :klassenavn Attributtfeltet (kan være tomt) Navnet på sentrale objektvariable, evt også med verdier 27

Andre elementer i et objektdiagram Pekere Peker-arrayer 28

Et helt studentregister med kurs, studenter og registeret Vi har Studenter t på Ifi som første semester tar tre kurs, samtidig som vi har behov for å registrere kurs og hvor mange studenter som tar hvert kurs. Vi tegner først en tenkt datastruktur et UML objektdiagram så skriver vi programmet 29

Objektdiagrammet er en forenkling av programmet. Det tar bare med den essensielle datastrukturen (mest pekere og peker-arrayer) som holder datastrukturen sammen : Student minekurs navn : Kurs : Kurs kurskode antstudenter studentene : StudentRegister kurs stud

Fra objektdiagram til Java: Student : Student minekurs navn : Kurs : Kurs kurskode antstudenter studentene : StudentRegister kurs stud class Student { class Student { String navn; Kurs[] minekurs;

Fra objektdiagram til Java: Kurs : Student minekurs navn : Kurs : Kurs kurskode antstudenter studentene : StudentRegister kurs stud class Kurs { class Kurs { String kurskode; int antstudenter; Student[] studentene;

Fra objektdiagram til Java: StudentRegister : Student minekurs navn : Kurs : Kurs kurskode antstudenter studentene : StudentRegister kurs stud class StudentRegister { class StudentRegister { Kurs[] kurs; Student[] stud;

Sammenligning: Objekt- og klassediagram : Student t minekurs navn : Kurs : Kurs kurskode antstudenter studentene : StudentRegister kurs stud Tar Student 1..* 3 * Er registrert i Kurs 3..* 1 StudentRegister Har oversikt over 1 34

OPPSUMMERING 35

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 navn 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) 36