Velkommen til. INF våren 2016

Like dokumenter
INF våren 2017

IN våren 2019 Onsdag 16. januar

IN våren 2018 Tirsdag 16. januar

Velkommen til. INF våren 2017

Velkommen til. IN1010 Objektorientert programmering Våren 2018

Velkommen til. INF våren 2012

Velkommen til INF våren 2011

IN1010 Objektorientert programmering Våren 2019

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder.

Enkle generiske klasser i Java

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

INF1000: Forelesning 7. Konstruktører Static

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

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF1000: Forelesning 7

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

INF1000 Eksamensforberedelser og -tips. Høst 2014 Siri Moe Jensen

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

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

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

Forelesning inf Java 4

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

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

INF 1000 høsten 2011 Uke september

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

Sortering med tråder - Quicksort

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 : Forelesning 4

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

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

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

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

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

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

Dagens tema Kapittel 8: Objekter og klasser

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

Introduksjon til objektorientert programmering

INF1010 våren januar. Objektorientering i Java

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

UNIVERSITETET I OSLO

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

(MVC - Model, View, Control)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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

INF1000: noen avsluttende ord

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

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

UNIVERSITETET I OSLO

IN1010 våren januar. Objektorientering i Java

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

UNIVERSITETET I OSLO

Innhold. INF1000 Høst Hva skal evalueres? Fra kurssidene. Hvorfor har vi en lærebok? Uke 11: Repetisjon og pensumgjennomgang

Forelesning inf Java 5

Gjennomgang av eksamen H99

Forelesning inf Java 5

UNIVERSITETET I OSLO

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

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

INF Uke 10. Ukesoppgaver oktober 2012

Oversikt. Hva er programmering & Java forkurset til INF1000. Hva er en datamaskin. Arne Maus Inst for Informatikk Univ. i Oslo

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

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

Versjon (vil bli endret).

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

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

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

Forelesning inf Java 1

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

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

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

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

UNIVERSITETET I OSLO

INF1010. Grensesnittet Comparable<T>

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

INF Obligatorisk innlevering 5

INF Oblig 2 semantikksjekk og kodegenerering

UNIVERSITETET I OSLO

INF1010 UML. Marit Nybakken 26. januar 2004

Oversikt. Uke 2, INF 1000, 30 aug Variable, tilordninger og uttrykk. Repetisjon: Java programmering

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

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

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

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

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

UNIVERSITETET I OSLO

MAT-INF 1100: Obligatorisk oppgave 1

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

Eksamen IN1010/INF1010 våren 2018

Java-kurs. Andreas Knudsen Nils Grimsmo 9th October 2003

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

MAT-INF 1100: Obligatorisk oppgave 1

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Forelesning inf Java 1

Transkript:

Velkommen til INF1010 - våren 2016 Denne uken (onsdag og torsdag): Om INF1010 Java datastrukturer Klasser med parametre i Java Stein Gjessing Institutt for informatikk Universitetet i Oslo 1 1

INF1010 Objektorientert programmering I INF1010 skal du lære: Å løse et (middels stort) problem ved å lage et program Å lage gode (middels store) programmer Vite hva et godt program er Forskjellige måter å lage gode programmer på Objektorientert programmering Ble funnet opp av Ole-Johan Dahl og Kristen Nygaard Det første objektorienterte språket het Simula 2

Læreboka Horstmann: Big Java, Late objects 2013 (Java 5, 6, 7) Kap 1 8 er forkunnskapskrav Kap 9 (arv) Kap 10 og 11 (GUI, men med Java FX (Java 8)) Kap 12 (design) Kap 13 ikke alt (rekursjon) Kap 14 (sortering og søking) bare som eksempelstoff Kap 15 og 16 ikke alt (datastrukturer) Kap 17 ikke pensum (INF2220) Kap 18 (klasser med parametre) Kap 19 streams - ikke alt Kap 20 på ne'et (tråder) Foreløpig pensum Gammel lærebok Rett på Java : Se pensum 2015??? 3

Objektorientert programmering Ble funnet opp i Oslo for over 50 år siden av Ole- Johan Dahl og Kristen Nygaard. Språket de fant opp: Simula Java, C++, Smalltalk,... bygger på Simula Foreleserene i INF1010 (Stein og Stein Michael) hadde Dahl og Nygaard som lærere Pensum er ikke bare læreboka (Horstmann), men også det som foreleses (lysarkene) og disse inneholder mye av det vi har lært av Dahl og Nygaard Oae en annen rekkefølge/ vinkling enn Horstmann 4

Problem Spesifikasjon Program 5

Problemene i INF1010 er små Mange av de konseptene vi behandler er vik$gst når programmene blir større Mange programmer i INF1010 er små Konseptene blir introdusert med små, enkle programmer Tenk på de'e når dere lærer noe ny' (vi forelesere skal også minne dere på det) I noen obligatoriske oppgaver prøver vi å løse li' større problemer 6

I INF1010 skal du også lære å tenke på hva som skjer inne i datamaskinen når javaprogrammet di' blir udørt å tenke deg hvordan oppgaven som programmet di' skal løse, løses ved hjalp av datastrukturer og algoritmer inne i datamaskinen å tegne datastrukturer for å forstå det selv for å kommunisere om programmet med andre 7

INF1010 Forkunnskapskrav Du kan løse små probemer i Java vha. Variable og konstanter Både av basale typer og pekere (referanser) Tilordninger Kontrollstrukturer (valg og løkker) Arrayer (av basale typer og pekere) Metoder (med parametre og returverdier) Klasser Objekter 8

Denne uken I dag: Java datastrukturer Les: Litt om datastrukturer i Java av Stein Gjessing Les foilene som ligger på hjemmesiden til kurset (disse) Det meste er repetisjon av INF1000 I morgen: Generiske klasser - dette er nytt Les Enkle generiske klasser i Java av Stein Gjessing Kap 18.1 og 18.2 i Horstmann 9

Om å tegne datastrukturer Et program oppre'er en datastruktur som programmets instruksjoner manipulerer Vi må ha et mentalt bilde av de'e Vi må kunne kommunisere de'e $l andre som vi programmerer sammen med Derfor TEGNER vi datastrukturen 10

Variable og konstanter (data) En variabel eller en konstant (av en primitiv type eller en peker) består av 3 ting: 1. Et navn 2. En (primitiv) type (eller klassenavn eller array-type) 3. Et innhold En boks med navn og type utenpå, og en verdi inni I programmet: int antall = 3; Når programmet utføres (inne i datamaskinen): type: int 3 navn: antall 11

Variable, tilordninger og uttrykk Vi gir variabler verdi ved en tilordningssetning, der likhetstegnet betyr settes lik: <venstreside> = <høyreside> 0. Hvis venstresiden deklarerer en variabel: Opprett denne 1. Regn ut høyresiden (som er et uttrykk) 2. Sett resultatet inn i variabelen på venstresiden type: int int antall = 3; antall = antall + 4; 37 navn: antall Variabelnavnet vil på venstre side av et likhetstegn bety lagerplassen som skal gis ny verdi. På høyre side av likhetstegnet betyr variabelnavnet den verdien som er lagret i boksen med dette navnet (som alltid i et uttrykk). 12

I Horstmann kap. 8 (s 366) 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( ); 13

Det samme i INF1010 navn: concertcounter type: Counter navn: value type: int navn: boardingcounter type: Counter navn: value type: int void count( ) value = value + 1; void count( ) value = value + 1; int getvalue( ) return value; 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( ); 14

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 (innkapsling) Metoder public (som regel) men også ikke public metoder til bruk inne i objektet Klasser er objektenes mønstre Et objekt av klassen Counter navn: value type: int void count( ) value = value + 1; int getvalue( ) return value;

Statiske data og metoder Hvordan tegner vi de statiske egenskapene til en klasse? De finnes jo bare én gang for hver klasse! Svar: Vi tegner dem opp på ett sted i noe vi kaller en klassedatastruktur Eksempel: Klassedatastrukturen til klassen Noe class Noe { public static void main (String [ ] args) {... } static int antall= 0; final static int MAX = 100; int besthittil; int finnbeste ( ) {... return ; } } Type: int Navn: antall Type: int Navn: MAX public static void main (String [ ] args)... 16

Java datastrukturer Hva skjer inne i en datamaskin når et Javaprogram blir utført? Masse elektroner farer rundt Umulig å skjønne Vi skal tegne det som foregår inne i datamaskinen når Javaprogrammet vårt blir utført Vi kaller det Java datastrukturtegninger Den som programmerer må ha fullstendig oversikt over det som foregår inne i maskinen (men ikke alt på en gang) Når jeg programmerer ser jeg for meg det som skal foregå inne i maskinen og skriver Java-instruksjoner for å få det til Noen ganger bare tenker jeg meg hvordan Java datastrukturen ser ut, andre ganger tegner jeg den (mer eller mindre fullstending) på papir 17

Hvor nøyak$g skal jeg tegne Java Svar: datastrukturer? Så nøyak$g som det er nødvendig for at du selv eller dem du samarbeider med skal skjønne hva som skjer når programmet udø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 18

Et 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 $l salgs. Først lager du et program for to biler, de'e skal du senere utvide... E'er at du har programmert en stund kommer du fram $l programmet på neste side Men har du tenkt rik$g? Hvordan virker de'e programmet? 19

Program for salg av biler. public class BilSalg{ 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 } // slutt BilSalg class Bil { static private int total = 0; private int antforesporsler = 0; public static int finntotal ( ) { return total; } public void foresporsel ( ) { antforesporsler ++; total ++; } public int finnantforesp ( ) { return antforesporsler; } } //slutt Bil 20

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

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 01 23 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); 22

Mer tegning (bare for å demonstrere variable og objekter) Java datastrukturtegninger m/parametre Filen heter BrukSum.java class Sum { int tall = 11; static int statt = 12; public void skrivt (int tl) { int sum; sum = tall + statt + BrukSum.tall1 + tl; System.out.println("Summen er " + sum); } } // slutt Sum Oversettes og kjøres med >javac BrukSum.java >java BrukSum Oversetteren lager to filer: BrukSum.class og Sum.class Java fikling public class BrukSum { static int tall1 = 16; static int tall2 = 10; int ubrukt = 15; public static void main(string [ ] args) { Sum testpeker; tall1 = 13; testpeker = new Sum( ); testpeker.skrivt(tall2+4); } } // slutt BrukSum 23

Java datastruktur-tegning ved kjøring av BrukSum klassedatastruktur BrukSum main navn: args navn: tall1 13 16 type: int navn: tall2 10 type: int type: String[] navn: testpeker type: Sum tall1 = 13; testpeker = new Sum( ); testpeker.skrivt(tall2+4); navn: statt 12 type: int Objekt av klassen Sum skrivt(int tl) navn: tall 11 type: int navn: sum 50 type: int navn: tl 14 type: int Klassedatastruktur Sum int sum; sum = tall + statt + BrukSum.tall1 + tl; System.out.println( Summen er + sum); Summen er 50 24

Li' om $lgang $l egenskaper i objekter private betyr at den ikke er kjent utenom klassen public betyr at den sees av alle Ingen modifikator betyr at egenskapen er kjent innenfor filen/katalogen/pakken 25

Tes$ng (mer neste torsdag og i INF1050) Alle klasser og metoder testes først separat (enhetstes$ng), så samlet mer om enhetstes$ng neste torsdag Regresstes$ng kjør alle gamle tester + evt. nye hver gang noe endres (ikke bare test det nye med nye tester) Tes$ng kan aldri vise fravær av feil, bare at systemet virker for visse inndata. Bevis av programmer? Særs vanskelig og dyrt Lønner seg bare i helt spesielle $lfeller 26

Dokumentasjon, brukeropplæring, innføring Ikke del av de'e kurset, men meget vik$g. Dekkes av andre kurs, bl.a. INF1050 VIKTIG! 27