Læringsmål for forelesningen

Like dokumenter
Dagens forelesning. Husk prøveeksamen Fredag 15/3-13 kl 12 i R1. Iterator-teknikken. Eksempel med bruk av Iterator og Iterable-grensesnittene

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

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

EKSAMEN I FAG TDT4100 Objektorientert programmering. Fredag 2. juni 2006 Kl

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Læringsmål for forelesningen

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

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

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

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

INF1010. Stein Michael Storleer (michael) Lenkelister

Liste som abstrakt konsept/datatype

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

UNIVERSITETET I OSLO

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

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

TOD063 Datastrukturer og algoritmer

Generiske mekanismer i statisk typede programmeringsspråk

IN1010 våren januar. Objektorientering i Java

Algoritmer og datastrukturer E Løkker i Java

INF1000 HashMap. Marit Nybakken 2. november 2003

Kapittel 9: Dynamiske datastrukturer - del I. Java som første programmeringsspråk

Kapittel 9: Dynamiske datastrukturer - del I. Java som første programmeringsspråk

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

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

Kapittel 7: Mer om arv

Inf1010 oppgavesamling

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

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

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

UNIVERSITETET I OSLO

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

AlgDat 10. Forelesning 2. Gunnar Misund

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

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

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.2

Sortering med Comparable og Comparator

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

PG4200 Algoritmer og datastrukturer Lab 1. 8.januar I dag skal vi undersøke en rekke velkjente databeholdere i Java:

ADT og OO programmering

INF Seminaroppgaver til uke 3

Læringsmål for forelesningen

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

Læringsmål for forelesningen

EKSAMEN I FAG TDT4100 Objektorientert programmering. Fredag 6. juni 2008 Kl

INF Innleveringsoppgave 6

Inf1000 (Uke 10) HashMap og ArrayList

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

BOKMÅL Side 1 av 12. Fakultet for informasjonsteknologi,

Inf1010 oppgavesamling

UNIVERSITETET I OSLO

Læringsmål for forelesningen

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

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

PG4200 Algoritmer og datastrukturer Forelesning 7

Pensum: fra boken (H-03)+ forelesninger

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

Kapittel 12: Rekursjon

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå

EKSAMEN. Objektorientert programmering

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

Pensum: fra boken (H-03)+ forelesninger

UNIVERSITETET I OSLO

INF2220: Forelesning 3

INF1000 Metoder. Marit Nybakken 16. februar 2004

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

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

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Generiske mekanismer i statisk typede programmeringsspråk INF5110 April, 2009

Stack. En enkel, lineær datastruktur

INF Algoritmer og datastrukturer

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

HashMap. INF1000 Forelesning 9. Ulike versjoner i Java 1.4 (gammel) og Java 1.5/1.6 av HashMap. Objekter lagres med en søkenøkkel

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

Kapittel 9: Sortering og søking Kort versjon

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

"Nelsons kaffebutikk"

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

2 Om statiske variable/konstanter og statiske metoder.

MED TIDESTIMATER Løsningsforslag

PG4200 Algoritmer og datastrukturer Forelesning 4 Beholdere

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

UNIVERSITETET I OSLO

Transkript:

Læringsmål for forelesningen Objektorientering Bruk av grensesnitt og implementasjoner i Collection-klasser Java-prog, kap. 14-16 i Big Java Og side 990-997 i Appendix D Collection-rammeverket og iterasjon med Iterator og Iterable Bruk av <type>-deklarasjoner ifm. collections (såkalte generics ). Eclipse Kodemaler for for-konstruksjonen 1

Grupper av objekter En har ofte behov for å håndtere grupper av objekter operere på dem som et hele, f.eks. overføre dem som parameter eller gjøre enkeltoperasjoner på alle ved hjelp av en løkke implementere relasjon/kobling fra ett objekt til mange andre finne et objekt som tilfredsstiller visse kriterier Java-tabeller (array) kan brukes til dette, men de er lite fleksible og tilbyr ingen hjelpemetoder Tabeller har fast lengde angitt av length-attributtet og kun muligheten til å lese og sette elementer basert på en indeks (int). 2

Collection-rammeverket, kap. 15 (http://java.sun.com/j2se/1.5/docs/guide/collections/overview.html) Forbedringer i Java7: Se side 650-651 (og 990-997) i Big Java Collection-rammeverket i java.util-pakken implementerer mange måter å lagre og bearbeide grupper av objekter java.util.arraylist lar oss f.eks. legge til, hente ut og ta ut objekter Mange grensesnitt med tilhørende implementasjoner metoder gjør jobben lettere, så det er lurt å bli kjent med Collection-API et (API = Application Programmers Interface) 3

Oppbyggingen til Collection-rammeverket (1) Collection rammeverket består av ett overordnet grensesnitt (Collection) og mange spesifikke grensesnitt, som tilbyr samlinger med ulik logikk Collection-grensesnittet spesifiserer generelle metoder som de andre grensesnittene arver fra/utvider List-grensesnittet tilbyr posisjonsbaserte metoder Set-grensesnittet tilbyr ingen egne metoder, men begrenser samlingen til ikke å inneholde duplikater. SortedSet-grensesnittet støtter sortering basert på en spesifikk måte å sammenligne elementer på (Comparator) 4

Oppbyggingen til Collection-rammeverket (2) Hvert spesifikke grensesnitt har flere implementasjoner, hvorav en er standardimplementasjonen List sin standardimplementasjon er ArrayList, Set sin er HashSet,... Utenom Collection-hierarkiet har en i tillegg noen nyttige grensesnitt/klasser Map: oppslag fra et objekt (nøkkel) til et annet objekt (verdi) Stack: stabel med verdier, med operasjoner for å legge på og ta av toppen Queue: kø med verdier, med operasjoner for å fylle på i én ende og ta ut i andre 5

6 http://www.falkhausen.de/en/diagram/html/java.util.collection.html

Før en velger hvilken type Collection en trenger, må en vurdere behovene... Avdekking av behovene er alltid viktig. Det gjelder å stille de riktige spørsmålene. 7

Behov vs. tilbud Duplikater Skal en potensielt kunne lagre flere av samme element? Bruk en implementasjon av List-grensesnittet. Rekkefølge Er rekkefølgen eller posisjonen viktig? Dersom elementene skal ha en spesiell rekkefølge, kan en ikke bruke en Setimplementasjon. Er innsettingsrekkefølgen eller posisjonen viktig? Bruk en List-implementasjon. Sortering Ønskes elementene automatisk sortert? Bruk en SortedSet-implementasjon. Trenger en spesielle håndteringsoperasjoner sette inn og ta ut i bestemt rekkefølge (siste/først inn, først ut) 8 Som regel er det greit å bruke List/ArrayList, men still deg likevel spørsmålene først! F.eks. viktig å vite om en må bruke list.contains(element) før list.add(element) Side 651 i Big Java

Collection-grensesnittet Collection-grensesnittet tilbyr generelle metoder, bl.a. for å legge til, fjerne og spørre om elementer add(object), addall(collection) remove(object), removeall(collection) (retainall(collection) fjern alt annet enn) contains(object), containsall(collection) Støtter ikke oppslag basert på indeks og dermed ikke iterasjon basert på for (int i = 0; i < col.size(); i++) {.. } Iterasjon gjøres vha. såkalte iteratorer (Iterator-grensesnittet), som vi kommer nærmere inn på etterhvert. Det finnes ingen klasser som kun implementerer Collection, alle konkrete klasser implementerer en av de mer spesifikke grensesnittene. Det kan likevel være riktig å deklarere variabler som Collection, for å markere at det kun brukes Collection-metoder. // koden bruker kun add, remove, size, samt iterator Collection col = new ArrayList(); 9

List-grensesnittet posisjonsorientert Collection List-grensesnittet utvider Collection-grensesnittet med indeksbaserte metoder for å legge til, fjerne og spørre om elementer add(int, Object), addall(int, Collection) remove(int) int indexof(object), int lastindexof(object) Viktigst er muligheten til å lese og sette elementer basert på indeks/posisjon Object get(int), set(int, Object) Støtter dermed også iterasjon basert på indeks, som i for (int i = 0; i < list.size(); i++) {.. } Iterasjon kan også gjøres vha. Iterator-grensesnittet. ArrayList er standardimplementasjonen av List-grensesnittet Du skal ha god grunn til å velge en annen implementasjon. 10

Bruk av List (ArrayList) add(object) legger til objekt get(int) henter objekt med gitt indeks size() størrelsen på lista 11

List-grensesnittet (posisjon og duplikater) this arg overlapp.addall( )=>.removeall( )=> samme relative posisjon og rekkefølge this etterpå.retainall( )=> 12

Set-grensesnittet (ingen posisjon, ikke duplikater) this arg overlapp.addall( )=>.removeall( )=> potensielt stokket eller sortert this etterpå.retainall( )=> 13

add-metoden skyter et objekt inn mellom de andre objektene med høyere indeks forskyves og endrer posisjon 0 i-1 i i+1 nytt element 0 i-1 i i+1 add uten indeks legger til på slutten nytt element 14

remove-metoden fjerner et element lista klemmes sammen to varianter: fjern bestemt objekt fjern objekt på bestemt posisjon skal fjernes 0 i-1 i i+1 15 0 i-1 i

Konvertering mellom List og tabell Hvordan lage en List fra en tabell Arrays.asList(T[] tab) returnerer en List<T> med tab som innhold, og som ikke kan endres. ArrayList har en konstruktør som initialiserer den med innholdet til en eksisterende Collection. Card[] cards = List<Card> cardlist = new ArrayList<Card>(Arrays.asList(cards)); Hvordan lage en tabell fra en List List.toArray(T[] t) returnerer t fylt med lista sitt innhold. List<Card> cardlist = Card[] cards = new Card[cardList.size()]; cardlist.toarray(cards); 16

Collection-klasser (inkl. Iterator) og (parameter- og resultat)typer Når en bruker en Collection i praksis, er elementene en legger inn og tar ut ofte av en spesifikk type, f.eks. String eller Person. Likevel må en i utgangspunktet bruke casting når en henter ut elementer, f.eks. Person p = (Person)liste.get(i) Ved å konsekvent deklarere Collection-, List-, Iterator- og Iterablevariabler med <type> bak, forteller vi at klassen er begrenset til å kun behandle objekter av denne spesifikke typen (eller subtyper): List<String> tekst = new ArrayList<String>(); // add tar inn en String, og det vet Java! tekst.add( En String ); // get returnerer String, og // det skjønner også Java! String s1 = tekst.get(0); 17

Collection-klasser (inkl. Iterator) og (parameter- og resultat)typer <type>-deklarasjoner bestemmer/begrenser parametertypen/returtypen til metoder som add, remove, get, next, iterator osv. <type>-deklarasjoner er lov etter List, ArrayList, Iterator, Iterable og generelt de fleste klasser i Collection-rammeverket. Bruk alltid <type> bak, så blir koden sikret mot en viktig type type-feil. 18

Eksempel på bruk av <type> // lag og bruk en String-liste // både deklarasjon og new-uttrykk begrenses List<String> stringliste = new ArrayList<String>(); // String-lista sin add-metode krever et String-argument stringliste.add( En string ); stringliste.add( Enda en string ); int pos = stringliste.indexof( En string ); // get-metoden returnerer nødvendigvis en String String enstring = stringliste.get(pos); 19

Map-grensesnittet Map<K,V> er en spesiell type samling (ikke en Collection) som brukes til tabelloppslag, dvs. når en ønsker å finne et objekt, basert på et annet Map brukes typisk når en koblingen mellom objekter er temporær K V En map implementerer en matematisk funksjon: avbildning fra et nøkkelsett til et verdisett 20 Metoder: put(k key, V verdi) knytter key til verdi V get(object key) returnerer verdien som er knyttet til key boolean containskey(object key) sier om key finnes i nøkkelsettet Set<K> keyset() settet av nøkler Collection<V> values() samlingen av verdier

21 http://www.falkhausen.de/en/diagram/html/java.util.map.html

Stack-klassen Stack<T>-klassen implementerer en stabel, dvs. en samling med egne operasjoner for å legge på og ta av fra toppen push(t t) legger t på toppen T pop() tar bort og returnerer øverste element T peek() returnerer øverste element, uten å ta det bort 22

Queue- grensesnittet Queue<T>-grensesnittet spesifiserer metoder for en kø, dvs. en samling med egne operasjoner for å legge til i ene enden og ta ut i andre offer(t t) legger t til inn-enden T poll() tar ut (fjerne) et element i ut-enden T peek() returnerer elementet i ut-enden, uten å fjerne det 23 Implementeres av LinkedList

Læringsmål for forelesningen Objektorientering Bruk av grensesnitt og implementasjoner i Collection-klasser Java-programmering Collection-rammeverket og iterasjon med Iterator og Iterable Bruk av <type>-deklarasjoner ifm. collections (såkalte generics ). Eclipse Kodemaler for for-konstruksjonen 24