INF våren 2017

Like dokumenter
IN våren 2018 Tirsdag 16. januar

IN våren 2019 Onsdag 16. januar

Velkommen til. INF våren 2016

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder.

Velkommen til. INF våren 2012

Velkommen til INF våren 2011

Enkle generiske klasser i Java

Introduksjon til objektorientert programmering

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

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

INF1010 våren januar. Objektorientering i Java

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

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

Seminaroppgaver IN1010, uke 2

IN1010 våren januar. Objektorientering i Java

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

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

INF1000: Forelesning 7

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

En introduksjon til objektorientert programmering

INF1000: Forelesning 7. Konstruktører Static

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

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

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

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. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

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

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

INF1010 våren Grensesnitt

UNIVERSITETET I OSLO

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

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

UNIVERSITETET I OSLO

Gjennomgang av eksamen H99

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

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

GUI («Graphical User Interface») del 2

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

UNIVERSITETET I OSLO

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

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

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

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

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:

Dagens tema Kapittel 8: Objekter og klasser

Fra problem til program

UNIVERSITETET I OSLO

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

INF1010 våren Grensesnitt

Versjon (vil bli endret).

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

INF1010 Binære søketrær ++

Obligatorisk oppgave 2: Bilhierarki

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

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

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

INF1010. Grensesnittet Comparable<T>

Eksamen IN1010/INF1010 våren 2018

Klasser, objekter, pekere og UML. INF gruppe 13

UNIVERSITETET I OSLO

Kapittel 5: Objektkommunikasjon

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

UNIVERSITETET I OSLO

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Hvorfor objektorientert programmering?

GUI («Graphical User Interface») del 2

UNIVERSITETET I OSLO

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

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

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

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

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

Sortering med tråder - Quicksort

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

UNIVERSITETET I OSLO

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

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

Forelesning inf Java 5

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Forelesning inf Java 5

OPPGAVESETT 7 OBJEKTER OG REFERANSER

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

INF1010 våren Grensesnitt (interface)

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Endret litt som ukeoppgave i INF1010 våren 2004

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

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

Velkommen til. INF våren 2017

Transkript:

INF1010 - våren 2017 Om Java Objekter og klasser Både for deg som kan og for deg som ikke kan Java Stein Gjessing Universitetet i Oslo Ny versjon etter forlesningen der tre meningsløse private modifikatorer er fjernet I konstruktøren til klassen BilSalg på side 14. Nå håper jeg at klassen BilSalg er riktig. 1

INF1010: Objektorientert Hva er et objekt? Hva er en klasse? programmering 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 2

Et objekt er en sort boks public void count () public int getvalue( ) Ukjent implementasjon av metode Ukjent implementasjon av metode Ukjente private data (og ukjente private metoder) 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 Variable og konstanter - DATA av de primitive typene eller pekere som regel skjult for omverdenen private (innkapsling) Metoder operasjoner - handlinger public (somregel) men også private metoder til bruk inne i objektet Et objekt av klassen Counter navn: value type: int public void count( ) value = value + 1; public int 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( ); int tall = boardingcounter.getvalue( ); navn: tall navn: tall 1 1 type: int 6

To tellere (Bare Java) navn: concertcounter type: Counter navn: value type: int navn: boardingcounter type: Counter navn: value type: int public void count( ) value = value + 1; public void count( ) value = value + 1; public int getvalue( ) return value; public int getvalue( ) return value; class Counter { private int value; public void count( ) { value = value + 1; public int getvalue( ) { return value; Counter concertcounter = new Counter( ); Counter boardingcounter = new Counter ( ); concertcounter. count( ); boardingcounter.count( ); int tall = concertcounter.getvalue( ); 7

Klasser i Java Svært enkelt eksempel på Java- klasse: class Klasseeksempel { private static int totalantall = 0; private int teller = 0; Hva er forskjellen på disse to tallene? En litt uvanlig klasse uten metoder 8

class Klasseeksempel { private static int totalantall = 0;; private int teller = 0;; 0 Type: int Navn: totalantall Én klassedatastruktur = static - egenskapene Etter f.eks. 3 kall på new Klasseeksempel() har vi objekter: Type: int Type: int 0 Navn: teller 0 Navn: teller 0 Type: int Navn: teller De tegningene vi har sett hittil av variable, metoder, objekter og klassedatastrukturer kaller vi til sammen Java datastrukturer 9

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 10

Mer om 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 11

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 INF1010, men da er det ikke sikkert vi andre skjønner deg 12

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

Program for salg av biler. public class BilSalg{ private static BilSalg salgsobjekt; public static void main (String [ ] args) { salgsobjekt = new BilSalg ( ); BilSalg ( ) { int antallsteinb; Bil steinst = new Bil ( ); Bil oleso = new Bil ( ) ; steinst.foresporsel ( ); oleso.foresporsel ( ); steinst.foresporsel ( ); antallsteinb = steinst.finnantforesp(); System.out.println("Antall forespørsler på + Steins Toyota er " + antallsteinb); System.out.println("Antall forespørsler totalt + er nå " + Bil.finnTotal( ) ); //slutt konstruktør class Bil { private static int total = 0; private int antforesporsler = 0; public static int finntotal ( ) { return total; public void foresporsel ( ) { antforesporsler ++; total ++; public int finnantforesp ( ) { return antforesporsler; 14

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, klasse- objekter eller bare objekter) som lages hver gang vi sier new. Utrolig Viktig! 15

BilSalg klassedatastruktur Navn: salgsobjekt null main Type: BilSalg salgsobjekt = new BilSalg ( ); Bil- objekt navn: antforesporsler 12 type: int 0 void foresporsel( ) Bil klassedatastruktur Navn: total 0123 finntotal return total; Type: int BilSalg( ) navn: steinst Type: Bil navn: oleso Type: Bil navn: antallsteinb 2 int int antallsteinb; Bil steinst = new Bil ( ); Bil oleso = new Bil ( ) ; steinst.foresporsel ( ); oleso.foresporsel ( ); steinst.foresporsel ( ); antallsteinb = steinst.finnantforesp(); System.out.println("Antall forespørsler på + Steins Toyota er " + antallsteinb); System.out.println("Antall forespørsler totalt + er nå " + Bil.finnTotal( ) ); BilSalg- objekt antforesporsler ++; total ++; int finnantforesp( ) return (antforesporsler); Antall forespørsler på Steins Toyota er 2 Antall forespørsler totalt er nå 3 Bil- objekt navn: antforesporsler 1 type: int void foresporsel( ) 0 antforesporsler ++; total ++; int finnantforesp( ) return (antforesporsler); 16