INF1010 våren 2005 Uke 3, 25. januar Arv og subklasser del I

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

IN1010 våren 2019 Onsdag 6. februar. Arv og subklasser - del 2

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

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

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

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

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

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

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

INF1010 våren Arv og subklasser del 1

INF1010 våren Arv og subklasser - del 2

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

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

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

INF1010 våren Arv og subklasser del 1

INF1010 våren Arv og subklasser - del 2

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

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

INF1010 våren Arv og subklasser - del 2

INF våren januar, uke 3 - Oversikt og forutsetninger Java datastruktur-tegninger

Om Grafiske Bruker-Grensesnitt (GUI) Hvordan gjør vi det, to typer av vinduer? GUI (Graphical User Interface)-programmering

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

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

INF1010 våren Arv og subklasser, del 2

INF1010 våren 2005 Uke 4, 1. februar Arv og subklasser, del 2

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

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

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

INF våren 2005 Uke 1, 11 jan - Praktisk, oversikt og forutsetninger

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Hvordan gjør vi det, to typer av vinduer? Om Grafiske Bruker-Grensesnitt (GUI) GUI (Graphical User Interface)-programmering

Tråder i Java Parallelle programmmer og programbiter

INF3030 Uke 7, våren Eric Jul PSE Inst. for informatikk

INF1010 Arv. Marit Nybakken 2. februar 2004

EKSAMEN Løsningsforslag

INF2440 Uke 5, våren2018. Eric Jul PSE Inst. for informatikk

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

IN3030 Uke 12, v2019. Eric Jul PSE, Inst. for informatikk

INF2440, Uke 3, våren 2018 Regler for parallelle programmer, mer om cache og Radix-algoritmen. Eric Jul PSE, Inst. for informatikk

Klasser, objekter, pekere og UML. INF gruppe 13

FØLGER, REKKER OG GJENNOMSNITT

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf GUI - del 2

EKSAMEN løsningsforslag

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

INF3030 Uke 6, våren Eric Jul PSE Inst. for informatikk

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Tallsystemer. Læringsmål. Posisjonstallsystemer. Potensregning en kort repetisjon 123 = = 7B 16. Forstå posisjonstallsystemer

EKSAMEN Løsningsforslag

Econ 2130 Forelesning uke 11 (HG)

INF1000: Forelesning 7

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

Kapittel 9: Mer kombinatorikk

ÅMA110 Sannsynlighetsregning med statistikk, våren Kontinuerlige tilfeldige variable, intro. Kontinuerlige tilfeldige variable, intro.

OM TAYLOR POLYNOMER. f x K f a x K a. f ' a = lim x/ a. f ' a z

Kapittel 7: Mer om arv

INF1000: noen avsluttende ord

Kapittel 8: Estimering

INF1000: Forelesning 6. Klasser og objekter del 1

Differensligninger Forelesningsnotat i Diskret matematikk Differensligninger

Avsnitt 8.1 i læreboka Differensligninger

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

INF1000: Forelesning 7. Konstruktører Static

Uke 12 IN3030 v2019. Eric Jul PSE-gruppa Ifi, UiO

Forkunnskaper i matematikk for fysikkstudenter. Derivasjon.

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000 våren 2006

Mer om utvalgsundersøkelser

INF1010 våren Arv og subklasser, del 2

ÅMA110 Sannsynlighetsregning med statistikk, våren 2007

Kombinatorikk. MAT1030 Diskret matematikk Forelesning 20: Kombinatorikk. Repetisjon. Repetisjon

Enkle generiske klasser i Java

INF Notater. Veronika Heimsbakk 10. juni 2012

MA1101 Grunnkurs Analyse I Høst 2017

STK1100 våren 2017 Estimering

UNIVERSITETET I OSLO

Kapittel 5: Tilfeldige variable, forventning og varians.

ÅMA110 Sannsynlighetsregning med statistikk, våren Kontinuerlige tilfeldige variable, intro. Kontinuerlige tilfeldige variable, intro.

Oppgave 1. (i) Hva er sannsynligheten for at det øverste kortet i bunken er et JA-kort?

ÅMA110 Sannsynlighetsregning med statistikk, våren Kontinuerlige tilfeldige variable, intro. Kontinuerlige tilfeldige variable, intro.

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

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Eksamen R2, Høsten 2010

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

INF2440 Effektiv parallellprogrammering Uke 1, våren Eric Jul Professor PSE Institutt for Informatikk

Unntak og feilsituasjoner i Java (samt litt ekte Java I/O)

1 TIGRIS Tidlig intervensjon i forhold til rusmiddelbruk i graviditet og småbarnsperiode

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

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

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

ÅMA110 Sannsynlighetsregning med statistikk, våren 2010 Kp. 6, del 4

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

TMA4245 Statistikk Eksamen mai 2017

Læringsmål for forelesningen

INF våren 2004 Uke2, 18 jan - Fra problem til program. Utvikling av store datasystemer. 13 UML-diagrammer. Oversikt:

Løsningsforslag til eksamen

Ø^ h ^ c^ c^ ST. OLAVS HOSPITAL 0 UNIVERSITETSSYKEHUSET I TRONDHEIM. St. OLAVS HOSPITAL HF. SAMARBEIDSAVTALE på institusjonsnivå mellom

Transkript:

Emeoversikt subklasser INF1010 våre 2005 Uke 3, 25. jauar Arv og subklasser del I Stei Gjessig Istitutt for iformatikk 1 Geeraliserig - spesialiserig Gjebruk av klasser Ved sammesetig (komposisjo) Ved arv Referaser Klasse-hierarkier Virtuelle metoder Nøkkelordet super Koverterig av referaser Klasse Object Metodee equals() og tostrig() Nøkkelordet istaceof Kostruktører 2 Eksempel: Uiversitetsregister I et mii-system for uiversitetet i Oslo skal alle studeter registreres med av og telefoummer (åtte siffer), samt hvilket studieprogram de er tatt opp til. Det skal være mulig for studeter å bytte program. Systemet skal også ieholde iformasjo om de asatte ved uiversitetet, emlig av, telefoummer, løstri og atall arbeidstimer per uke. Tekiskadmiistrativt asatte har e arbeidsuke på 37.5 timer, mes viteskapelig asatte har 40-timers arbeidsuke. Klasse Studet class Studet { Strig av; it tlfr; Strig program; System.out.pritl("Nav: " + av); System.out.pritl("Telefo: " + tlfr); System.out.pritl("Studieprogram: " + program); boolea gyldigtlfr() { retur tlfr >= 10000000 && tlfr <= 99999999; void byttprogram(strig ytt) { program = ytt; 3 4

Klasse Asatt Studet vs Asatt class Asatt { Strig av; it tlfr; it løstri; it atalltimer; System.out.pritl("Nav: " + av); System.out.pritl("Telefo: " + tlfr); System.out.pritl("Løstri: " + løstri); System.out.pritl("Timer: " + atalltimer); boolea gyldigtlfr() { retur tlfr >= 10000000 && tlfr <= 99999999; void løtillegg(it tillegg) { løstri += tillegg; 5 Felles variable: av, tlfr Ege variable: Studet: program Asatt: løstri, atalltimer Felles metoder: gyldigtlfr() Ligede metoder: skrivdata() Ege metoder: Studet: yttprogram(strig ytt) Asatt: løstillegg(it tillegg) 6 Klasse Perso Studet og Asatt som subklasser Ka samle det som er felles i e ege, mer geerell, klasse: class Perso { Strig av; it tlfr; boolea gyldigtlfr() { retur tlfr >= 10000000 && tlfr <= 99999999; Ka å gjøre Studet og Asatt til subklasser av Perso: class Studet exteds Perso { Strig program; void byttprogram(strig ytt) { program = ytt; class Asatt exteds Perso { it løstri; it atalltimer; Agir at klassee Studet og Asatt er subklasser (= utvidelser) av klasse Perso. void løstillegg(it tillegg) { løstri += tillegg; 7 Hva med skrivdata()? - Kommer tilbake til dee 8

Bruk av e subklasse UML-otasjo for subklassehierarki Vi ka bruke variable og metoder i e subklasse på samme måte som om vi hadde defiert alt i e klasse: Ute bruk av subklasser: class Studet { Strig av; it tlfr; Strig program; boolea gyldigtlfr() {... void byttprogram(strig ytt) {... Med bruk av subklasser: Studet stud = ew Studet(); stud.gyldigtlfr(); Strig prog = stud.program; class Perso { Strig av; it tlfr; boolea gyldigtlfr() {... class Studet exteds Perso { Strig program; void byttprogram(strig ytt) {... class Perso { Strig av; it tlfr; boolea gyldigtlfr() {... class Studet exteds Perso { Strig program; void byttprogram(strig ytt) {... class Asatt exteds Perso { it løstri; void løstillegg (it tillegg){ løstri += tillegg; Perso Studet Asatt 9 10 class Studet { Strig av; it tlfr; Strig program; boolea gyldigtlfr() {... void byttprogram(strig ytt) {... Eksempler på objekter av klassee class Perso { Strig av; it tlfr; boolea gyldigtlfr() {... class Studet exteds Perso { Strig program; void byttprogram(strig ytt) {... av tlfr gyldigtlfr() Hva er e subklasse? E subklasse er e klasse som bygger på e allerede spesifisert klasse, og som dermed arver dees egeskaper i tillegg til å utvide med ege egeskaper (metoder/variable). E subklasse er altså e mer spesialisert utgave av klasse de bygger på. Klasse vi bygger på kalles da e superklasse. av tlfr program gyldigtlfr() byttprogram() av tlfr gyldigtlfr() program byttprogram() 11 12

Geeraliserig spesialiserig Klasser - Subklasser Nav Tlfr Klassehierarki: Bil class Bil {... Nav Tlfr Løstri AtallTimer Perso Asatt Studet Nav Tlfr Program Lastebil Persobil Drosje class Persobil exteds Bil {... class Lastebil exteds Bil {... class Drosje exteds Persobil {... 13 14 Klassehierarki: Alle lastebiler Persobil Lastebil Bil Klasser - Subklasser Drosje class Bil { <grøe egeskaper> class Persobil exteds Bil { <røde egeskaper> class Lastebil exteds Bil { < blå egeskaper> class Drosje exteds Persobil { < gule egeskaper> Alle biler Alle drosjer Alle persobiler Gjebruk av klasser Ved sammesetig (komposisjo): Deklarer referasevariable (pekere) til klasse Lag objekter av klasse Kall på metoder i klasse Ved arv : Lag e y klasse som utvider de eksisterede klasse Føy til ekstra variable og metoder 15 16

Gjebruk ved sammesetig Gjebruk ved arv Gjebruk ved sammesetig har dere allerede sett mage eksempler på i INF1000. Eksempel: class PersoRegister { HashMap medlemmer = ew HashMap(); Perso p = ew Perso(); Strig av = "Aud-Georg"; medlemmer, p og av er /* Diverse metoder */ deklarert som pekere til objekter av adre klasser som allerede eksisterer. :PersoRegister medlemmer p av="aud-georg" :Perso class Bok { Strig tittel, forfatter; class Fagbok exteds Bok { double dewey; class Skjølitterærbok exteds Bok { Strig sjager; class Bibliotek { Bok b1 = ew Fagbok(); Bok b2 = ew Skjølitterærbok(); :Bibliotek b1 b2 :Fagbok tittel=... forfatter=... dewey=... :Skjølitterærbok tittel=... forfatter=... sjager=... 17 18 Når skal vi bruke arv? Oppgave Geerelt: Ved er-e relasjo mellom objektee. E Studet er e Perso E Asatt er e Perso Hva med relasjoee roma bok? E roma er e bok (arv). kapittel bok? Et kapittel er ikke e bok, me e bok har/består av kapitler. Relasjoer som har-e og består-av skal ikke modelleres som subklasser, me ved hjelp av sammesetig (som datafelt (attributter/variable)). Hvor er det aturlig å bruke komposisjo og hvor er det aturlig med arv i disse tilfellee? Relasjo mellom Komposisjo Arv vare - varelager yhetskaal - kaal perso - persoregister cd - spor (sager) PC - datamaski gaupe - rovdyr fly - trasportmiddel motor - bil 19 20

Ulike måter å se et objekt på Type (klasse) til et objekt er uforaderlig. Et objekt ka likevel fremtre for oss på ulike måter. Et objekt av klasse class Studet exteds Perso {... ka vi se på som et objekt av type (klasse) Perso: da er egeskapee som er spesielle for Studet ikke sylige (me de er der fortsatt!). Studet: da er både Perso- og Studetegeskapee sylige for oss. Det er referases type som avgjør hvorda objektet fremtrer. (med utak av virtuelle metoder, sart skal vi lære hav dette er) 21 Ulike referasetyper Objekter av class Studet { Vi ka ha e referase av type Studet (s) Studet s; Perso p; s s p gyldigtlfr() av =... tlfr =... byttprogram() program =... Objekter av class Studet exteds Perso { gyldigtlfr() av =... tlfr =... byttprogram() program =... Vi ka ha e referase av type Studet (s) eller type Perso (p) 22 Eksempel Klasse-hierarkier class Perso { Strig av; it tlfr; boolea gyldigtlfr() {... class Studet exteds Perso { Strig program; void byttprogram(strig ytt) {... s Strig av; it tlfr: gyldigtlfr() program =... byttprogram() p Strig av; it tlfr: gyldigtlfr() program =... byttprogram() Ata: Studet s = ew Studet(); Perso p = ew Studet(); Hvilke av følgede uttrykk er å lovlige? s.av = "Aud-Georg"; s.gyldigtlfr(); s.program = "Matte"; s.byttprogram("data"); p.av = "Aud-Georg"; p.gyldigtlfr(); p.program = "Matte"; p.byttprogram("data"); 23 Det er mulig å defiere subklasser av e subklasse: class Perso { Strig av; it tlfr; class Studet exteds Perso { Strig program; class MasterStudet exteds Studet { Strig veileder; Obs: Her er MasterStudet e subklasse av både Studet og Perso, og arver egeskaper fra begge disse. Perso Studet MasterStudet 24

Omdefierig av metoder Omdefierig: eksempel Vi har sett at det med subklasser er mulig å utvide e eksisterede klasse med ye metoder. E subklasse ka også defiere e metode med samme sigatur som e metode i superklasse, me med ulikt ihold. De ye metode vil omdefiere (erstatte) metode som er defiert i superklasse. Metoder som ka omdefieres på dee måte kalles virtuelle metoder. I Java er alle metoder virtuelle, så sat de ikke er deklarert med fial. Kalles også polymorfi 25 class Hud { //... System.out.pritl("Voff-voff"); class Rasehud exteds Hud { //... System.out.pritl("Vov-vov"); Ata: Hud h = ew Hud(); Rasehud r = ew Rasehud(); Hud g = ew Rasehud(); For objekter av type Hud er det dee metode som gjelder. For objekter av type Rasehud er det dee metode som gjelder. Hva skrives ut ved hvert av kallee: h.bjeff(); r.bjeff(); g.bjeff(); 26 Omdefierig: eksempel Omdefierig: skrivdata Hud h Rasehud r Hud g I uiversitets-eksempelet så vi at klassee Studet og Asatt hadde este like skrivdata-metoder: Ata: System.out.pritl("Voff-voff"); Hud h = ew Hud(); Rasehud r = ew Rasehud(); Hud g = ew Rasehud(); System.out.pritl("Voff-voff"); System.out.pritl("Vov-vov"); Hva skrives ut ved hvert av kallee: h.bjeff(); r.bjeff(); g.bjeff(); voff-voff vov-vov vov-vov // I klasse Studet: System.out.pritl("Nav: " + av); System.out.pritl("Telefo: " + tlfr); System.out.pritl("Studieprogram: " + program); // I klasse Asatt: System.out.pritl("Nav: " + av); System.out.pritl("Telefo: " + tlfr); System.out.pritl("Løstri: " + løstri); System.out.pritl("Timer: " + atalltimer); 27 28

Nøkkelordet super Nøkkelordet super brukes for å aksessere variable/ metoder i objektets superklasse. Dette ka vi bruke til å la superklasse Perso ha e geerell skrivdata, som så kalles i subklassee: // I klasse Perso: System.out.pritl("Nav: " + av); System.out.pritl("Telefo: " + tlfr); class StudetRegister { public static void mai(strig [] args) { Studet stud = ew Studet(); Perso pers = ew Perso(); Perso pers stud.skrivdata(); // Her brukes defiisjoe i Studet pers.skrivdata(); // Her brukes defiisjoe i Perso Perso pers2 = stud; pers2.skrivdata(); // Hvilke defiisjo beyttes her? Studet stud Peso pers2 // I klasse Studet: super.skrivdata(); System.out.pritl("Studieprogram: " + program); // Tilsvarede i klasse Asatt... 29 System.out.pritl("Nav: " + av); System.out.pritl("Telefo: " + tlfr); Regel: Det er objekttype, ikke referasetype, som avgjør hvilke defiisjo som gjelder år e metode er omdefiert. System.out.pritl("Nav: " + av); System.out.pritl("Telefo: " + tlfr); super.skrivdata(); System.out.pritl("Studprgm: " + prgm); 30 Eksempel: Musikk.java Musikk.java versjo 2 Hva skrives ut år programmet Musikk.java kjøres? class Musikk { public static void mai (Strig[] args) { Istrumet ist = ew Piao(); ist.skrivdefiisjo(); class Istrumet { void skrivdefiisjo () { System.out.pritl("Et istrumet er oe ma ka spille på"); class Musikk { public static void mai (Strig[] args) { Istrumet ist = ew Piao(); ist.skrivdefiisjo(); Hva skjer i dette tilfellet? class Istrumet { void skrivdefiisjo(strig overskrift) { System.out.pritl(overskrift); System.out.pritl("Et istrumet er oe ma ka spille på"); class Piao exteds Istrumet { void skrivdefiisjo () { System.out.pritl("Et piao er et stregeistrumet"); class Piao exteds Istrumet { void skrivdefiisjo () { System.out.pritl("Et piao er et stregeistrumet"); 31 32

Musikk.java: Lærdom Metode som kaller virtuell metode Når vi ser på et objekt via e superklasse-peker, mister vi tilgag til metoder og variable som er defiert i subklasse. Dersom e metode eller variabel i subklasse også er defiert (med samme sigatur) i superklasse har vi likevel tilgag, fordi defiisjoe i superklasse "overkjøres". Det som er relevat er derfor hvilke metoder (og variable) som fies i superklasse, me ikke ødvedigvis iholdet i metode. class Vare { it pris; it prisutemoms() { retur pris; it prismedmoms() { retur (it) (1.25*prisUteMoms()); class SalgsVare exteds Vare { it rabatt; // I proset... it prisutemoms() { retur pris (pris*rabatt/100); Ata: Vare v = ew Vare(); v.pris = 100; SalgsVare s = ew SalgsVare(); s.pris = 100; s.rabatt = 25; Hva blir å: v.prismedmoms() s.prismedmoms() 33 34 pris 100 Omdefierig av variable Ata: Vare v = ew Vare(); v.pris = 100; SalgsVare s = ew SalgsVare(); s.pris = 100; s.rabatt = 20; SalgsVare s Hva blir å: v.prismedmoms() s.prismedmoms() Vare v it prisutemoms ( ) { retur pris; it prismedmoms { retur (it) (1.25*prisUteMoms ( ) ); pris it prisutemoms ( ) { retur pris; it prismedmoms { retur (it) (1.25*prisUteMoms ( ) ); rabatt 100 20 E subklasse ka også omdefiere (skyggelegge) variable som er defiert i superklasse. MEN: Dette bør IKKE brukes!!! Sjelde ødvedig Reduserer lesbarhete Ka føre til uvetet oppførsel Og mer treger dere ikke å vite om det it prisutemoms ( ) { retur pris (pris*rabatt/100); 35 36