Delegeringsteknikken. public class CD { private List<Tra ck> tracks = new ArrayLis t<track> (); public int gettrack Count() { return tracks.

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

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

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

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

Læringsmål for forelesningen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Liste som abstrakt konsept/datatype

Sortering med Comparable og Comparator

TDT4100 Objektorientert programmering

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

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

Læringsmål for forelesningen

Seminaroppgaver IN1010, uke 2

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

UNIVERSITETET I OSLO

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

INF1010 notat: Binærsøking og quicksort

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

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

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

UNIVERSITETET I OSLO

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

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

IN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)

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

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

INF1010. Stein Michael Storleer (michael) Lenkelister

Algoritmer og datastrukturer A.1 BitInputStream

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

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Algoritmer og datastrukturer Eksamen

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

EKSAMEN I FAG TDT MMI Tirsdag 1. juni 2004 Tid: kl

INF1000: Forelesning 7

UNIVERSITETET I OSLO

INF 1010, vår 2005 Løsningsforslag uke 11

Oblig 4Hybelhus litt mer tips enn i oppgaven

Repetisjon. INF gruppe 13

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering

Løsningsforslag til eksamen i INF1000 våren 2006

Kodetime for Nordstrand barneskole

Quicksort. Fra idé til algoritme.

UNIVERSITETET I OSLO

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

INF1000 Eksamen 2014 (modifisert)

Algoritmer og datastrukturer Vedlegg A.2 BitOutputStream

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

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

INF1000: Forelesning 7. Konstruktører Static

Løsnings forslag i java In115, Våren 1998

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

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

INF1010 Sortering. Marit Nybakken 1. mars 2004

TOD063 Datastrukturer og algoritmer

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

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

UNIVERSITETET I OSLO

Innhold uke 9. Objektorientert programmering i Python. Om ukens pensum. Referanser og objekter Tema: Mer komplekse strukturer

Løsnings forslag i java In115, Våren 1996

"Nelsons kaffebutikk"

Inf 1000 høst 2005 Løsningsforslag ordinær eksamen

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater

Kontinuasjonseksamensoppgave i TDT4100 Objektorientert programmering

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Eksamen 22. februar 2011

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

Metode for ansvarsdrevet OO. Dagens forelesning. Delegering av ansvar i en trelagsarkitektur

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

INF1000 HashMap. Marit Nybakken 2. november 2003

En algoritme for permutasjonsgenerering

UNIVERSITETET I OSLO

Rekursjon. Binærsøk. Hanois tårn.

INF Notater. Veronika Heimsbakk 10. juni 2012

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Kapittel 9: Sortering og søking Kort versjon

Løsningsforslag eksamen INF1020 høsten 2005

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

Gjennomgang av eksamen H99

Dagens tema: 12 gode råd for en kompilatorskriver

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

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

2 Om statiske variable/konstanter og statiske metoder.

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

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

UNIVERSITETET I OSLO

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Transkript:

Delegeringsteknikken Delegering er en teknikk hvor et objekt tilbyr et sett metoder og bruker et internt objekt til å utføre logikken, dvs. delegerer oppgaven til det interne objektet. Delegering i det virkelige liv handler om at én person kan ta ansvar for å utføre noe for en oppdragsgiver, men overlater til den annen (delegaten) å gjøre selve jobben uten at dette (nødvendigvis) synliggjøres for oppdragsgiveren. Den som delegerer (den delegerende) får evner til å utføre oppgaver, basert på delegatens evner og ens myndighet over denne. Denne rollefordelingen er også nyttig innen objekientering: et objekt benytter seg av et annet for å utføre en del av en tjeneste. En typisk bruk av delegering er for å realisere en 1-n-assosiasjon, som er kapslet inn med metoder for å lese antall elementer, hente ut et bestemt element basert på indeks og legge til og fjerne elementer. Ta CD- og Track-klassene og tracks-koblingen som eksempel: class CD private List<Tra ck tracks = t<track (); int gettrack Count() size(); Track gettrack (int index) Klassediagrammet og koden til venstre viser hvordan tracks- assosiasjonen er realisert. Vi ser at den er kapslet inn med en rekke metoder og at realiseringen bruker en intern t. Alle innkapslingsmetodene kaller bare tilsvarende metoder i t- objektet, uten noe særlig mer logikk. Vi sier at CD delegerer til Ar raylist. Sekvensdiagrammet til høyre illustrerer hvordan CD- objektet bruker t-objektet. Selv om vi hadde lagt til litt validering og annen logikk, så hadde alt grovarbeidet i praksis blitt utført av t-klassen, og uten å delegere og dermed (gjen) bruke logikken i t-klassen, så ville CD-klassen blitt mye mer kompleks. Dette er typisk for delegeringsteknikken: Den delegerende klassen har et internt objekt av delegat-klassen, altså objektet som det delegeres til, som gjør det meste av grovarbeidet. Den delegerende klassen har metoder med samme eller lignende navn som metoder i del egat-klassens. Disse metodene delegerer mer eller mindre direkte til metoder i d elegat-objektet. Sekvensdiagrammet illustrerer den generelle teknikken godt, bare bytt ut CD med delegerende og ArrayLi st med delegat. get (index); void addtrack (Track track)

if (! contains (track)) add (track); void removetr ack (Track track) remove (track); I dette tilfellet er det faktum at en bruker delegering ikke på noen måte synlig utenifra, fordi det t-objektet opprettes internt i klassen og det gis ingen direkte tilgangen til det, siden det jo er kapslet inn. Men i mange tilfeller er litt av poenget at en utenifra kan styre hvilket objekt det delegeres til og dermed påvirke totaloppførselen. Dette illustreres av følgende eksempel. Vi skal lage en som går gjennom (genererer) annenhvert element i en liste, men istedenfor å knytte den direkte til en List (eller Collection/Iterable), så lar vi den delegere til en annen : class implemen ts Itera private Itera ; Vi ser at hvert kall til ) vil resultere i et kall til ) på de legaten ( ). Hvert kall vil next() vil imidlertid gi først et kall til next() på delgaten og så et kall til ) og evt. et nytt kall til next(). Effekten av det andre kallet til next() er å bruke opp / hoppe over annenhvert element: det første elementet brukes, det andre kastes, det tredje brukes og det fjerde kastes osv. ) - kallet er der for å unngå å utløse unntak ved at vi hopper over et element som ikke finnes. Et viktig poeng her, ut over bruken av delegering, er at konstruktøren tar inn delegaten, slik at den som bruker, kan bestemme hvilken det delegeres til, dvs. hvor elementene egentlig kommer fra. I følgende kode-eksempel kommer elementene fra en vanlig liste:

(Iterato r<object ) this. = ; @Overrid e boolean ). ); @Overrid e Object next() Object o =.next(); if (iterato rdelegat e. List<Obj ect list = t<object (Arrays. aslist (1, 2, 3, 4, 5, 6)); produces every second element in list Itera it2 = (list. ()); prints 1 3 5 while System. out. print next() + " "); En -instans kan delegere til en annen EverySe c, for dermed å hoppe over flere elementer:

.next(); o; List<Obj ect list = t<object (Arrays. aslist (1, 2, 3, 4, 5, 6, 7, 8, 9)); produces every fourth element in list Itera it2 = ( (list. ())); prints 1 5 9 while System. out. println next() + " ");

Sidetype Ferdig Dekningsgrad Omfang teori 25 25 25