Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Relevanta dokument
Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

Lösningsförslag: Övning 5.

2. Palindrom. Exempel: 1,2,3,2,1 är ett palindrom, och även 0, men inte 1,2,3,1,2,3.

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Stackar, köer, iteratorer och paket

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2. Länkad lista och iterator

Länkade strukturer. (del 2)

Föreläsning 2. Länkad lista och iterator

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Samlingar Collection classes

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Föreläsning 4 Innehåll

DAT043 - föreläsning 8

Generisk klass med typparameter Inre klass - ListIterator

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Repetition av OOP- och Javabegrepp

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

DAT043 Objektorienterad Programmering

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Objektorienterad Programmering (TDDC77)

Repetition av OOP- och Javabegrepp

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Objektorienterad programmering i Java

Laboration 13, Arrayer och objekt

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 2 Datastrukturer (DAT037)

Objektorienterad programvaruutveckling, fk, TDA550. Exempeltentamen

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Samlingar Collection classes

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 4

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Collection classes. Interface, första exempel. Interface (forts) Men först

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

OOP Objekt-orienterad programmering

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

BST implementering, huvudstruktur

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Programmering för språkteknologer II, HT2014. Rum

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Konstruktion av klasser med klasser

Den som bara har en hammare tror att alla problem är spikar

Föreläsning 2 Datastrukturer (DAT037)

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

! Skall den vara generisk? ! Skall den vara självexpanderande? ! Skall vi ha en speciell klass för listnoder? ! osv

Tentamen Programmering fortsättningskurs DIT950

Att skriva till och läsa från terminalfönstret

Generiska datatyper. Parametrisk Polymorfism: Generics. Generisk lista. Utvikning: Typer

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Collection Classes. bjectorienterad programmering Sida 1

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsning 8: Exempel och problemlösning

Objektsamlingar i Java

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA550 DAG: TID: 8:30 12:30

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Lösningar för tenta 2 DAT043,

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Enkla variabler kontra referensvariabel

Interfacen Set och Map, hashtabeller

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Transkript:

Övning vecka 5. TDA550 - Objektorienterad programvaruutveckling IT, fk Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator. Uppgift 1 Kom ihåg att samlingar och avbildningar (eng. "map") endast kan lagra objektreferenser. Om du försöker lagra värden av en primär datatyp, kommer Javakompilatorn att automatiskt göra omslagsobjekt (wrapper objects) av motsvarande typer, d.v.s. automatisk typomvandling. (Om du inte är säker på vad omslagsobjekt är för något, diskutera detta med varandra och/eller handledaren). a) Skriv ett program som genererar en frekvenstabell av orden i argumentlistan till programmet. Frekvenstabellen avbildar varje ord till antalet gånger det förekommer i argumentlistan. För att förstå vad som egentligen händer, får ni för närvarande inte använda er av automatisk typomvandling (boxing, unboxing), utan ni måste göra detta explicit. Använd därför objekt av klassen IncrementableInteger nedan, som "värden" i avbildningen. Frekvenstabellen skall alltså ha den statiska typen Map<String, IncrementableInteger>. public class IncrementableInteger { private int intfield; public IncrementableInteger(int i) { intfield = i; public void increment() { intfield = intfield + 1; public int getintfield() { return intfield; return String.valueOf(intField); //IncrementableInteger b) Skriv nu samma program utan att använda IncrementableInteger. Använd automatisk typomvandling där ni kan, d.v.s. programmet ser ut att spara och hämta int:s. Deklarationen av avbildningen får nu den statisk typen Map<String, Integer>. Kan ni se några nackdelar med denna version? Uppgift 2 Betrakta klassen DummyDates på nästa sida. Klassen skapar en (något meningslös) lista över slumpade datum. Klassen tillhandahåller även en iterator för att stega sig igenom de genererade datumen. Men iteratorn har brister, identifiera dessa! Till din hjälp har du följande utdrag ur Java s API: boolean hasnext() E next() void remove() Returns true if the iteration has more elements. (In other words, returns true if next would return an element rather than throwing an exception.) Returns the next element in the iteration. Throws NoSuchElementException if the iteration has no more elements. Removes from the underlying collection the last element returned by the iterator (optional operation). This method can be called only once per call to next. The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method. Throws UnsupportedOperationException if the remove operation is not supported by this Iterator. Throws IllegalStateException if the next method has not yet been called, or the remove method has already been called after the last call to the next method. Övning vecka 5 1 TDA550 HT-14

import java.util.date; import java.util.iterator; import java.util.random; public class DummyDates implements Iterable<Date> { private final static int SIZE = 15; private Date[ ] dates = new Date[SIZE]; private int actualsize; public DummyDates() { Random r = new Random(); // Fill the array.... for (int i = 0; i < SIZE; i++) { dates[i] = new Date(r.nextInt()); actualsize = SIZE; public Iterator<Date> iterator() { return new DSIterator(); private class DSIterator implements Iterator<Date> { // Start stepping through the array from the beginning private int next = 0; public boolean hasnext() { // Check if a current element is the last in the array return (next < actualsize); public Date next() { return dates[next++]; public void remove() { for (int i = next; i < SIZE - 1; i++) { dates[i] = dates[i + 1]; dates[size - 1] = null; actualsize--; //DSIterator //DummyDates Uppgift 3 Implementera metoden public static <T> Set<T> exclusiveunion(set<t> s1, Set<T> s2) som returnerar mängden av element som antingen finns i mängden s1 eller mängden s2 (elementen får alltså inte förekomma både i s1 och s2). Metoden får inte vara destruktiv, d.v.s. innehållet i s1 och s2 får inte förändras. I metodkroppen använder ni bara mängdoperationer och konstruktorer för mängder. Övning vecka 5 2 TDA550 HT-14

Uppgift 4 Nedan ges ett enkelt testprogram som lagrar NUMRUNS slumpmässigt genererade objekt av typen Integer i en samling och därefter generera ytterligare NUMRUNS slumpmässigt genererade objekt av typen Integer samt söker efter dessa i samlingen. Tre olika samlingar använts i testprogrammet: en trädstruktur (TreeSet), en hashtabell (HashSet) och en länkad lista (LinkedList). Körningstider (i sekunder) för att utföra add-operationerna och contains-operationerna beräknas för respektive samling. I tabellen nedan redovisas resultaten för för exekveringar av programmet då 100k respektive 5M slumptal genererades. Vardera av x, y, z motsvarar varsin samling (datastruktur). Vilken datastrukturer motsvaras av x, y respektive z? Förklara varför resultaten ser ut som de gör. Är någon konsekvent bättre med avseende på tidsåtgång? Implementation 100k add 100k contains 5M add 5M contains x 0.04 51 0.72 > 100 min y 0.13 0.1 8.3 4.8 z 0.06 0.04 2.89 0.96 import java.util.*; public class Timings { public static void main(string[ ] args) { // Use dierent implementations of a collection Collection<Integer>[ ] colls = new Collection[3]; colls[0] = new TreeSet<Integer>(); colls[1] = new HashSet<Integer>(); colls[2] = new LinkedList<Integer>(); final int NUMRUNS = Integer.parseInt(args[0]); final int SEED = Integer.parseInt(args[1]); for (Collection<Integer> c : colls) { Random randomizer = new Random(SEED); // Add a lot... long now = System.nanoTime(); for (int i = 0; i < NUMRUNS; i++) { c.add(randomizer.nextint()); System.out.println("add " + c.getclass() + "\t" + ((System.nanoTime() - now) / 1000000000.0)); //...and search a lot now = System.nanoTime(); for (int i = 0; i < NUMRUNS; i++) { c.contains(randomizer.nextint()); System.out.println("contains " + c.getclass() + "\t" + ((System.nanoTime() - now) / 1000000000.0)); c.clear(); //Timings Övning vecka 5 3 TDA550 HT-14

Uppgift 5 Betrakta klasserna nedan: public class Bicycle { return "Two wheeled bike"; //Bicycle public class Car { return "An ordinary car"; public double getco2emissionlevel() { return 0.1; //Car public class RaceCar extends Car { return "Ferrarati 7.4"; public double getco2emissionlevel() { return 5.1; //RaceCar import java.util.*; public class Vehicles { public static void main(string[ ] args) { Collection vehicles = new HashSet(); vehicles.add(new Bicycle()); vehicles.add(new Car()); vehicles.add(new RaceCar()); for (Object obj : vehicles) { Car c = (Car) obj; System.out.println(c.toString() + " emits " + c.getco2emissionlevel() + " g CO2 / km"); //Vehicles a) När main-metoden i klassen Vehicles exekveras krashar programmet. Varför? b) Skriv om klassen Vehicles så att felet upptäcks vid kompilering istället för vid exekveringen. Uppgift 6 Syftet med Singleton-mönstret är att kunna garantera att endast en instans av en viss klass existerar. Oftast skall också denna instans kommas åt utifrån klassen. Nedan ges en klass med enbart klassmetoder. Är denna klass en singleton? Om inte, hur ska vi förändra klassen så att den blir en singeleton? Spelar det någon roll om klassen är en singelton eller inte? public class GameTile { // code not show here //GameTile public class GameUtils { public static GameTile[ ][ ] newboard(final int width, final int height, final GameTile basetile) { GameTile[ ][ ] board = new GameTile[width][height]; fillboard(board, basetile); return board; public static void fillboard(final GameTile[ ][ ] board, final GameTile basetile) { for (GameTile[ ] row : board) { for (int j = 0; j < row.length; j++) { row[j] = basetile; //GameUtils Övning vecka 5 4 TDA550 HT-14

Uppgift 7 I uppgift 2 på övningen vecka 4 behandlades gränssnittet Comparator, och vi implementerade en klass public class CarComparator implements Comparator<Car> för att sortera objekten i klassen Car nedan i stigande ordning med avseende på: 1. manufacturer 2. modelyear 3. modelname public final class Car { private final String manufacturer; private final String modelname; private final int modelyear; private final String serialnumber; public Car(String manufacturer, String modelname, int modelyear, String serialnumber) { this.manufacturer = manufacturer; this.modelname = modelname; this.modelyear = modelyear; this.serialnumber = serialnumber; public String getmanufacturer() { return manufacturer; public String getmodelname() { return modelname; public int getmodelyear() { return modelyear; public String getserialnumber() { return serialnumber; return " manufacturer: " + this.manufacturer+ " modelname: " + this.modelname + " modelyear: " + this.modelyear + " serialnumber: " + this.serialnumber; //Car Objekten i Car kan dock sorteras efter många andra ordningar än den som implementeras av CarComparator ovan. Eftersom Car har 4 instansvariabler kan dessa ordnas på 4! = 24 olika sätt. Dessutom kan varje instansvariabel sorteras efter både stigande och fallande ordning. Det totala antalen ordningar som objekten i Car kan sorteras på blir därför 2 4 * 4! = 16 * 24 = 384 olika sätt. Det behövs således 384 olika implementationer av gränssnittet Comparator för att få alla totala ordningar för objekten i klassen Car. Ett betydligt flexiblare sätt är att nyttja designmönstren Decorator och Template Method, genom att skapa en jämförare för varje instansvariabel och seriekoppla dessa efter behov. Implementera denna idé för klassen Car. Övning vecka 5 5 TDA550 HT-14