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



Like dokumenter
Læringsmål for forelesningen

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

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Læringsmål for forelesningen

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)

Algoritmer og datastrukturer E Løkker i Java

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

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

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Læringsmål for forelesningen

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

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering

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

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

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

TDT4100 Objektorientert programmering

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

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

Algoritmer og datastrukturer Eksamen

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

Liste som abstrakt konsept/datatype

C# (.Net) Tema: Loops (Løkker) Leksjon 7 Kap 18

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

PG4200 Algoritmer og datastrukturer Forelesning 7

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

b) 10 2 = 20 c) 5 1 = 5.

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

Objektorientert design av kode. Refaktorering.

Oppsummering fra sist

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

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

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

UNIVERSITETET I OSLO

IN1010 våren januar. Objektorientering i Java

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

INF1000 Prøveeksamen Oppgave 7 og 9

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Gjennomgang av eksamen H99

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000 våren 2006

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

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

Løsningsforslag til eksamen i INF1000

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

OPPGAVE 5b og 8b Java Kode

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

"Nelsons kaffebutikk"

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

INF1000 HashMap. Marit Nybakken 2. november 2003

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

INF1010. Stein Michael Storleer (michael) Lenkelister

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

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

UNIVERSITETET I OSLO

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

Læringsmål for forelesningen

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

Eksamen Oppgave a) public class DayTime { public final int hours, minutes;

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

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

Programmering i C++ Løsningsforslag Eksamen høsten 2005

INF1010 våren januar. Objektorientering i Java

Løsningsforslag, inf101, våren 2001

Løsningsforslag Test 2

2 Om statiske variable/konstanter og statiske metoder.

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

UNIVERSITETET I OSLO

Læringsmål for forelesningen

INF1000: noen avsluttende ord

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

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

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

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

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

Visual Basic. Repetisjon fra mandag

Oppgave 1 - Kortsvarsoppgave. INF1000 eksamen V05. Oppgave 1 (c) Oppgave 1 (b) Svar: a = 9, b=10

UNIVERSITETET I OSLO

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Introduksjon til objektorientert programmering

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

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

Inf1010 oppgavesamling

EKSAMEN med løsningsforslag

Rekursjon som programmeringsteknikk

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Klasser og objekter. Tuva Kristine Thoresen 22. oktober Institutt for Informatikk

Transkript:

Dagens forelesning Iterator-teknikken Hva er en Iterator og hvorfor bruke den? Hvordan virker en Iterator? Vi lager en Iterator for tegnene i en String Iterable-grensesnittet og for-løkker Eksempel med bruk av Iterator og Iterable-grensesnittene Highscoreliste-implementasjon Husk prøveeksamen Fredag 15/3-13 kl 12 i R1. 1

java.util.iterator Et standard Java-grensesnitt for iterasjon 2

Iterasjon (over tegn) hva er felles? List<Character> charlist; for (int i = 0; i < charlist.size(); i++) { Character c = charlist.get(i); print(c); String s; for (int i = 0; i < s.length(); i++) { Character c = s.charat(i); print(c); 3 char[] chararray; for (int i = 0; i < chararray.length; i++) { Character c = chararray[i]; print(c);

java.util.iterator hva og hvorfor Å bruke ulike typer samlinger av objekter, som lister (List), stabler (Stack) og sett (Set) krever ofte at en itererer (går gjennom) alle elementene i samlingen Iterasjon med List: 4 List objekter = for (int i = 0; i < objekter.size(); i++) { Object o = objekter.get(i); System.out.println( Neste: + o); Eksempel på indeksbasert iterasjon int-variabel brukes som løkkevariabel bruker løkkevariabel for å hente ut objekt

Men hva gjør en i det generelle tilfellet? Iterator-teknikken/grensesnitt gir en uniform måte å iterere over elementer 5

java.util.iterator En såkalt iterator er et objekt som genererer objekter iterator.hasnext() sier om det er flere objekter å generere iterator.next() genererer neste objekt (som brukes opp ) Kode-eksempel: List<Person> personer = Iterator<Person> it = personer.iterator(); while (it.hasnext()) { Person p = it.next(); System.out.println( Neste: + p); 6

java.util.iterator Iteratoren husker hvor langt i lista en er kommet hasnext() returnerer true så lenge vi ikke har kommet gjennom hele lista next() vil hver gang returnere neste element og flytte seg et trinn utover i lista iterator()-metoden er definert for alle typer samlinger (Collection) alle List- og Set-implementasjoner har den 7

Sekvensdiagram for iterasjon med List objekter: List size() get(0) size() get(1) size() get(2) 8 size()

Sekvensdiagram for iterasjon med Iterator it: Iterator objekter: List hasnext() next() hasnext() next() hasnext() next() hasnext() size() get(0) size() get(1) size() get(2) size() 9

Et Iterator-objekt husker hvor langt vi er kommet, og bruker den underliggende lista til å - sjekke om vi er ferdig og - hente ut neste element Hvorfor introdusere en slik teknikk, den er jo ikke noe lettere å bruke? 10

Bruk av iterator Uniform måte å iterere over en samling objekter Uavhengig av om det er en posisjonsbasert List-implementasjon eller en annen type samling Uavhengig av metode som benyttes for å hente ut objekter (tabell[i] eller list.get(i)) Gir mindre avhengighet mellom kode som aksesserer en samling og kode som implementerer en samling Kan f.eks. lage kode for å summere tall, uten å vite hvor tallene kommer fra 11

Iterasjon over personer-liste (List<Person> personer) Kode for å finne et bestemt element: List<Person> personer = // Vi skal se etter personer med navn // Jan Johansen for (int i = 0; i < personer.size(); i++) { Person p = personer.get(i); if ( Jan Johansen.equals(p.getName())) { // send e-post til Christine Koht 12

Iterasjon over tabell Den vanligste måten å iterere er vha. av for og en løkkevariabel av typen int: // Kode for å finne et bestemt element: Person[] personer = // Vi skal se etter en person med navn // Jan Johansen for (int i = 0; i < personer.length; i++) { Person p = personer[i]; if ( Jan Johansen.equals(p.getName())) { // send e-post til Christine Koht 13

Standard løkkestruktur Løkka inneholder typisk kode som: håndterer løkkevariabelen (for-løkker skiller tydelig mellom disse tre elementene, mens while-løkker har dem mer implisitt) deklarerer løkkevariabelen og gir den en initialverdi: int i = 0 sjekker om løkka skal gjentas: i < personer.length beregner neste verdi for løkkevariabelen (i++ / i+=1 / i=i+1) håndterer objektet for hver runde i løkka identifiserer hvilket objekt som skal behandles: Person p = personer[i] bruker evt. manipulerer objektet if ( Jan Johansen.equals(p.getName())) { 14

Standard løkkestruktur 15 Viktig observasjoner: De først fire punktene (init, test, steg, objekt) er avhengig av hva vi itererer over Kun det siste punktet (løkkekropp) er avhengig av hva vi ønsker å gjøre En iterator innkapsler de fire første punktene, slik at løkka blir uavhengig av hva vi itererer over. Kompleksiteten i løkka dyttes inn i iterator-objektet og dermed over på iterator-koderen. Alle datastrukturer burde ha en tilhørende iteratorklasse, som f.eks. ArrayList har, og en iterator()- metode.

Iterasjon over personer-liste med Iterator<Person> Kode for å finne et bestemt element: List<Person> personer = // Vi skal se etter personer med navn // Jan Johansen Iterator<Person> it = personer.iterator(); while (it.hasnext()) { Person p = it.next(); if ( Jan Johansen.equals(p.getName())) { // send e-post til Christine Koht 16

List har en iterator, men hva med String og tabeller? List<Character> charlist; for (int i = 0; i < charlist.size(); i++) { Character c = charlist.get(i); print(c); String s; for (int i = 0; i < s.length(); i++) { Character c = s.charat(i); print(c); Vi kan lage våre egne iteratorer! 17 char[] chararray; for (int i = 0; i < chararray.length; i++) { Character c = chararray[i]; print(c);

Iterable (1) Iterable er et grensesnitt som kun tilbyr én metode: iterator() Enkelt sagt så implementeres det av klasser som tilbyr noe å iterere over. En kan da bruke en spesiell for-variant for iterasjon: List<Person> personer = for (Person person: personer) { Samme som List<Person> personer = Iterator<Person> it = personer.iterator(); while (it.hasnext()) { Person person = it.next(); 18

Iterable (2) Generell form Iterable<X> xer = for (X x: xer) { Samme som Iterable<X> xer = Iterator<X> it = xer.iterator(); while (it.hasnext()) { X x = it.next(); 19

Iterable (3) Ved å implementere iterable i egne klasser, så kan en bruke denne for-varianten til iterasjon class Person implements Iterable<Person> { private List<Person> children; public Iterator<Person> iterator() { return children.iterator(); Kan da bruke: Person father = for (Person child: father) { // kode som bruker child 20

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 21