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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Repitisjonskurs. Arv, Subklasser og Grensesnitt

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

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 Videre

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

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

UNIVERSITETET I OSLO

Generiske mekanismer i statisk typede programmeringsspråk

INF Notater. Veronika Heimsbakk 10. juni 2012

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

2 Om statiske variable/konstanter og statiske metoder.

Enkle generiske klasser i Java

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

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

2 Om statiske variable/konstanter og statiske metoder.

INF1010 våren Arv og subklasser del 1

INF1010 våren Arv og subklasser del 1

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

UNIVERSITETET I OSLO

INF1010. Grensesnittet Comparable<T>

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

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

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

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

INF Innleveringsoppgave 6

INF Seminaroppgaver til uke 3

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

INF våren 2017

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

UNIVERSITETET I OSLO

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

IN våren 2019 Onsdag 16. januar

Kapittel 7: Mer om arv

IN våren 2018 Tirsdag 16. januar

Obligatorisk oppgave 4: Lege/Resept

UNIVERSITETET I OSLO

Del 3: Evaluere uttrykk

INF1010 Arv. Marit Nybakken 2. februar 2004

INF1000: Forelesning 7

LO191D/LC191D Videregående programmering

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

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

INF1010 siste begreper før oblig 2

Introduksjon til objektorientert programmering

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

UNIVERSITETET I OSLO

INF1010. Stein Michael Storleer (michael) Lenkelister

UNIVERSITETET I OSLO

INF1000: Forelesning 7. Konstruktører Static

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

Læringsmål for forelesningen

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

INF1010 våren Grensesnitt

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

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

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

INF1010 våren Arv og subklasser - del 2

INF1010 Binære søketrær ++

INF1010 våren Grensesnitt

Klasser, objekter, pekere og UML. INF gruppe 13

Løsningsforslag Test 2

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

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

Sortering med tråder - Quicksort

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

INF1010 våren Grensesnitt (interface)

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

Eksamen. Objektorientert Programmering IGR 1372

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

Kapittel 9: Sortering og søking Kort versjon

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

UNIVERSITETET I OSLO

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

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

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

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

INF1000: noen avsluttende ord

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

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

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

INF1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

IN1010 våren januar. Objektorientering i Java

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

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

UNIVERSITETET I OSLO

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

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

Transkript:

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

Hva er problemet? Oppgaven Emballasjefabrikken Renpakk skal lage et nytt datasystem for å administrere sine produkter, og du har fått i oppdrag å lage deler av dette systemet. Alt Renpakk produserer kalles emballasje, og det er fire hovedtyper: glassemballasje, metallemballasje, plastemballasje og pappemballasje. Noe av emballasjen til Renpakk er det pant på, og noe emballasje er nedbrytbar. Dette er egenskaper som kommer i tillegg til de andre egenskapene emballasjen har. Du får beskjed om å beskrive plastflaske med pant, liten plastflaske med pant og liten nedbrytbar plastflaske med pant. Renpakk har fått et nytt og enestående produkt de er veldig stolt av, nemlig stor nedbrytbar pappflaske med pant, og du skal også ta med en klasse for slike flasker. Tegn klassehierarkiet for de 9 produkttypene som er beskrevet over. Inkluder også eventuelle grensesnitt.

Hva er en klasse? Hva er en klasse egentlig? En klasse er en modellering av noe (enten ting eller begrep). Konkret En klasse inneholder en representasjon (dvs variabler) én eller flere konstruktører diverse operasjoner (dvs metoder)

Hva er objektorienter programmering Hva er programmering? Ett svar (blant flere riktige) er Idé OO-språk C Maskinkode

Hvilke klasser trenger jeg? Hvilke substantiver finner vi? Emballasjefabrikken Renpakk skal lage et nytt datasystem for å administrere sine produkter, og du har fått i oppdrag å lage deler av dette systemet. Alt Renpakk produserer kalles emballasje, og det er fire hovedtyper: glassemballasje, metallemballasje, plastemballasje og pappemballasje. Noe av emballasjen til Renpakk er det pant på, og noe emballasje er nedbrytbar. Dette er egenskaper som kommer i tillegg til de andre egenskapene emballasjen har. Du får beskjed om å beskrive plastflaske med pant, liten plastflaske med pant og liten nedbrytbar plastflaske med pant. Renpakk har fått et nytt og enestående produkt de er veldig stolt av, nemlig stor nedbrytbar pappflaske med pant, og du skal også ta med en klasse for slike flasker.

Hvilke klasser trenger jeg? Hva er ikke klasser i vår modell? «emballasjefabrikk» «datasystem» «produkt» «del» «system»

Hva er et interface? Hva er et interface? Et interface er en egenskap. Noen klasser har denne egenskapen, andre har den ikke. Konkret Et interface inneholder navn på diverse operasjoner (dvs metoder) vi garanterer at en implementasjon inneholder.

Hvilke interface trenger jeg? Hvilke egenskaper finner vi? Emballasjefabrikken Renpakk skal lage et nytt datasystem for å administrere sine produkter, og du har fått i oppdrag å lage deler av dette systemet. Alt Renpakk produserer kalles emballasje, og det er fire hovedtyper: glassemballasje, metallemballasje, plastemballasje og pappemballasje. Noe av emballasjen til Renpakk er det pant på, og noe emballasje er nedbrytbar. Dette er egenskaper som kommer i tillegg til de andre egenskapene emballasjen har. Du får beskjed om å beskrive plastflaske med pant, liten plastflaske med pant og liten nedbrytbar plastflaske med pant. Renpakk har fått et nytt og enestående produkt de er veldig stolt av, nemlig stor nedbrytbar pappflaske med pant, og du skal også ta med en klasse for slike flasker.

Hvilke interface trenger jeg? Hvilke interface-er trenger vi? Nedbrytbar Pant (Vi kunne også definert interface for liten og stor, men vi dropper det fordi de ikke bringer inn noe nytt.)

Hva er en subklasse? Hva er en subklasse? En subklasse er en spesialisering av en klasse, noe som skiller den av superklassen og eventuelt andre subklasser. Konkret En subklasse inneholder en utvidet representasjon (dvs flere variabler) flere konstruktører flere operasjoner (dvs metoder) redefinering av operasjoner (dvs @Override-e metoder)

Å sette alt sammen Hva er sammenhengen mellom klassene? Alt er Emballasje; den er superklassen i vår modell. Glassemballasje, Metallemballasje, Plastemballasje og Pappemballasje er ulike slags emballasje; de må være subklasser av Emballasje. StorNedbrytbarPappflaskeMedPant er naturlig nok en slags pappemballasje; den må være subklasse av Pappemballasje. PlastflaskeMedPant er en slags plastflaske; den må være subklasse av Plastemballasje. LitenPlastflaskeMedPant er en slags plastflaske, så den er subklasse av PlastflaskeMedPant. LitenNedbrytbraPlastflaskeMedPant er en slags liten plastflaske med pant, så den er subklasse av LitenPlastflaskeMedPant.

Å sette alt sammen

Nå kan vi programmere Programmer 7 av de 9 klassene i klassehierarkiet og eventuelle grensesnitt. Du skal ikke programmere klasser for Glassemballasje og Metallemballasje. Alle variable i alle klasser skal få verdier i det objektene opprettes. Det er derfor viktig at alle klasser har konstruktører med parametere der disse verdiene kan oppgis, unntatt panten på små flasker som alltid har samme verdi, en konstant med verdi 100 øre. All emballasje har et volum (i kubikkcentimeter) og en tekst (String) som er en produksjonsidentifikator. Plastemballasje har ingen flere egenskaper enn Emballasje mens Pappemballasje i tillegg har en vekt (i gram). Når det er pant på en gjenstand, må en kunne vite hvor stor panten er (i antall øre) og en kode (en tekst) som identifiserer returordningen. Når noe er nedbrytbart, må en kunne vite hvor lenge (hvor mange år) det tar før gjenstanden er gått i oppløsning.

Nå kan vi programmere abstract class Emballasje { int volum; // i kubikkcentimeter String produsent; Emballasje(int vol, String prod) { volum = vol; produsent = prod; abstract class Plastemballasje extends Emballasje { Plastemballasje(int vol, String prod) { super(vol,prod); abstract class Pappemballasje extends Emballasje { int vekt; // i gram Pappemballasje(int vekt, int vol, String prod) { super(vol,prod); this.vekt = vekt;

Nå kan vi programmere interface Pant { int panteverdi(); // i øre String returordning(); interface Nedbrytbar { int antallaar();

Nå kan vi programmere abstract class PlastflaskeMedPant extends Plastemballasje implements Pant { String retur; PlastflaskeMedPant(String ret, int vol, String prod) { super(vol,prod); retur = ret; public String returordning() { return retur; class LitenPlastflaskeMedPant extends PlastflaskeMedPant { final static int PANTEVERDI = 100; LitenPlastflaskeMedPant (String ret, int vol, String prod) { super(ret,vol,prod); public int panteverdi() { return PANTEVERDI;

Nå kan vi programmere class LitenNedbrytbarPlastflaskeMedPant extends LitenPlastflaskeMedPant implements Nedbrytbar { int antaar; LitenNedbrytbarPlastflaskeMedPant (String ret, int vol, String prod, int aar) { super(ret,vol,prod); antaar = aar; public int antallaar() { return antaar;

Nå kan vi programmere class StorNedbrytbarPappflaskeMedPant extends Pappemballasje implements Pant, Nedbrytbar { int pantv; int antallaa; String returord; StorNedbrytbarPappflaskeMedPant(String ret, int vol, String prod, int vekt, int pnt, int anta) { super(vekt,vol,prod); returord = ret; pantv = pnt; antallaa = anta; public int panteverdi() { return pantv; public String returordning() { return returord; public int antallaar() { return antallaa;

Hva er oppgaven? Oppgave 2 I denne oppgaven skal du programmere en klasse med navn Frekvens som beskriver en beholder. Du skal lage klassen generisk, og du skal ikke bruke noen klasser fra Java-biblioteket. Formålet med beholderen Frekvens er å slå sammen alle like objekter, samtidig som den holder orden på antallet slike like objekter det var opprinnelig. F.eks. hvis beholderen skal ta vare på String: Gir vi beholderen tekstene Anne, Anne, Anne, Ole, Rita, Rita, Rita, vil resultatet bli (etter sammenslåingen) Anne 3, Ole 1, Rita 3. For å finne ut om to objekter er like skal du bruke metoden equals. Når vi slår sammen to objekter vil vi kaste det ene. Hvilket vi kaster og hvilket vi beholder er likegyldig. Du skal i denne oppgaven legge alle objektene inn i beholderen ved hjelp av konstruktøren som skal ha som parameter en tabell (array) med pekere til objektene som skal legges inn. Vi antar at tabellen er ferdig sortert.

Alt blir mer oversiktlig med en tegning av datastrukturen Tegn datastrukturen i et objekt av klassen Frekvens, ved først å vise hvordan datastrukturen ser ut rett etter at objektet er opprettet (og konstruktøren er utført), og deretter hvordan datastrukturen ser ut etter at metoden likesammen er kalt (se nedenfor). Bruk gjerne eksemplet vist over.

Slik ser det ut før og etterpå

Hva er generiske klasser? Hva er generiske klasser (= klasseparametre)? Klasser kan gis en parameter som er navnet på en annen klasse: class Par<T> { T a, b; Par(T a, T b) { this.a = a; this.b = b; String join() { return a.tostring() + "&" + b.tostring(); class TestPar { public static void main(string[] a) { Par<String> s = new Par<>("abc", "xyz"); Par<Integer> i = new Par<>(12, 17); System.out.println("s = " + s.join()); System.out.println("i = " + i.join());

Hva er «boxing»? Hva er innpakking («boxing»)? Problem Klasseparametre kan bare være andre klasser, ikke primitive typer som int, float etc. Løsning Lag klasser for hver av av de primitive typene: Integer, Float etc. Forbedret løsning La kompilatoren sørge for automatisk innpakking av de primitive typene.

Nå kan vi programmere class Frekvens <E> { E tingen = null; int antall = 0; // tingen det er flest forekomster av // tilsvarende antall Node forste = null; class Node { Node neste = null; E tingen; int antall = 1; Node(E s) { tingen = s;

Nå kan vi programmere Frekvens (E[] tabell) { Node siste = null; for (E s: tabell) { if (forste == null) { forste = new Node(s); siste = forste; else { siste.neste = new Node(s); siste = siste.neste;

Resten av problemet I oppgave 2 skal beholderen bare inneholde tre offentlige metoder: én metode kalt likesammen, én kalt hentflestobjektet og én kalt hentflestantallet. Metoden likesammen skal ikke ha noen parametre og ikke returnere noe. Metoden skal gå gjennom listen, slå sammen like objekter og holde orden på hvor mange like objekter det var i den opprinnelige listen. Siden listen er ferdig sortert vil like objekter ligge etter hverandre i listen. Resultatet vil være en kortere (sortert) liste der ingen objekter er like. Samtidig som metoden går gjennom listen og slår sammen objekter, skal den også finne ut (til bruk i de andre to metodene) hvilket objekt som har flest like forekomster, og hvor mange dette er. Resultatet i vårt eksempel ville vært (som allerede vist over): Anne 3, Ole 1, Rita 3, og det er Anne (eller Rita) som forekommer flest ganger, og dette er 3 ganger. Metoden hentflestobjektet skal returnere en peker til det objektet som representerer flest like forekomster, og metoden hentflestantallet skal returnere dette største antallet av like forekomster. Hvis det er flere forskjellige objekter som har flest like forekomster spiller det ingen rolle hvilket av disse tre objektene som velges. Programmer de tre metodene likesammen, hentflestobjektet og hentflestantallet i klassen Frekvens.

Metoden likesammen public void likesammen() { Node denne = forste; if (forste!= null) { while (denne.neste!= null) { if (denne.tingen.equals(denne.neste.tingen)) { // Fjern, dvs hopp over neste: denne.neste = denne.neste.neste; denne.antall++; sjekkombest(denne.tingen, denne.antall); else { denne = denne.neste; private void sjekkombest(e s, int t) { if (t > antall) { tingen = s; antall = t;

Om synlig og usynlig Synlighet i klasser Operasjonene i en klasse kan være av tre varianter: Offentlige (angitt med public) er synlige overalt. Hemmelige (angitt med private) er ukjent utenfor klassen. Beskyttede (angitt med protected) er synlig i klassen, dens subklasser (og et par andre steder).

Og da var vi omtrent ferdige Resten er trivielt: public E hentflestobjektet() { return tingen; public int hentflestantallet() { return antall;