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



Relevanta dokument
Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

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

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

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

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

CHALMERS TENTAMEN. 2012/2013, lp 1 DAT042. Uno Holmer. Java API (utdelas av skrivningsvakten) Erland Holmström tel besöker tentamen

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

DAT043 Objektorienterad Programmering

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

DAI2 (TIDAL) + I2 (TKIEK)

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

PROGRAMMERINGSTEKNIK TIN212

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

TENTAMEN. Objektorienterade applikationer CHALMERS. 2018/2019, lp 3 DAT055. Uno Holmer

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

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

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

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

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

TENTAMEN: Objektorienterad programmering. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Algoritmer. Två gränssnitt

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

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

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

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

Tentamen i Objektorienterad programmering

TENTAMEN: Objektorienterad programmering. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen i Grundläggande programmering STS, åk 1 lördag

Lösningsförslag till tentamen

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Tentamen Programmering fortsättningskurs DIT950

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

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

Objektsamlingar i Java

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

DAT043 - föreläsning 8

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Tentamen i Grundläggande programmering STS, åk

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Tentamen i Grundläggande programmering STS, åk

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

Föreläsning 4 Innehåll

OOP Omtenta

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

Tentamen i Programmering

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Tentamen i Grundläggande programmering STS, åk 1 fredag

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen, Algoritmer och datastrukturer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

OOP Tentamen

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

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

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

Grundläggande programmering med C# 7,5 högskolepoäng

Föreläsning 2 Datastrukturer (DAT037)

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

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

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

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

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Transkript:

1 (13) TENTAMEN: Objektorienterad programmering Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem). Skriv rent dina svar. Oläsliga svar r ä t t a s e j! Programkod som finns i tentamenstesen behöver ej upprepas. Programkod skall skrivas i Java 5 (eller senare) och vara indenterad och kommenterad. Onödigt komplicerade lösningar ger poängavdrag. Givna deklarationer, parameterlistor etc. får ej ändras. Läs igenom tentamenstesen och förbered ev. frågor. I en uppgift som består av flera delar får du använda dig av funktioner klasser etc. från tidigare deluppgifter, även om du inte löst dessa. Lycka till!

2 (13) Uppgift 1 Välj ett alternativ för varje fråga! Garderingar ger noll poäng. Inga motiveringar krävs. Varje korrekt svar ger två poäng. Besvara direkt i tesen! 1. Ett av villkoren är sant, vilket? Integer i1 = new Integer(123), i2 = new Integer(123), i3 = i1; a. i2.equals(i3) b. i1 == i2 c. i2 == i3 2. Vilket påstående är korrekt om Register på basis av vad som visas nedan? public class Register private LinkedList list; private String name; public Register(String name) this.name = name; public void add(person p) list.add(p); a. Klassen går ej att kompilera b. Det går ej att skapa objekt av klassen c. Exekveringen riskerar att avbrytas om objekt av klassen används d. Klassen är felfri 4. Vilket påstående är mest korrekt? a. En klass med hög kohesion har låg koppling till andra klasser. b. En klass med hög koppling till andra klasser har låg kohesion. c. En klass med låg koppling har få kontakter med andra klasser. d. En klass med hög kohesion löser många olika problem. 4. Vilken aktivitet bör alltid utföras efter förändring av programkod? a. Modellering b. Regressionstestning c. Refaktorering

3 (13) 5. Vilken av satserna a eller b ger ett kompileringsfel? public class A private int x; public int y; public class B extends A public void f() x = 10; B obj = new B(); obj.y = 11; // a // b (10 p)

4 (13) Uppgift 2 Ett alarm med snooze-funktion skall ha följande funktionalitet. Man skall kunna ange alarmtid och påminnelseschema med tidsintervall mellan påminnelserna och maximalt antal påminnelser. För enkelhets skull anges här tid i hela sekunder och vi avstår från akustiska alarm utan nöjer oss med visuella i form av pop-up-dialoger. Vid det första alarmet och alla påminnelser utom den sista skall följande dialogfönster komma upp på skärmen: Användaren kan nu välja att somna om genom att trycka på Ja, eller att avbryta alarmet med Nej. Om Ja väljs fås ett nytt larm efter inställt tidsintervall. Den sista påminnelsen skall ha formen Man skall i en och samma applikation kunna starta flera oberoende alarm. Ett alarm motsvaras av ett objekt av klassen SnoozeAlarm. Definiera klassen enligt ovanstående beskrivning. Klassen skall ha en konstruktor som tar tre parametrar enlig ovan. Exempel: SnoozeAlarm a = new SnoozeAlarm(3600,60,5); Efter att tråden för a startats skall det första alarmet komma efter en timma, och max fem påminnelser med en minuts intervall. Lösningen skall baseras på Javas trådmekanism. Plats finns på nästa sida. (8 p)

5 (13) public class SnoozeAlarm

6 (13) Uppgift 3 a) I en viss prisjämförelsesajt ger sökningar resultatobjekt av typen public class Product private String id; // produktnummer private String description; // produktbeskrivning private float price; // konsumentpris inkl. moms private int deliverytime; // max leveranstid (dagar) private int returnlimit; // max tid för returrätt (dagar) Antag att man vill addera jämförelsemetoden compareto i Product så att följande gränssnitt implementeras public interface Comparable<T> int compareto(t obj); Visa i koden ovan tillägget skall se ut. Du kan lämna metodkroppen tom. (2 p) b) Implementera metoden compareto i Product som skall fungera så att a.compareto(b) returnerar -1 om a beskriver en produkt som är ett bättre köp än b, 0 om de två är likvärdiga, och 1 om a är ett sämre alternativ än b. Följande kriterier gäller för denna speciella metod: En billigare vara är alltid ett bättre köp än en dyrare. Om två varor har samma pris är den med kortast leveranstid att föredra. Av två varor med samma pris och leveranstid föredras den som har längst ångervecka. Två varor med samma pris, leveranstid och returtid är likvärdiga. Exempel: Product a = new Product("123456","USB memory,64gb",125,3,10); Product b = new Product("987987","USB memory,64gb",120,3,10); Product c = new Product("675654","USB memory,64gb",120,2,10); Product d = new Product("919283","USB memory,64gb",120,2,20); a.compareto(a); 0 a.compareto(b); 1 b.compareto(a); -1 c.compareto(b); -1 d.compareto(c); -1 b.compareto(d); 1 (6 p)

7 (13) c) I en viss programvara hos prisjämförelsesajten finns klassen public class Kelko private ArrayList<Product> searchresult = new ArrayList<Product>(); public Product findbestbuy() Implementera metoden findbestbuy. Metoden skall returnera ett produktobjekt som motsvarar bästa köp enligt metoden compareto i a) och b). (6 p)

8 (13) Uppgift 4 Designen av nedanstående klasser har bristen att Clock beror av gränssnittsklasserna Display och Console. Det borde vara tvärtom. Komplettera koden på nästa sida så att designmönstret Observer realiseras. Det räcker om du visar mönstret för klasserna Clock och Display (Console blir analogt). public class Clock private Time time; Display display; Console console; public void tick() time++; display.show( time ); console.print( time ); public class Display public show( Time time ) public class Console public print( Time time ) forts.

9 (13) public class Clock private Time time; public void tick() time++; public class Display public Display( Clock clock ) private show( Time time ) (6 p)

10 (13) Uppgift 5 Följande program konverterar mellan olika valutakurser. Man väljer mellan vilka kurser som konverteringen skall ske i menyn Actions. Uppgiften går ut på att implementera en sådan konvertering, från dollar till svenska kronor (för enkelhets skull hårdkodat nedan). Inläsningen av dollarbeloppet skall ske med ett dialogfönster (pop-up). Komplettera koden nedan med kod som skapar menyalternativet Dollars to SEK en lyssnare som när Dollars to SEK väljs begär $-input via pop-up-dialogen och visar både dollarbeloppet och beloppet i svenska kronor i fönstret enligt ovan. (12 p) Fyll i dina lösningar nedan. public class CurrencyConverter public final static double dollartosek = 7.81; private JFrame frame; private JLabel sekdigits; private JLabel dollardigits; public CurrencyConverter() makeframe();

11 (13) private void makeframe() frame = new JFrame("Currency converter"); makemenubar(frame); JPanel contentpane = (JPanel)frame.getContentPane(); contentpane.setlayout(new GridLayout(2,2)); sekdigits = new JLabel(); dollardigits = new JLabel(); contentpane.add(new JLabel("$")); contentpane.add(dollardigits); contentpane.add(new JLabel("SEK")); contentpane.add(sekdigits); frame.pack(); frame.setvisible(true); private void makemenubar(jframe frame) JMenuBar menubar = new JMenuBar(); frame.setjmenubar(menubar); JMenu menu = new JMenu("Actions"); menubar.add(menu); // end of CurrencyConverter

12 (13) Uppgift 6 Iteratorer kan som bekant användas för att navigera i olika datastrukturer, t.ex. listor. Antag att man vill utvidga sina iteratorer med ytterligare operationer. I java möter detta vissa problem eftersom de konkreta iteratorklasserna i standardbiblioteket inte är åtkomliga för arv. En lösning är att istället använda ett av designmönstren som behandlats i kursen. Med detta mönster kan man istället för att använda arv komplettera objekt med nya operationer. Exempel: I Iterator finns metoden next som returnerar nästa element i strukturen den är kopplad till, och därefter avancerar iteratorn till nästa element. En användbar metod som inte finns i Iterator skulle kunna vara chop(n) som returnerar en lista av de n följande elementen. chop kan ses som en generalisering av next eftersom next() är ekvivalent med chop(1).get(0), d.v.s. chop(1) returnerar en lista med ett element som plockas ut med get(0). Så här kan ett stycke applikationskod som använder chop se ut: List<Integer> l = new ArrayList<Integer>(); for ( int i = 0; i < 10; i++ ) l.add(i); ChopIterator<Integer> it = new ChopIterator<Integer>(l.iterator()); int i = 0; while ( i < 3 && it.hasnext() ) System.out.println(it.next()); i++; List<Integer> l2 = it.chop(5); for ( Integer x : l2 ) System.out.println(x); l2 = it.chop(100); for ( Integer x : l2 ) System.out.println(x); 0 1 2 3 4 5 6 7 8 9 Implementera klassen ChopIterator. Metoderna hasnext, next och remove skall fungera precis som i Iterator. Metoden chop skall ha följande egenskaper: public List<T> chop(int n) Returns a list consisting of the next n elements in the iteration. If there are fewer than n elements left, all remaining elements are returned. If n is less than or equal to zero, or the iteration has no more elements, an empty list is returned. Iterator finns i hjälpmedelsbilagan Java API. Välj själv vilken sorts lista som returneras från chop. Plats för lösningen finns på nästa sida. (10 p)

13 (13) public class ChopIterator<T> implements Iterator<T>