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

Relevanta dokument
CHALMERS TENTAMEN. 2013/2014, lp 2 DAT050. Uno Holmer. Java API (bifogas tesen) Uno Holmer tel besöker tentamen ca kl samt ca 11.

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

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod 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).

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

DAI2 (TIDAL) + I2 (TKIEK)

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN OOP

Arv och polymorfism i Java

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

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

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad.

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

TENTAMEN OOP

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

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

TENTAMEN: Objektorienterad programmering. Läs detta! Börja varje uppgift på ett nytt blad (skriv inga lösningar i tesen!).

Lösningsförslag till tentamen

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

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Malmö högskola 2007/2008 Teknik och samhälle

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

Föreläsning 13 Innehåll

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

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

TDDD78 Viktiga begrepp, del 2

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

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

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

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

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

2D1342 Programkonstruktion för F1, ht 2006

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

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

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

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

Laboration 1 - Grunderna för OOP i Java

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

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

Malmö högskola 2008/2009 CTS

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

TENTAMEN OOP

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

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

Lösningsförslag tentamen FYTA11 Java

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

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

Objektorienterad programmering D2

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Föreläsning 5-6 Innehåll

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen, EDAA10 Programmering i Java

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

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

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

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

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

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

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

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

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Tentamen i Programmeringsteknik I

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Lösningsförslag till tentamen

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540) Ansvarig: Jan Skansholm, tel eller

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Kopiering av objekt i Java

Objektsamlingar i Java

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

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

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

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

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

Laboration 1: Figurer i hierarki

DAT043 Objektorienterad Programmering

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

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

Transkript:

1 (9) TENTAMEN: Objektorienterad programmering Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad. Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen. Ordna bladen i uppgiftsordning. Skriv din tentamenskod 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 version, och vara indenterad och renskriven. 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 metoder klasser etc. från tidigare deluppgifter, även om du inte löst dessa. Lycka till!

2 (9) 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 delfrågorna 1-5 på ett blad. 1. Vilken av clone-metoderna kopierar B på korrekt sätt? public class A { public A clone() { public class B { private int x; private A a; public B clone() { se nedan a) public B clone() { return (B)super.clone(); c) public B clone() { B tmp = new B(); tmp.x = x; tmp.a = a.clone(); return tmp; b) public B clone() { B tmp = (B)super.clone(); tmp.a = a.clone(); return tmp; d) public B clone() { B tmp = this.clone(); tmp.a = a.clone(); return tmp; 2. Vilket påstående om klasserna nedan stämmer bäst? public class Person { private String name; private ContactInfo contact; public class ContactInfo { private String address; private String phone; private String email; private List<Person> friends; public int getnooffriends() { public Person getfriend(int i) { a. Klasserna har hög kohesion och kopplingen mellan klasserna är hög. b. Klasserna har låg kohesion och kopplingen mellan klasserna är låg. c. Klasserna har hög kohesion och kopplingen mellan klasserna är låg. d. Klasserna har låg kohesion och kopplingen mellan klasserna är hög.

3 (9) 3. En av deklarationerna ger ett typfel, vilken? a. List<LinkedList> l = new ArrayList<LinkedList>(); b. ArrayList<List> l = new ArrayList<List>(); c. ArrayList<List> l = new ArrayList<LinkedList>(); d. List<List> l = new ArrayList<List>(); 4. Givet klassen Num public class Num { private int x; public Num() { x = 0; public void set(int x) { this.x = x; public int get() { return x; vad skrivs ut om detta exekveras: ArrayList<Num> list = new ArrayList<Num>(); Num n = new Num(); for (int j = 0; j < 3; j++) list.add(n); int k = 1; for (Num x : list) x.set(k++); for (Num x : list) System.out.println(x.get()); a. 0 0 0 b. 3 3 3 c. 1 2 3 d. 3 2 1 5. Betrakta följande javapaket och klasser: package module1; public class C1 { private int x; protected int y; public int z; package module2; import module1.*; public class C4 extends C1 { public class C5 { public class C2 extends C1 { public class C3 { Låt C i (v 1,,v n ) beteckna att variablerna v 1,,v n är synliga i klassen C i. Vilket av alternativen beskriver synligheten hos variablerna x, y och z i klasserna ovan? a. C2(y,z), C3(z), C4(y,z), C5(z) b. C2(y,z), C3(z), C4(z), C5(z) c. C2(y,z), C3(y,z), C4(y,z), C5(z) d. C2(y,z), C3(y,z), C4(z), C5(z) (10 p)

4 (9) Uppgift 2 Följande klass kan användas för att lagra intresseanmälningar för mötestider: public class Bokningssystem { private public Bokningssystem() { public void boka(string tid,string namn) { public void listaalla() { För att boka en person för en mötestid anger man en tidpunkt och personens namn. Tidpunkter anges som strängar på formen åååå_dagnr_hh:mm, t.ex. 2006_123_08:30. Om tidpunkten t1 kommer före t2 så kommer t1 före t2 i bokstavsordning, och vice versa, om de representeras på ovanstående sätt. Skriv färdigt klassen. Använd en lämplig struktur för att associera tidpunkter med intresseanmälningar och en lämplig struktur för att lagra namnen. Metoden listaalla skall ge en utskrift på formen 2006_137_10:30 Kalle, Ville, Ylva 2006_137_11:40 Svea 2006_138_14:00 Lisa 2006_263_20:15 Niklas Tiderna skall listas i tidsordning. // bokstavsordning (12 p)

5 (9) Uppgift 3 Betrakta följande klasser public class Base { private int a; protected int b; public class Sub1 extends Base { private int c; protected int d; public void func( Base obj ) { obj.a = 1; obj.b = 2; obj.c = 3; obj.d = 4; obj.e = 5; obj.f = 6; public class Sub2 extends Base { private int e; protected int f; Om vi definierar Sub1 sub1 = new Sub1(); sub1.func( new Sub1() ); sub1.func( new Sub2() ); Vilka av variablerna a f är synliga i de två olika anropen av func? Vilka ger kompileringsfel? Varför? För full poäng krävs en ordentlig motivering av svaret. (8 p)

6 (9) Uppgift 4 a) Konstruera en klass som kan användas som en timer för tidmätning. Följande publika metoder skall finnas i klassen: public void start() Public void stop() Public void reset() Public long getvalue() Startar tidmätning. Stoppar tidmätning. Nollställer timern. Returnerar ackumulerad tid i millisekunder. En timer kan vara vilande eller gående. En timer kan ackumulera tid. Man kan alltså addera gångtid för flera mätperioder genom att starta och stoppa den omväxlande. Detta fortgår tills timern nollställs i viloläge. Timern skall uppfylla följande krav: En nyskapad timer är nollställd och vilande. Anrop av getvalue på en nollställd vilande timer skall returnera 0. Efter anropet av start på en vilande timer blir timern gående. Anrop av metoderna start och reset har ingen effekt på en gående timer. Anrop av stop har ingen effekt på en vilande timer. Efter anrop av reset på en vilande timer skall timern vara nollställd. Tidsackumulering: Vid ett anrop av stop på en gående timer blir timern vilande. Om den senaste gångperioden varat tiden t och getvalue skulle returnerat t om den anropats före det senaste anropet av start, så skall getvalue nu returnera t + t. Om getvalue anropas på en gående timer skall den returnera samma värde som om den anropats före det senaste anropet av start. Tiden för den senaste gångperioden adderas alltså inte förrän timern stoppas. Exempel: (returvärdet anges i kommentaren) Timer t = new Timer(); t.getvalue(); // 0 t.start(); t.stop(); t.getvalue(); // 100 t.start(); t.getvalue(); // 100 t.stop(); t.getvalue(); // 300 t.reset(); t.getvalue(); // 0 0 100 200 300 400 500 600 tidpunkt för anropet (ms) Implementera klassen Timer. Klassens instansvariabler skall vara privata.

7 (9) Ett enkelt sätt att mäta tid i Java är att använda klassen Date. Exempel: Date d = new Date(); d.gettime() returnerar tiden i millisekunder sedan 1970-01-01 00:00:00 Tidskillnad kan mätas på följande sätt: Date d = new Date(); long start = d.gettime(); // det går lite tid d = new Date(); long tidskillnad = d.gettime() start; System.out.println( Det tog + tidskillnad + ms ); Tips: Använd en boolesk instansvariabel i timerklassen för att hålla reda på om timern går eller inte. (10 p) b) Definiera en subklass ClockTimer till Timer som fungerar precis som Timer med tillägg av följande tre metoder: Exempel: public int gethours() public int getminutes() public int getseconds() ClockTimer ct = new ClockTimer(); ct.start(); det går 9978000 ms returnerar timdelen av timerns tid returnerar minutdelen av timerns tid returnerar sekunddelen av timerns tid ct.stop(); System.out.println( ct.getvalue() ); 9978000 System.out.println( ct.gethours() ); 2 System.out.println( ct.getminutes() ); 46 System.out.println( ct.getseconds() ); 18 Bivillkor: 0 x.gethours()< 24 0 x.getminutes()< 60 0 x.getseconds()< 60 (6 p)

8 (9) Uppgift 5 I en av kursens laborationer arbetade vi med olika klasser för geometriska figurer, däribland Group för att representera sammansatta figurer. Uppgiften går ut på att konstruera en likhetsmetod för sammansatta figurer. Basklass för alla figurklasserna är Point. Vi bortser från alla detaljer som saknar relevans för uppgiften. public abstract class Point { public int getxposition() public int getyposition() public abstract boolean equals(object other); // Ny Klassen Group har i korthet följande utseende: public class Group extends Point { private ArrayList<Point> subpictures; public boolean equals(object other) { // Ny Vi skall tillämpa principen att om a.equals(b) returnerar true för figurerna a och b så skall de se likadana ut när de ritas upp. Att de är lika innebär dock inte att de måste finnas på samma plats. Enkla figurer, t.ex. cirklar, kvadrater eller trianglar är lika om de har samma dimensioner och färg. För figurgrupper blir det lite mer komplicerat. Två grupper är lika om de har lika många delfigurer och dessa är parvis lika, men det räcker inte. Delfigurernas inbördes geometriska orientering måste också vara lika. I exemplet nedan innebär det att vektorerna u 1 = v 1, u 2 = v 2 och u 3 = v 3. En följd av sådana vektorer skall vi kalla en promenad (walk) genom gruppen. Ex. (v 1,v 2,v 3 ) och (u 1,u 2,u 3 ). u 1 u 2 u 3 v 1 v 2 v 3 För representation av vektorer finns den färdiga klassen (detaljer utelämnade): public class Vector { public Vector(int x,int y) public int getx() public int gety() public boolean equals(object other) a) Skriv en metod walk som givet en lista av punkter (Point) returnerar en lista av vektorer. Tips: Skriv en privat hjälpmetod diff som returnerar skillnadsvektorn mellan två punkter. (7 p) forts.

9 (9) b) Inför metoden public boolean equals(object other) i Group. Om objekten a och b båda är av typen Group så skall a.equals(b) returnera true om grupperna som a och b representerar är lika enligt principerna ovan, annars false. Tips: Utnyttja att listklassen har en equals-metod. (7 p)