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

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

TDT4100 Objektorientert programmering

Læringsmål for forelesningen

TDT4100 Objektorientert programmering

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

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

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

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

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

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

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

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

Læringsmål for forelesningen

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering

UNIVERSITETET I OSLO

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

Kapittel 8: Programutvikling

AlgDat 12. Forelesning 2. Gunnar Misund

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

Hvorfor objektorientert programmering?

AlgDat 10. Forelesning 2. Gunnar Misund

Læringsmål for forelesningen

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

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

TDT4100 Objektorientert programmering

Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Introduksjon til objektorientert programmering

Læringsmål for forelesningen

Løsningsforslag til eksamen i INF1000 våren 2006

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

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

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

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

Læringsmål for forelesningen

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Kapittel 7: Mer om arv

TDT4100 Objektorientert programmering

(MVC - Model, View, Control)

Objektorientert design av kode. Refaktorering.

Eksamen Objektorientert Programmering 2011

INF1000 Prøveeksamen Oppgave 7 og 9

Eksamen. Objektorientert Programmering IGR 1372

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

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

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

IN1010 våren januar. Objektorientering i Java

Objektorientert programmering i Python

INF1000: noen avsluttende ord

Liste som abstrakt konsept/datatype

UNIVERSITETET I OSLO

IN våren 2019 Onsdag 16. januar

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

IN våren 2018 Tirsdag 16. januar

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

Socket og ServerSocket

2 Om statiske variable/konstanter og statiske metoder.

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

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

INF Seminaroppgaver til uke 3

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

UNIVERSITETET I OSLO

Objektorientering i VB en introduksjon

Fra problem til program

LC191D/LO191D Videregående programmering mai 2010

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

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

Klasser. Webprogrammering høsten Objekter. Eksempelklasser og -objekter. 2 of :56. 1 of :56

INF våren 2017

1 Kodegenerering fra Tau Suiten

Obligatorisk oppgave 4: Lege/Resept

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

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

Implementering av caching ved hjelp av Spring. Christian Vestøl

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

Objekt med Java. Harald Yndestad Høgskolen i Ålesund

INF1010 Arv. Marit Nybakken 2. februar 2004

UNIVERSITETET I OSLO

Obligatorisk oppgave 2: Bilhierarki

INF1010 våren Arv og subklasser - del 2

Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå

UNIVERSITETET I OSLO

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

TDT4100 Objektorientert programmering

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

PG4200 Algoritmer og datastrukturer Forelesning 7

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

Transkript:

Læringsmål for forelesningen Objektorientering Delegeringsteknikken Delegering vs. arv 1

Dagens forelesning Introduksjon og motivasjon Hvorfor forelese om standardteknikker, såkalte patterns? Hva slags problem løses med delegering? Delegering vs. arv Delegeringseksempler Person.children-liste AnnenhverIterator1 AnnenhverIterator2 Sekvensdiagrammer i UML 2

Bortsett fra arv... så kan dere det viktigste om Java-språket! Men... programmering er mer enn Java, dere trenger også lære om standard kodingsteknikker, f.eks. god strukturering av koden og bruk av flere API er 3

Standard kodingsteknikker a design pattern is a general repeatable solution to a commonly occurring problem in software design Gjenbrukbare kodingsteknikker som har vist seg å være praktiske/effektive løsninger 4

Eksamen 2012 Del 1 Innkapsling (20%) Gitt følgende klasse, som representerer et tidspunkt på dagen: public class DayTime { public final int hours, minutes; public DayTime(int hours, int minutes) { this.hours = hours; this.minutes = minutes; } public String tostring() { return hours + ":" + minutes; } } 5

Eksamens-motivasjon 1. Hva betyr final-nøkkelordet slik det er brukt her? På hva slags måte(r) ivaretar denne klassen formålet med innkapsling og på hva slags måte(r) ikke? 2. Beskriv den generelle teknikken og navnekonvensjonen(e) for å representere og kapsle inn en enkel verdi, f.eks. tall eller objektreferanse, som skal kunne endres etter at objektet er opprettet. 3. I hva slags metode(r) brukes unntak ifm. innkapsling, og hvordan? Vis gjerne med et eksempel! 4. Mange klasser inneholder et List<X>-felt og definerer addx, removex og andre metoder som tilsvarer og bruker metodene i List-grensesnittet. En alternativ løsning kunne vært å arve fra en List<X>-implementasjon, f.eks. ArrayList<X>. Hvorfor brukes aldri denne løsningen i praksis? 6

Delegering Et objekt fremstår med en ferdighet, men overlater til et annet (internt) objekt å gjøre jobben (Matlagings)analogi (kjøkken)sjefen har ansvaret, men han/hun har (kun) en koordinerende rolle overfor underordnede (kjøkken)medarbeidere Mer fleksibel teknikk enn arv for gjenbruk av eksisterende funksjonalitet 7

Generell delegeringsløsning To objekter: delegerende og delegat delegerende eier/har en referanse til delegat delegerende har et sett metoder m1..mn som (noenlunde direkte) tilsvarer metoder hos delegat kall til metodene m1..mn på delegerende fører (noenlunde direkte) til tilsvarende kall på delegat delegerende delegat m1() m2() mn() m1() m2() mn() 8

Eksempel: Person.children-liste Delegerende: Person-objekt Delegat: List<Person>-objekt m1..mn: getchildcount/size getchild/get addchild/add removechild/remove... getchildcount() getchild() mn() Person children: List<Person> size() get() mn() Hva med arving? Hvordan og hvorfor ikke? 9

Eksempel: IO Java sitt IO-system er bygd på delegering: alle klassene bygger på en av de abstrakte superklassene Writer, Reader, OutputStream og InputStream Mange av klassene delegerer til implementasjoner av disse InputStreamReader BufferedReader PrintWriter... 10 Kall til metoder som read/readln, write og print/println delegerer til det indre objektet sine metoder

Delegering og grensesnitt Metodene m1..mn er ofte deklarert i et grensesnitt som delegerende og delegat implementerer Delegerende kan implementere flere slike grensesnitt og har da én delegat for hvert delegerende: G1 GN delegat1: G1... delegatn: GN g1m1() g1mn() gnm1() gnmn() g1m1() g1mn() gnm1() gnmn() 11

Varianter av delegering Flere delegater implementerer samme grensesnitt Delegerende velger hvilken det delegeres til i hvert tilfelle, basert på ikke-funksjonelle egenskaper én implementasjon er raskere for bestemte argumenter jevn fordeling av last på underliggende maskinvare konfigurasjon som avhenger av formål, f.eks. drift, testing Delegerende kan tilpasse og filtrere metodekallene delegerende: G delegat1: G... delegatn: G m1() mn() m1() mn() 12 m1() mn() m1() mn()

Eksempel: logging Logging brukes for å samle informasjon om kjøring av program Mange rammeverk for logging, med noenlunde samme funksjonalitet registrering av div. info om kilden: klasse, tidspunkt,... meldinger med ulik alvorlighetsgrad: fatal, error, warning og info ulike måter å rapportere på: til fil, meldingspanel, rss, twitter,... regler for hvilke meldinger som skal havne hvor, f.eks. kaste info, lagre warning til fil, sende error til admin og fatal til brannvesenet Såkalte meta-loggere lar deg programmere med ett rammeverk, men delegere til et eller flere andre metalogger: L loggere: L1 loggerw: LN error() warn() info() error() warn() 13 Hva med arving? Hvordan og hvorfor ikke?

Eksempel: AnnenhverIterator1 AnnenhverIterator1 delegerer til intern Iterator, men kaster annenhvert element it1: AnnenhverIterator1 it2: Iterator hasnext() next() hasnext() next() hasnext() next() Hva med arving? Hvordan og hvorfor ikke? 14

Eksempel: AnnenhverIterator2 AnnenhverIterator2 har to interne Iterator-objekter, og delegerer til dem annenhver gang it1: AnnenhverIterator2 it2: Iterator it3: Iterator hasnext() next() hasnext() next() hasnext() next() hasnext() next() Hva med arving? Hvordan og hvorfor ikke? 15

Eksempel: HashMap med defaults En begrenset Map-aktig klasse for hierarkiske innstillinger/kjede med defaults. map: DefaultingMap realmap: Map defaults: DefaultingMap get(k) get(k) containskey(k)//true get(k) containskey(k)//false get(k) Hva med arving? Hvordan og hvorfor ikke? 16

Læringsmål for forelesningen Objektorientering Delegeringsteknikken Delegering vs. arv 17