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

Like dokumenter
INF1010 våren Arv og subklasser del 1

INF1010 våren Arv og subklasser del 1

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

INF1010 våren Arv og subklasser - del 2

INF1010 våren Arv, subklasser og grensesnitt - del 2

INF1010 våren Arv og subklasser - del 2

INF1010 våren 2017 Torsdag 2. februar. Arv og subklasser - del 2

IN1010 våren 2018 Tirsdag 6. februar. Arv og subklasser - del 2

INF1010 våren Grensesnitt (interface)

INF1010 våren Grensesnitt

INF1010 våren Grensesnitt

INF1010 våren Interface (Grensesnitt)

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

INF1010 våren Arv og subklasser, del 2

Abstrakte metoder og klasser. Abstrakte metoder og klasser. Uke 9 INF1010, 27. februar 2007, Abstrakte klasser og grensesnitt (interface)

Uke 5, 27. januar Arv og subklasser del I. Stein Gjessing Institutt for informatikk

INF1010 våren Generalisering -spesialisering Gjenbruk av klasser. Ved arv. Klasse-hierarkier. Stein Gjessing.

INF1010 våren februar. Arv og subklasser, del 2

Uke 6 INF1010, 5. februar 2008, Abstrakte klasser og grensesnitt (interface) Stein Gjessing Inst for Informatikk Univ. i Oslo

INF1010 våren februar. Arv og subklasser, del 2. Repetisjon. Repetisjon - Biler. Repetisjon: Klasser - Subklasser

Abstrakte metoder og klasser. Abstrakte metoder og klasser

INF1010 våren Arv og subklasser del I

INF1010 våren 2010 Torsdag 4. februar. Arv og subklasser del I. Emneoversikt subklasser (2 uker) Hva er en subklasse? Eksempel: Universitetsregister

Abstrakte metoder og klasser

Institutt for informatikk. INF1010, 18. februar 2010, Inst for Informatikk

INF1010 oversikt med

INF1010 våren Arv og subklasser - del 2

INF1010 våren Arv og subklasser, del 2

Abstrakte metoder og klasser

INF1010 våren Arv og subklasser del 1 pluss (hvis vi har tid) litt om Unntak, IO og Scanner-klassen

INF1010, 10. februar 2009, Konstruktører. Inst for Informatikk

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

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

INF1010 våren 2007 Uke 6, 6. februar Arv og subklasser, del 2

INF1010 oversikt med. 23. mai Subklasser mm. Unntaksbehandling GUI Tråder. Stein Gjessing InsBtuC for informabkk Universitetet i Oslo

INF1010 våren Arv og subklasser del 1 (pluss litt I/O og unntaksbehandling)

INF1010 oversikt med

INF1010 våren januar. Objektorientering i Java

IN1010 våren januar. Objektorientering i Java

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

INF Seminaroppgaver til uke 3

INF1010. Grensesnittet Comparable<T>

INF1010 våren 2017 Torsdag 9. februar. Interface - Grensesnitt

Post-it spørsmål fra timen (Arv og subklasser)

INF1010, 23. februar Parametriserte klasser Om å gå gjennom egne beholdere (subklasser og grensesnitt 3)

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

IN1010 våren 2018 Tirsdag 13. februar. Interface - Grensesnitt

INF1010 oversikt med. 19. mai Subklasser mm Unntaksbehandling GUI Tråder. Stein Gjessing InsBtuC for informabkk Universitetet i Oslo

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

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

Kapittel 7: Mer om arv

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

INF1010, 8. mars Om klassehierarkier, grensesnitt (interface) og multippel arv. Konstruktører i subklasser. Unntak.

Enkle generiske klasser i Java

Læringsmål for forelesningen

INF1010 våren 2008 Uke 5, 29. januar Arv og subklasser eksempler Litt om unntakshåndtering (40 og 41) Stein Gjessing Institutt for informatikk

UNIVERSITETET I OSLO

Obligatorisk oppgave 4: Lege/Resept

IN1010 våren 2019 Onsdag 15. mai. Rask repetisjon av subklasser og tråder (pluss µ nytt)

INF1010 våren 2017 Torsdag 26. januar. Arv og subklasser del 1. Stein Gjessing Institutt for informatikk Universitetet i Oslo

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

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

INF1010 Arv. Marit Nybakken 2. februar 2004

INF1010 våren 2008 Uke 5, 29. januar Arv og subklasser eksempler Litt om unntakshåndtering (40 og 41)

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

En klasse som arver, eller selv deklarerer en abstrakt metode, må deklareres som abstrakt.

INF1000: Forelesning 6. Klasser og objekter del 1

Det finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

INF1000: Forelesning 7. Konstruktører Static

INF1000: Forelesning 7

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

IN våren 2018 Tirsdag 16. januar

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

INF1010. Stein Michael Storleer (michael) Lenkelister

2 Om statiske variable/konstanter og statiske metoder.

INF våren 2017

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

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

Kapittel 9: Sortering og søking Kort versjon

IN våren 2019 Onsdag 16. januar

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

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

Generiske mekanismer i statisk typede programmeringsspråk

n / ($$ n 0$$/ $ " 1! <! ')! $ : ; $.+ $.5.+ .!)/!/ ) $.) 6$ 7$, $.5., $ 7$,

Sortering med tråder - Quicksort

INF april 2016

OO-eksempel. Modellen ser slik ut: Studenter + antstudenter : int = 0

OPPGAVE 5b og 8b Java Kode

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

TDT4100 Objektorientert programmering

Transkript:

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

Klassehierarki: Personbil Bil Klasser - Subklasser class Bil { <lys beige egenskaper> class Personbil extends Bil { <røde egenskaper> class Lastebil extends Bil { <grønne egenskaper> class Drosje extends Personbil { <gule egenskaper> Alle lastebiler Lastebil Drosje Alle biler Alle drosjer Alle personbiler 2

Private og public i subklasser Private i en klasse gjør at ingen subklasser kan se denne egenskapen Protected i en klasse gjør at alle subklasser kan se denne egenskapen Men ingen utenfor klassen (bortsett fra i samme katalog/pakke) Public er som før class Person { protected String navn; protected int tlfnr; public boolean gyldigtlfnr() { return tlfnr >= 10000000 && tlfnr <= 99999999; Reservert ord i Java: protected 3

Hva slags objekt er dette? Den boolske operatoren instanceof hjelper oss å finne ut av hvilken klasse et gitt objekt er, noe som er nyttig i mange tilfeller: class TestFrukt { public static void main(string[] args) { Eple e = new Eple(); skrivut(e); static void skrivut(frukt f) { if (f instanceof Eple) System.out.println("Dette er et eple!"); else if (f instanceof Appelsin) System.out.println("Dette er en appelsin!"); Frukt class Frukt {.. class Eple extends Frukt {.. class Appelsin extends Frukt {.. Eple Appelsin 4

Konvertering mellom flere nivåer MasterStudent master = new MasterStudent(); Person n Konvertering oppover: Student stud = master; Person pers Person pers = master; Student n MasterStudent Student stud Konvertering nedover: stud = (Student) pers; master = (MasterStudent) pers; (fordi dette krever kontroll under kjøring) MasterStudent master Regel: Alle referanser har lov til å peke bortover og nedover (men ikke oppover ) 5

Klassehierarki: Eksempel Object Object obj Bil Bil bl Personbil Personbil p Lastebil Drosje Drosje d 6

Abstrakte metoder og klasser abstract class Ansatt { protected String navn; protected double timelonn; public abstract double beregnbonus(); Ikke lov å si new Ansatt()! Ansatt navn timelonn beregnbonus(); class Deltidsansatt extends Ansatt { public double beregnbonus() { return 0; Deltidsansatt Heltidsansatt navn timelonn Heltidsansatt objekt beregnbonus(); class Heltidsansatt extends Ansatt { protected int ansiennitetsfaktor; ansiennitetsfaktor beregnbonus() public double beregnbonus() { return timelonn* ansiennitetsfaktor; 7

Polymorfi: eksempel class Bil { protected int pris; public int skatt( ) {return pris; class Personbil extends Bil { protected int antallpassasjer; public int skatt( ) {return pris * 2; Klassehierarki: Bil Personbil class Lastebil extends Bil { protected double lastevekt; public int skatt ( ) {return pris / 2; Lastebil class Drosje extends Personbil { protected String loyveid; public int skatt ( ) {return pris / 4; Drosje 8

Polymorfi: eksempel VanligHund v Rasehund r VanligHund g public void bjeff() { System.out.println("Vov-vov"); public void bjeff() { System.out.println("Vov-vov"); public void bjeff() { System.out.println("Voff-voff"); Anta dette programmet: Hva skrives ut ved hvert av kallene: VanligHund v = new VanligHund(); Rasehund r = new Rasehund(); VanligHund g = r; v.bjeff(); r.bjeff(); g.bjeff(); Vov-vov Voff-voff Voff-voff 9

Nøkkelordet super. Nøkkelordet super brukes til å aksessere metoder i objektets superklasse. Dette kan vi bruke til å la superklassen Person ha en generell skrivdata, som så kalles i subklassene: // I klassen Person: public void skrivdata() { System.out.println("Navn: " + navn); System.out.println("Telefon: " + tlfnr); // I klassen Student: public void skrivdata() { super.skrivdata(); System.out.println("Studieprogram: " + program); // Tilsvarende i klassen Ansatt: public void skrivdata() { super.skrivdata(); System.out.println("Lønnstrinn: " + lønnstrinn); System.out.println("Timer: " + antalltimer); 10

Kall på super-konstruktøren n n n n Superklassens konstruktør kan kalles fra en subklasse ved å si: n super(); - vil kalle på en konstruktør uten parametre n super(5, test ); - om vi vil kalle på en konstruktør med to parametre (int og String) Et kall på super må legges helt i begynnelsen av konstruktøren. Kaller man ikke super eksplisitt, vil Java selv legge inn kall på super( ) helt først i konstruktøren når programmet kompileres. Hvis en klasse ikke har noen konstruktør, legger Java inn en tom konstruktør med kallet super(); 11

Dokument Arve fra flere interface interface TilUtlån Verk interface Antikvarisk Bok CD Video Tidskriftnr UtlånbarBok AntekvUtlånbrCD IkkeLånbarCD Utlånbart Tidsskriftnr IkkeLånbartTids skriftnr AntikvariskBok Utlånbart, Antekvarisk Tidsskrift n En klasse kan tilføres et ubegrenset antall interface-er n Dvs. en klasse kan spille et ubegrenset antall roller n Felles egenskaper på tvers av klassehierarkiet Antikvarisk tidsskriftnr 12

Biler Skattbar Bil Miljovennlig Lastebil Personbil LastebilMedSkattogMiljo MiljoBil

Implementere et interface: implements rollen Bil (i arv) fra klassehierarkiet class Personbil extends Bil implements Skattbar { int antpass; double momsgrunnlag = 150000; public double toll( ){return momsgrunnlag*0.5; public int momssats( ){return 25; rollen Skattbar class Bil { String regnr; Skattbar Bil interface Skattbar { double toll(); int momssats() ; Personbil 14

Et objekt og noen pekere Bil minbil; new LastebilMedSkattogMiljø() Object obj; Lastebil minlast; LastebilMedSkattogMiljø denne; Skattbar skatteobjekt; Miljovennlig miljoting; Hva kan vi se gjennom de forskjellige pekerene? Det er sant: Vi kan ha pekere av interface-type regnr lastevekt toll ( ); momssats( ); co2utslipp( ); svanemerket( ); utslipp innkjopspris Bil Lastebil rollen Skattbar rollen Miljovennlig egne ting (og egen rolle) 15

Objektorientering handler om å tydeliggjøre objektenes public-metoder. Interface gjør det. public void settinn(int tall) public int taut( ) Ukjent implementasjon av metode Ukjent implementasjon av metode Ukjente private data og ukjente private metoder

Interface: Klassehierarki og Java-kode Heltallsbeholder interface Heltallsbeholder { public void settinn(int tall); public int taut( ); EnkelHeltallsbeholder class EnkelHeltallsbeholder implements Heltallsbeholder { protected int [ ] tallene = new int [100]; protected int antall; public void settinn(int tall) {... public int taut( ) {... Når en klasse implementerer et interface tegner vi det nesten på samme måte som en superklasse / subklasse. For å markere at superklassen ikke er det, men et interface, kan vi enten skrive interface i boksen, og/eller vi kan gjøre navnet på interfacet (og boksen?) kursiv. Engelsk: Interface Norsk: Grensesnitt 17

Karnevalshund KanBjeffe VanligHund Utkledd Karnevalshund Denne figuren avspeiler interface -ene og class -ene på neste siden

interface KanBjeffe{ void bjeff(); interface Utkledd { int antallfarger(); class VanligHund implements KanBjeffe { public void bjeff() { System.out.println("Vov-vov"); Foto: AP class Karnevalshund extends VanligHund implements Utkledd { private boolean farger; public Karnevallshund (int frg) { farger = frg; public boolean antallfarger() { return farger;

Samlet import-skatt Skattbar[ ] alle = new Skattbar [100]; alle[0] = new Bil( DK12345, 150000); alle[1] = new Ost(20,5000);...... int totalskatt = 0; Type: Skattbar [ ] Navn: alle for (Skattbar den: alle) { if (den!= null) {totalskatt = totalskatt + den.skatt(); System.out.println( Total skatt: + totalskatt); Rollen Skattbar Rollen Bil (untatt Skattbar) Rollen Ost (untatt Skattbar) Veldig viktig og bra eksempel. Dagens rosin. 20

Generiske interface Inteface med parametre n På samme måte som klasser, kan interface lages med parametre. n class GeneriskBeholderTilEn <E> {... n interface Beholder <E> {... new GeneriskBeholderTilEn<Bil>( ); new Beholder<Bil>( ); 21

interface Beholder <T> { public void settinn (T en); public T taut ( ); class GeneriskBeholderTilEn <T> implements Beholder <T> { T denne; public void settinn (T en) { denne = en; public T taut ( ) {return denne; 22

class KonkretEnkelStorBeholder <E> implements EnkelStorBeholder<E> { private E [ ] alle = (E [ ] ) new Object [100]; private int antall = 0; public boolean settinn(e elem) {............ public E finnen( ) {...... public void fjern( ) {... navn: alle type: E[] navn: antall 7 type: int settinn finnen fjern Slike objekter finnes ikke (må gi E en verdi først) 23

Konklusjon interface Hva brukes interface til? Vet hjelp av interface kan forskjellige klasser og objekter ha det samme grensesnittet. Dette er en fordel når vi skal beskrive objekter med felles egenskaper. Et interface kalles gjerne også en rolle (som en subklasse) n Noen objekter kan spille flere forskjellig roller (snart: multippel arv) n Forskjellige objekter kan implementere samme rolle på forskjellige måter - innkapsling = skjuling av detaljer