IN våren 2019 Onsdag 16. januar

Like dokumenter
IN våren 2018 Tirsdag 16. januar

INF våren 2017

Velkommen til. INF våren 2016

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder.

Enkle generiske klasser i Java

Velkommen til. INF våren 2012

Velkommen til INF våren 2011

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

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

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

Introduksjon til objektorientert programmering

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

INF1010 våren januar. Objektorientering i Java

Seminaroppgaver IN1010, uke 2

IN1010 våren januar. Objektorientering i Java

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

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

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

Innhold uke 10. Objektorientert programmering i Python. Oblig 7 og 8. IN1000 Seminar! IN1000 Høst 2018 uke 10 Siri Moe Jensen

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Klasser, objekter, pekere og UML. INF gruppe 13

INF1000: Forelesning 7

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

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

INF1010 våren Grensesnitt

INF1000: Forelesning 7. Konstruktører Static

Gjennomgang av eksamen H99

GUI («Graphical User Interface») del 2

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

En introduksjon til objektorientert programmering

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

UNIVERSITETET I OSLO

INF1010 våren Grensesnitt

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

Dagens tema Kapittel 8: Objekter og klasser

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

Versjon (vil bli endret).

UNIVERSITETET I OSLO

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

Etter uke 9 skal du. Introduksjon til objektorientert programmering. Innhold. Klasser som abstraksjoner

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

GUI («Graphical User Interface») del 2

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

OPPGAVE 5b og 8b Java Kode

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Eksamen IN1010/INF1010 våren 2018

Fra problem til program

Hvorfor objektorientert programmering?

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010. Grensesnittet Comparable<T>

INF1000: Forelesning 6. Klasser og objekter del 1

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

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

Velkommen til. INF våren 2017

Obligatorisk oppgave 2: Bilhierarki

INF1010 våren Grensesnitt (interface)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Løsningsforslag Test 2

IN1010 Objektorientert programmering Våren 2019

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Kapittel 5: Objektkommunikasjon

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

UNIVERSITETET I OSLO

OPPGAVESETT 7 OBJEKTER OG REFERANSER

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

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

Fra Python til Java, del 2

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

Endret litt som ukeoppgave i INF1010 våren 2004

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

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

INF1010 Binære søketrær ++

Transkript:

IN1010 - våren 2019 Onsdag 16. januar Java Objekter og klasser Stein Gjessing Universitetet i Oslo 1 1

IN1010: Objektorientert programmering Hva er et objekt? Hva er en klasse? Aller enkleste eksempel (Horstmann kap 8.2): En teller (som f.eks. betjeningen på et fly bruker) Tell én opp Les av telleren nå Starter på null 2

Et objekt er en sort boks count ( ) getvalue( ) Ukjent implementasjon Ukjent implementasjon Ukjente private data Men den som programmerer (implementerer) klassen må selvfølgelig se inni 3

Hva er et objekt? Noe som oppstår inne i datamaskinen når vi sier new Counter( ); (hvis vi har deklarert class Counter {... ) Objekter inneholder Metoder operasjoner - handlinger public (somregel) men også private metoder til bruk inne i objektet Variable og konstanter - DATA av de primitive typene eller pekere som regel skjult for omverdenen private (innkapsling) Et objekt av klassen Counter navn: value count( ) value = value + 1; getvalue( ) return value;

Python navn: _value def init (self) self._value = 0 def count(self) self._value = self._value + 1 def getvalue(self) return self._value Java navn: value type: int Counter( ) value = 0; public void count( ) value = value + 1; public int getvalue( ) return value; class Counter: def init (self): self. _value = 0 def count(self): self._value = self. _value + 1 def getvalue(self): return self._value class Counter { private int value; public Counter() { value = 0; public void count( ) { value = value + 1; public int getvalue( ) { return value; 5

navn: boardingcounter navn: boardingcounter type: Counter Python navn: _value 01 def init (self) self._value = 0 def count(self) self._value = self._value + 1 def getvalue(self) return self._value Java navn: value 01 type: int Counter( ) value = 0; public void count( ) value = value + 1; public int getvalue( ) return value; boardingcounter = Counter ( ); boardingcounter.count( ); Counter boardingcounter = new Counter ( ); boardingcounter.count( ); tall = boardingcounter.getvalue( ); navn: tall 1 1 type: int int tall = boardingcounter.getvalue( ); navn: tall 6

Java: static-egenskaper class Counter { private static int noscounters =0; private int value; public Counter() { value = 0; noscounters ++; public void count( ) { value = value + 1; public int getvalue( ) { return value; Dette eksemplet mangler metoder som bruker verdien av noscounters 7

class Counter { private static int noscounters =0; private int value; public Counter() { value = 0; noscounters ++; public void count( ) { value = value + 1; public int getvalue( ) { return value; static-egenskaper Type: int Navn: noscounters Når programmetstarter lages enklasse-datastruktur av static -egenskapene: 3 Etter f.eks. 3 kall på new Counter() har vi 3 objekter (objekt-datastruktur): 0 Counter Type: int Navn: value value = 0; noscounters ++; 0 Counter Type: int Navn: value value = 0; noscounters ++; 0 Counter Type: int Navn: value value = 0; noscounters ++; De tegningene vi har sett hittil av variable, metoder, objekter og klassedatastrukturer kaller vi til sammen Java datastrukturer

Om å løse problemer ved hjelp av datastrukturer Når vi skal løse et problem må vi tenke oss en datastruktur som løser problemet Selve løsningen av problemet er manipulering av denne datastrukturen (en algoritme) Når du skal løse et problem: Tenk og tegn først datastrukturen Deretter kan du skrive koden (algoritmen) som lager og manipulerer datastrukturen og løser problemet 9

Mer om (Java) datastrukturer Et program oppretter en datastruktur som programmets instruksjoner manipulerer Vi må ha et mentalt bilde av dette Vi må kunne kommunisere dette bilde til andre som vi programmerer sammen med Da tegner vi datastrukturen 10

Hvor nøyaktig skal jeg tegne Java Svar: datastrukturer? Så nøyaktig som det er nødvendig for at du selv eller dem du samarbeider med skal skjønne hva som skjer med datastrukturen når programmet (algoritmen) utføres Du må gjerne tegne det på en annen måte enn slik vi gjør i IN1010, men da er det ikke sikkert vi andre skjønner deg 11

Et litt større eksempel Du har en venn som er bruktbilselger, og du skal hjelpe ham med å lage et program for å holde orden på hvor mange som er interessert i de enkelte bilene han har til salgs. Først tegner du to bil-objekter, så lager du et program som lager og bruker disse to bil-objektene. Dette programmet skal du senere utvide... Etter at du først tegnet datastrukturen og så programmerte en stund kom du fram til programmet på neste side Hvordan tenkte du? Hvordan virker dette programmet? 12

Program for salg av biler. public class BilSalg{ public static void main (String [ ] args) { int antallstein; Bil steinst = new Bil ( Stein ); Bil siriso = new Bil ( Siri ) ; steinst.foresporsel ( ); siriso.foresporsel ( ); steinst.foresporsel ( ); antallstein = steinst.finnantforesp(); System.out.println("Antall forespørsler på + Steins Toyota er " + antallstein); System.out.println("Antall forespørsler totalt + er nå " + Bil.finnTotal( ) ); class Bil { private static int total = 0; private String eier; private int antforesporsler = 0; public Bil (String navn) { eier = navn; public static int finntotal ( ) { return total; public void foresporsel ( ) { antforesporsler ++; total ++; public int finnantforesp ( ) { return antforesporsler; 13

Vi skiller mellom Klasse-deklarasjonen i programteksten. Den er et mønster som brukes både når klassedatastrukturen lages (i det programmet starter opp) og senere når nye objekter lages. Klasse-datastrukturen, dvs. den (statiske) datastrukturen som lages i det programmet starter. Objekt-datastrukturen (også kalt klasse-instanser, klasseobjekter eller bare objekter) som lages hver gang vi sier new. Utrolig Viktig! 14

Bil-objekt BilSalg klassedatastruktur public static void main (... ) navn: steinst type: Bil navn: siriso type: Bil navn: antallstein type: int 2 int antallstein; Bil steinst = new Bil ( Stein ); Bil siriso = new Bil ( Siri ) ; steinst.foresporsel ( ); siriso.foresporsel ( ); steinst.foresporsel ( ); antallstein = steinst.finnantforesp(); System.out.println("Antall forespørsler på + Steins Toyota er " + antallstein); System.out.println("Antall forespørsler totalt + er nå " + Bil.finnTotal( ) ); Antall forespørsler på Steins Toyota er 2 Antall forespørsler totalt er nå 3 navn: eier Type: String 0 Stein navn: antforesporsler 21 type: int void foresporsel( ) antforesporsler ++; total ++; int finnantforesp( ) return (antforesporsler); Bil(String navn) eier = navn; Bil-objekt Bil klassedatastruktur Navn: total 0123 finntotal return total; navn: eier Type: String 1 type: int 0 Type: int Siri navn: antforesporsler void foresporsel( ) antforesporsler ++; total ++; int finnantforesp( ) return (antforesporsler); Bil(String navn) eier = navn;