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

Like dokumenter
INF1010. Grensesnittet Comparable<T>

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

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

INF1010. Stein Michael Storleer (michael) Lenkelister

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

INF1010 Binære søketrær ++

UNIVERSITETET I OSLO

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

Obligatorisk oppgave 4: Lege/Resept

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

INF Seminaroppgaver til uke 3

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

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

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

INF1010 siste begreper før oblig 2

Sortering med Comparable og Comparator

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

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

UNIVERSITETET I OSLO

Seminaroppgaver IN1010, uke 2

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

Kapittel 9: Sortering og søking Kort versjon

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

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

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

Kapittel 7: Mer om arv

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

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Norges Informasjonsteknologiske Høgskole

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

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

INF Innleveringsoppgave 6

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

Del 3: Evaluere uttrykk

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

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

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

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

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

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.

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

INF1010 våren Grensesnitt

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

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

UNIVERSITETET I OSLO

Generiske mekanismer i statisk typede programmeringsspråk

Løsningsforslag Test 2

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

INF våren 2017

INF1010 våren Grensesnitt (interface)

INF1010 Arv. Marit Nybakken 2. februar 2004

Kapittel 9: Sortering og søking Kort versjon

Kapittel 8: Sortering og søking INF100

2 Om statiske variable/konstanter og statiske metoder.

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

Kapittel 8: Sortering og søking INF100

INF1010 våren Grensesnitt

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

IN våren 2019 Onsdag 16. januar

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

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

IN våren 2018 Tirsdag 16. januar

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

INF1010 våren Arv og subklasser - del 2

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

IN1010 våren januar. Objektorientering i Java

INF1010 våren Arv og subklasser del 1

INF1010 våren januar. Objektorientering i Java

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

LO191D/LC191D Videregående programmering

TDT4100 Objektorientert programmering

Kapittel 8: Programutvikling

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

OPPGAVE 5b og 8b Java Kode

Velkommen til INF1010

INF1010 våren Arv og subklasser del 1

INF1010 våren Interface (Grensesnitt)

Lenkelister. Lister og køer.

Kapittel 9: Sortering og søking Kort versjon

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

Kapittel 9: Sortering og søking Kort versjon

Diverse eksamensgaver

Gjennomgang av eksamen H99

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Fra problem til program

Tråder Repetisjon. 9. og 13. mai Tråder

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

Læringsmål for forelesningen

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

INF1000: Forelesning 7

Transkript:

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

Strukturen i oblig 3 null null null null Personbeholder pl null null Person p "Adnan" michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 2

Personbeholder uten generisk parameter Person Person Personbeholder første p p pb class PersonBeholder { private første ; class { Person p ; ; ( Person ) { p = ; michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 3

Indre klasser class PersonBeholder { private første ; class { Person p ; ; ( Person ) { p = ; Klasser i Java kan defineres inni hverandre Objekter i den indre klassen kan referere til metoder og variable i sitt omsluttende ekt + Lettvint + Skjuler implementasjon Flere feilmuligheter PersonBeholder. ytreknute = allepersoner. første. ; ytreknute. p. skrivutmegogvenner ( " " ) ; michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 4

Indre klasser class PersonBeholder { første ; class { Person p ; ; ( Person ) { p = ; Klasser i Java kan defineres inni hverandre Objekter i den indre klassen kan referere til metoder og variable i sitt omsluttende ekt + Lettvint + Skjuler implementasjon Flere feilmuligheter PersonBeholder. ytreknute = allepersoner. første. ; ytreknute. p. skrivutmegogvenner ( " " ) ; Du må opprette et ekt av den ytre klassen før du får lov til å lage ekter av den indre klassen michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 5

Indre klasser og innkapsling class PersonBeholder { private første ; private class { Person p ; ; ( Person ) { p = ; Innkapsling n alltid ønskelig + Reduserer feilmuligheter + Lettere å forstå programmer OBS! private gir heller ikke tilgang i subklasser protected gir michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 6

Indre klasser og innkapsling class PersonBeholder { protected første ; protected class { Person p ; ; ( Person ) { p = ; Innkapsling n alltid ønskelig + Reduserer feilmuligheter + Lettere å forstå programmene OBS! private gir heller ikke tilgang i subklasser protected gir subklasseadgang michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 7

Personbeholder uten generisk parameter Person Person Personbeholder første p p pb class PersonBeholder { private første ; private class { Person p ; ; ( Person ) { p = ; michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 8

Beholder med generisk parameter T T Beholder<Person> første inf1010stud class Beholder<T> { private første ; private class { T ; ; (T ) { = ; Beholder<Person> inf1010stud = new Beholder<Person > ( ) ; Kan vi få tak i personegenskapene i beholderen? Hva vet vi om T inne i beholderektet? michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 9

Hva vet vi om T? Object Object Beholder<Person> første inf1010stud class Beholder<T extends Object> { private første ; private class { T ; ; String navn = (T ) { = ; Beholder<Person> inf1010stud = new Beholder<Person > ( ) ; Hva er typen til variabelen T? Svar: Vi kjenner Object-egenskapene! I figuren den ikke-skyggelagte delen av personektene. michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 10

Noen av metodene i Object protected Object clone ( ) // Creates and returns a copy of this ect. boolean equals ( Object ) // Indicates whether some other ect is «equal to» this one. Class<?> getclass ( ) // Returns the runtime class of this Object. int hashcode ( ) // Returns a hash code value for the ect. String tostring ( ) // Returns a string representation of the ect. kopiert fra http://docs.oracle.com/javase/7/docs/api/java/lang/object.html michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 11

Beholder for ekter med personegenskaper Person Person Beholder<Student> første inf1010stud class Beholder<T extends Person> { private første ; class Student extends Person {... private class { T ; ; (T ) { = ; Beholder<Student> inf1010stud = new Beholder<Student > ( ) ; Hvorfor ikke bare si <Person T>? Fordi vi også kan bruke subklasser av Person som aktuell parameter. michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 12

Beholder for ekter med personegenskaper Person Person Beholder<Student> første inf1010stud class Beholder<T extends Person> { private første ; private class { T ; ; class Student extends Person {... Beholder<Student> inf1010stud = new Beholder<Student > ( ) ; (T ) { = ; Men nå er vi n tilbake til personbeholderen igjen. Hva om vi bare trenger noen få personegenskaper, f.eks. hentnavn()? michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 13

Beholder for ekter som har metodene i grensesnittet HarNavn HarNavn HarNavn Beholder<Student> første inf1010stud Objects metoder pluss hentnavn() tilgjengelig i disse ektene class Beholder<T implements HarNavn> { private første ; private class { T ; ; (T ) { = ; interface HarNavn{ String hentnavn ( ) ; class Person implements HarNavn {.... class Student extends Person {... Beholder<Student> inf1010stud = new Beholder<Student > ( ) ; her har ektet peker på Object-metoder pluss metoden definert i HarNavn. Legg merke til typen til i figuren! michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 14

Beholder for ekter som har metodene i grensesnittet HarNavn HarNavn HarNavn Beholder<Student> første inf1010stud Objects metoder pluss hentnavn() tilgjengelig i disse ektene class Beholder<T extends HarNavn> { private første ; private class { T ; ; (T ) { = ; interface HarNavn{ String hentnavn ( ) ; class Person implements HarNavn {.... class Student extends Person {... Beholder<Student> inf1010stud = new Beholder<Student > ( ) ; her har ektet peker på Object-metoder pluss metoden definert i HarNavn. Legg merke til typen til i figuren! michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 15

Beholder for sammenlignbare ekter Sammenlignbar Sammenlignbar Beholder<Student> første inf1010stud class Beholder<T extends Sammenlignbar> { private første ; private class { T ; ; (T ) { = ; interface Sammenlignbar { class Person implements Sammenlignbar {.... class Student extends Person {... Beholder<Student> inf1010stud = new Beholder<Student > ( ) ; Grensesnittet skal inneholde en metode som gjør at vi kan sammenligne ekter av klasser som implementerer Sammenlignbar michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 16

Beholder for sammenlignbare ekter Comparable<T> Comparable<T> Beholder<Student> første inf1010stud class Beholder<T extends Sammenlignbar> { private første ; private class { T ; ; (T ) { = ; interface Sammenlignbar { class Person implements Sammenlignbar {.... class Student extends Person {... Beholder<Student> inf1010stud = new Beholder<Student > ( ) ; Dette grensesnittet er allerede laget i Java. Det heter Comparable<T>. michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 17

Grensesnittet Comparable<T> interface Comparable <T> { int compareto (T ) ; class Person implements Comparable<Person> { // andre personegenskaper... public int compareto ( Person b) {.... «compareto returns a negative, zero or a positive integer as this ect is less than, equal to, or greater than the specified ect» a.compareto(b) > 0 hvis a > b = 0 hvis a = b < 0 hvis b > a michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 18

Beholder for sammenlignbare ekter Comparable<Person> Comparable<Person> Beholder<Person> første inf1010stud int compareto(person p) int compareto(person p) class Beholder<T extends Comparable<T>> { private første ; private class { T ; ; (T ) { = ; class Person implements Comparable<Person> { public int compareto( Person p) {... class Student extends Person {... Beholder<Student> inf1010stud = new Beholder<Student > ( ) ; Sett fra Beholderen (ved kompilering) har personektene compareto-metoden pluss metodene michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) fra Object 19

Beholder for sammenlignbare ekter Comparable<Person> Comparable<Person> Beholder<Person> første inf1010stud int compareto(person p) int compareto(person p) class Beholder<T extends Comparable<T>> { private første ; private class { T ; ; (T ) { = ; class Person implements Comparable<Person> { public int compareto( Person p) {... class Student extends Person {... Beholder<Student> inf1010stud = new Beholder<Student > ( ) ; Sett fra Beholderen (ved kompilering) har personektene compareto-metoden pluss metodene michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) fra Object 20

Metoden compareto(t ) int compareto(person p ) return this.pnr p.pnr; String navn int 34659 pnr int compareto(string s) «Inga» int compareto(person p ) return this.pnr p.pnr; Person enperson String navn int 72788 pnr int compareto(string s) «Ask» Person enperson = new Person ( "Ask", 72788); int cmpto = enperson.compareto(new Person ( " Inga ", 34659)); Hva blir verdien til cmpto? michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 21

Metoden compareto(t ) int compareto(person p ) return navn.compareto(p.navn); String navn int 34659 pnr int compareto(string s) «Inga» Person enperson int compareto(person p ) return navn.compareto(p.navn); int String 72788 navn pnr int compareto(string s) «Ask» Person enperson = new Person ( "Ask", 72788); int cmpto = enperson.compareto(new Person ( " Inga ", 34659)); Hva blir verdien til cmpto? michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 22

Klassestrukturen i oblig 4 class Oblig4 { public static void main( String [ ] a ) { new Testklasse ( ) ; class Testklasse { // test- og hovedprogram interface INF1010samling<K, V> { // metoder beholderen skal ha class SELLbeholder<N extends Comparable<N>, O > implements INF1010samling<N, O > { // Sortert enkeltlenket lenkelistebeholder class Person { // Eksempel på klasse hvis ekter kan legges i beholderen class Ord implements Comparable<Ord> { // Eksempel på klasse hvis ekter kan brukes som nøkkel Husk: String implementerer Comparable<String>. michael@ifi.uio.no INF1010 21. februar 2013 (uke 8) 23