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



Like dokumenter
Repitisjonskurs. Arv, Subklasser og Grensesnitt

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

Læringsmål for forelesningen

Kapittel 7: Mer om arv

INF1010 Arv. Marit Nybakken 2. februar 2004

INF1010 våren Arv og subklasser - del 2

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

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

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

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

Løsningsforslag til eksamen i INF1000 våren 2006

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

INF1010 våren Arv og subklasser - del 2

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

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

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

Introduksjon til objektorientert programmering

< 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

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

INF våren 2017

UNIVERSITETET I OSLO

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

TDT4100 Objektorientert programmering

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

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

Kapittel 8: Programutvikling

INF Seminaroppgaver til uke 3

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

Eksamen. Objektorientert Programmering IGR 1372

INF april 2017

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

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

EKSAMEN I INF244: OBJEKTORIENTERT PROGRAMVAREUTVIKLING I BACHELORSTUDIET I IT OG INFORMASJONSSYSTEMER BACHELORSTUDIET I IT OG ENTREPRENØRSKAP

Kapittel 5: Objektkommunikasjon

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

2 Om statiske variable/konstanter og statiske metoder.

TDT4100 Objektorientert programmering

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

INF1010 våren Arv og subklasser - del 2

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

Dagens tema Kapittel 8: Objekter og klasser

Enkle generiske klasser i Java

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Generiske mekanismer i statisk typede programmeringsspråk

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

INF1010 våren Arv og subklasser del 1

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

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

INF1010 våren Arv og subklasser del 1

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

Kapittel 9: Sortering og søking Kort versjon

UNIVERSITETET I OSLO

Obligatorisk oppgave 4: Lege/Resept

2 Om statiske variable/konstanter og statiske metoder.

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

UNIVERSITETET I OSLO

IN våren 2019 Onsdag 16. januar

IN våren 2018 Tirsdag 16. januar

INF1000 Mer om objekter

UNIVERSITETET I OSLO

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

Mål med kurset. Java i INF Dagens tema. GUI med Swing. Dokumentasjon

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

Forelesning inf Java 4

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

INF1010 UML. Marit Nybakken 26. januar 2004

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

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

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

UNIVERSITETET I OSLO

INF1000 : Forelesning 4

Løsningsforslag Test 2

IN1010 V19, Obligatorisk oppgave 2

Diverse eksamensgaver

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

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

Forelesning inf Java 5

Forelesning inf Java 5

UNIVERSITETET I OSLO

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

Velkommen til. INF våren 2016

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

INF1000: Forelesning 4. Mer om arrayer Metoder

Kapittel 6: Arv. Redigert av: Khalid Azim Mughal

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

Løsningsforslag eksamen in105, høsten 2000

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

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

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

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

LC191D/LO191D Videregående programmering mai 2010

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

public class NaivRiking { private HeldigSnylter minsnylter; public NaivRiking(HeldigSnylter h) { minsnylter = h;

Eksamen IN1010/INF1010 våren 2018

Eksamen Objektorientert Programmering 2011

Transkript:

// class Bygning Oppgave 1 System.out.println( Bolighus ); // class Bolighus Hva blir utskriften fra dette programmet? class Blokk extends Bolighus{ // class Blokk IN105subclassesII-1 Eksekveringsrekkefølgen (del 1) // class Bygning Til Object sin konstruktør System.out.println( Bolighus ); // class Bolighus class Blokk extends Bolighus{ // class Blokk Her starter eksekveringen IN105subclassesII-3 // class Bygning System.out.println( Bolighus ); // class Bolighus class Blokk extends Bolighus{ // class Blokk Kommentar til oppgave 1 Java føyer selv på disse før programmet eksekveres Dermed får vi utskriften: Bygning Bolighus Blokk IN105subclassesII-2 Eksekveringsrekkefølgen (del 2) Nå er Bygning skrevet ut Nå er Bolighus skrevet ut Nå er Blokk skrevet ut // class Bygning System.out.println( Bolighus ); // class Bolighus class Blokk extends Bolighus{ // class Blokk Tilbake fra Object sin konstruktør Programmet avsluttes IN105subclassesII-4

// class Bygning Oppgave 2 Bolighus (int i) { System.out.println( Bolighus nr + i); // class Bolighus Hva skjer nå? class Blokk extends Bolighus { // class Blokk // class Bygning Oppgave 3 /* Ingen konstruktører */ // class Bolighus Hva skjer her da? class Blokk extends Bolighus { // class Blokk IN105subclassesII-5 IN105subclassesII-7 // class Bygning Kommentar til oppgave 2 Bolighus (int i) { System.out.println( Bolighus nr + i); // class Bolighus Kallet matcher ikke metoden i antall parametre! class Blokk extends Bolighus { // class Blokk Dermed får vi kompileringsfeil. IN105subclassesII-6 Kommentar til oppgave 3 // class Bygning /* Ingen konstruktører */ // class Bolighus class Blokk extends Bolighus { // class Blokk Siden Bolighus ikke har noen konstruktør, legger Java selv inn en tom konstruktør som bare inneholder kallet super(). Dermed får vi skrevet ut Bygning Blokk IN105subclassesII-8

Kort oppsummering Gjenbruk av klasser kan skje ved komposisjon: brukes ved har-en relasjoner arv: brukes ved er-en relasjoner Alle klasser i Java inngår i et hierarki av superklasser og subklasser, med klassen Object på toppen av hierarkiet. Vi skiller mellom typen til et objekt: denne er alltid lik klassen som objektet er en instans av. Kan ikke konverteres (castes). en objektreferanse: denne er lik klassen som objektet er en instans av eller en superklasse av denne. Kan konverteres (castes). IN105subclassesII-9 public, protected og private Ved hjelp av modifikatorer kan vi bestemme hvor synlig en metode skal være utenfor klassen hvor den er definert: private : arves ikke og er ikke tilgjengelig fra andre klasser ingen : arves av alle subklasser i samme pakke og er tilgjengelig fra alle klasser i samme pakke protected : arves av alle subklasser og er tilgjengelig fra alle klasser i samme pakke public : arves av alle subklasser og er tilgjengelig overalt Merk: klassene på et filområde som ikke tilhører noen navngitt pakke, utgjør tilsammen default pakken for det filområdet. IN105subclassesII-11 Kort oppsummering forts. Metoder og variable kan omdefineres i en subklasse. Når vi konverterer en objektreferanse oppover til en superklasse, blir metoder og variable som bare er definert i subklassen usynlige (utilgjengelige). Hvis en metode er definert både i klassen og i en superklasse til et objekt, vil førstnevnte definisjon være den gjeldende, selv når objektet er konvertert til superklassen. Det er ikke alltid mulig å avgjøre ved kompilering hvilken versjon av en metode som faktisk vil bli eksekvert. Dvs vi har dynamisk binding. IN105subclassesII-10 Hvor kan variabelen/metoden ses? Innenfor klassen Innenfor pakken Overalt private ingen protected public = ved komposisjon = ved arv IN105subclassesII-12

Tilgang til variable Ikke la variable være public (pga innkapslingsprinsippet), med mindre de også er final (da kan de uansett ikke endres). private gir større grad av innkapsling (synlig i klassen) enn ingen modifikator eller protected (synlig i pakken). I praksis gir ofte det siste tilstrekkelig beskyttelse, ettersom vi selv gjerne har kontroll over hele pakken. Det sentrale spørsmål blir derfor: ønsker vi at variabelen skal arves (bruk protected) eller ikke (bruk private)? ingen modifikator = protected = public så lenge vi jobber innenfor en pakke (f.eks. den ikke-navngitte default-pakken). IN105subclassesII-13 Når vi jobber innenfor en pakke I In105 legger vi som oftest ikke klasser inn i en navngitt pakke. Dermed jobber vi innenfor en pakke: den ikke-navngitte defaultpakken for det filområdet vi er på. Da er det ingen forskjell mellom public, protected og ingen modifikator (med unntak av main, som må være public) Dvs public og private dekker alle muligheter. IN105subclassesII-15 Tilgang til metoder Er metoden potensielt av interesse for enhver som bruker denne klassen via komposisjon? public Hvis ikke, ønsker vi at metoden skal arves (protected) eller ikke (private)? ingen modifikator = protected = public så lenge vi jobber innenfor en pakke (f.eks. den ikke-navngitte default-pakken). IN105subclassesII-14 Tommelfingerregler Deklarer variable som private Deklarer konstanter som public (hvis nyttige utenfor klassen) Deklarer metoder som public Forøvrig: hvis en metode skal omdefinere en metode i en superklasse, må de ha samme signatur. Husk public når du omdefinerer metoder i API-klasser! programmet vil virke like bra om du erstatter private med ingen modifikator eller med public du kan trygt se bort fra protected i IN105-sammenheng IN105subclassesII-16

Interface Et interface er som en strippet versjon av en klasse: interface InterfaceNavn { metode-spesifikasjoner (navn, argumentlister og returtyper, men ingen implementasjon) Det går ikke an å lage instanser av et interface, bare å implementere det ved å lage klasser av formen class KlasseNavn implements InterfaceNavn { /* Her må alle metodene i interfacet defineres, og kanskje andre metoder og variable også er definert */ Hvis en klasse implementerer et interface, så vil alle dens subklasser også implementere interfacet. Hvis typen til en formalparameter er et interface, kan aktualparameteren være en hvilken som helst klasse som implementerer interfacet. IN105subclassesII-17 Hva er poenget med interface? En måte å se objekt-orienterte programmer på er som kommunikasjon mellom objekter. Objektene snakker sammen via metodekall: set get Et interface angir hvordan du kan snakke til (kommunisere med) et objekt, og intet mer. Typen til objektet spesifiseres ikke. Å implementere et interface er en garanti for at man har visse metoder, dvs at man forstår en bestemt type kommunikasjon. IN105subclassesII-19 Bruk av interface Istedet for å angi nøyaktig hvordan en klasse skal implementeres, er det av og til hensiktsmessig i første omgang å kun angi et interface, f.eks. interface Oversetter { String EngelskTilNorsk (String tekst); String NorskTilEngelsk (String tekst); Enhver klasse som implementerer dette interfacet må definere metodene EngelskTilNorsk og NorskTilEngelsk. Dvs å skrive class MinKlasse implements Oversetter {... er en garanti for at MinKlasse faktisk har to metoder med navn EngelskTilNorsk og NorskTilEngelsk. IN105subclassesII-18 Eksempel public interface Enumerator { public abstract boolean hasmoreelements(); public abstract Object nextelement(); // interface Iterator public class StringTokenizer implements Enumeration { public boolean hasmoreelements() {... public Object nextelement() {... Enumeration /* samt diverse andre metoder */ // class StringTokenizer StringTokenizer IN105subclassesII-20

Abstrakte klasser Nært beslektet med interface er abstrakte klasser. En abstrakt klasse er en klasse med implementasjonshuller som det overlates til subklasser å fylle igjen. En abstrakt klasse deklareres ved å skrive abstract class KlasseNavn { /* variable og metoder, akkurat som for en vanlig klasse. Men noen (eller alle) metoder kan være angitt som i et interface, dvs kun med navn, argumentlister og returtype. Modifikatoren abstract må brukes på disse metodene. */ En abstrakt klasse kan ikke instansieres, bare subklasser av den (som ikke selv er abstrakte). Metoder som er static kan ikke være uimplementerte (abstrakte). IN105subclassesII-21 Hva er poenget med abstrakte klasser? Hvis flere (konkrete) klasser har endel felles egenskaper, er det ofte naturlig å trekke ut disse egenskapene i en egen superklasse, som de andre klassene arver fra. Superklassen representerer da et begrep av mer generell natur enn de tingene man faktisk ønsker å representere som objekter. Dermed er en ofte ikke interessert i å lage instanser av en slik superklasse, bare subklassene. I tillegg er det ofte ikke meningsfylt å gi implementasjoner av metodene i superklassen. Det er da naturlig å deklarere superklassen som abstract. IN105subclassesII-23 Abstrakte metoder Metodene i en abstrakt klasse som er spesifisert, men ikke implementert, kalles abstrakte metoder, og de må deklareres med modifikatoren abstract. Eksempel: abstract class Instrument { abstract void skrivdefinisjon(); // class Instrument class Piano extends Instrument { void SkrivDefinisjon() { System.out.println( Et piano er et strengeinstrument der strengene ); System.out.println( slås an med hamrer ved hjelp av tangenter ); // class Piano IN105subclassesII-22 Sammenlikning Konkret klasse Abstrakt klasse Interface Spesifiserer fullt sett Spesifiserer fullt sett Spesifiserer noen av metoder av metoder metoder for et objekt Implementerer alle Implementerer ingen, Implementerer ingen sine metoder noen, eller alle metoder av sine metoder Kan ha instanser Kan ikke ha instanser Kan ikke ha instanser Kan ha subklasser Må ha subklasser for Kan ikke ha subklasser, å kunne brukes må implementeres IN105subclassesII-24

Flere sett av egenskaper Noen ganger ønsker vi at en klasse skal ha flere sett av egenskaper som er spesifisert annetsteds. Eksempel: en bok i et bibliotek har egenskap av å være E et dokument E et låneobjekt Men Bok kan ikke ha to superklasser Dokument og Låneobjekt (en klasse kan ikke samtidig arve fra mer enn superklasse). Mulig løsning: interface LaaneObjekt {... class Dokument {... class Bok extends Dokument implements LaaneObjekt {... IN105subclassesII-25 Tvilsomt begrepshierarki Dokument Verk Bok CD Video Tidsskriftnr LaanbarBok ULaanbarBok LaanbarCD ULaanbarCD LaanbarTidssk UlaanbarTidssk Flerbindsverk AntikvariskBok Oppslagsverk Antikvarisk tidsskrifnr IN105subclassesII-27 Eksempel: biblioteket igjen Et bibliotek kan inneholde bøker, tidsskrifter, CDer, videoer, mikrofilmet materiale, antikvariske bøker, flerbindsverk, oppslagsverk, upubliserte skrifter, Noen egenskaper finnes hos alle: identifikasjonskode, hylleplass, antall eksemplarer Andre egenskaper finnes bare hos noen: Bøker har forfatter, tittel, forlag Tidsskrifter har årgang, nummer, utgiver CDer har tittel, artist, komponist, musikkforlag Videoer har tittel, regissør, filmselskap IN105subclassesII-26 Omrokkering uten suksess Dokument UtlaanbartDokument UlaanbartDokument Bok CD Video Bok CD Video osv... IN105subclassesII-28

Interface UtlånsObjekt interface UtlaansObjekt abstract void låne(string låner); abstract void levere(); abstract boolean utlånt(); final String ingen = ingen ; Dokument Bok CD Video LaanbarBok ULaanbarBok LaanbarCD ULaanbarCD IN105subclassesII-29 Forenklet bibliotek For å spare plass og tid, ser vi i fortsettelsen på følgende forenklede bibliotek: Utlaansobjekt Dokument Bok CD LaanbarBok ULaanbarBok LaanbarCD ULaanbarCD IN105subclassesII-31 interface = rolle Utlaansobjekt Dokument Antikvarisk Verk Bok CD Video Tidsskriftnr LaanbarBok ULaanbarBok LaanbarCD ULaanbarCD LaanbarTidssk UlaanbarTidssk Flerbindsverk AntikvariskBok Oppslagsverk Antikvarisk tidsskrifnr IN105subclassesII-30 Abstrakte klasser og interface abstract class Dokument { String tittel;... // class Dokument interface UtlaansObjekt { abstract void låne (String låner); abstract void levere (); abstract boolean utlånt (); final String ingen = ingen ; // interface UtlaansObjekt IN105subclassesII-32

Klasser for bok abstract class Bok extends Dokument { String forlag; int trykningsår;... // class Bok class LaanbarBok extends Bok implements LaaneObjekt { String låner = ingen; public void låne (String l) { låner = l; public void levere () { låner = ingen; public boolean utlånt () {return låner!= ingen; /* Andre metoder som gjelder alle bøker */ // class LaanbarBok class ULaanbarBok extends Bok { /* Metoder som gjelder alle bøker */ // class ULaanbarBok IN105subclassesII-33 Klasser for CD abstract class CD extends Dokument { String komponist, artist, musikkforlag;... // class CD class LaanbarCD extends CD implements UtlaansObjekt { String låner = ingen; public void låne (String l) { låner = l; public void levere () { låner = ingen; public boolean utlånt () {return låner!= ingen; /* Andre metoder som gjelder alle CD er */ // class LaanbarCD class ULaanbarCD extends CD { /* Metoder som gjelder alle CD er */ // class ULaanbarCD IN105subclassesII-34