Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Relevanta dokument
Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Tentamen. DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl Hjälpmedel: penna, suddgummi, linjal

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

Tentamen. DD2385 Programutvecklingsteknik vt 2011 Tisdagen den 24 maj 2011 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

PROGRAMMERINGSTEKNIK TIN212

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

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

TENTAMEN OOP

Tentamen. DD2385 Programutvecklingsteknik vt Tisdag 7 juni 2016 kl

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

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 i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

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

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

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

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

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

OOP Tentamen

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

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

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

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

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

OOP Tenta

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

TENTAMEN OOP

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Laboration 1 - Grunderna för OOP i Java

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

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

DAT043 - Föreläsning 7

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

Objektorienterad Programmering (TDDC77)

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

ID1004 Laboration 4, November 2012

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

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

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

Concurrency Saker händer samtidigt. Process En instans av ett program

Objektorienterad programmering i Java

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

Tentamen, EDAA10 Programmering i Java

DAT043 Objektorienterad Programmering

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

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

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

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

Classes och Interfaces, Objects och References, Initialization

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

LÖSNINGSFÖRSLAG TENTAMEN

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

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

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Parallellism, återblick

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

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

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

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

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

Tentamen FYTA11 Javaprogrammering

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

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

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

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

TDDD78 Viktiga begrepp, del 2

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

OOP Tentamen

Tentamen i Programmeringsteknik I, ES,

JAVA Mer om klasser och objektorientering

OOP Omtenta

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Transkript:

Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 Tentamen 2017 06 10, kl. 9.00 12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna besvaras på separat papper. Svaren till del I kan skrivas på samma sida om de får plats, men behandla högst en uppgift per sida för del II. Kom ihåg att skriva namn och personnummer på alla inlämnade blad. Skriv tydligt! Betygsgränser: Betyg FX: 17p i del I Betyg E: 20p i del I Betyg D: 20p i del I och betyg D på del II Betyg C: 20p i del I och betyg C på del II Betyg B: 20p i del I och betyg B på del II Betyg A: 20p i del I och betyg A på del II Eventuella bonuspoäng adderas till resultatet i del I. För betyg på del II, se instruktionerna till del II. Ansvarig: Christian Smith (ccs@kth.se) Lycka till! 1

Del I - flervalsfrågor 1. I denna uppgift följer beskrivningar av 6 olika designmönster. För varje beskrivning, ange namnet på mönstret som bäst matchar beskrivningen (välj ur listan nedan). Varje korrekt angett mönster ger 1 p. (6 p) Factory Lock Flyweight Proxy Threadpool Iterator Composite Facade MVC Observer Builder Singleton Adapter Prototype a) Man skapar en ny klass som låter en befintlig klass använda en annan, trots att de inte är explicit kompatibla. b) Man har en klass A med samma API som en klass B, så att instanser av klass A används i stället för instanser av B, som av någon anledning inte är direkt tillgängliga. c) Man gör så att en resurs, t.ex en metod, bara kan användas av en tråd i taget. d) Man skapar nya objekt med hjälp av en metod som väljer vilken typ av objekt som ska returneras utifrån argument eller yttre omständigheter, i stället för att anropa konstruktorn direkt. e) Man skriver en ny klass A med ett enkelt API, som internt samlar en komplex struktur med många klasser och anrop, som till största delen döljs för användare av A. f) Man har flera likartade objekt, och lagrar gemensama data på en extern plats för att spara minne. 2

A +a1 : int ~a2 : int a3 : B +a4 : C B +dob(int):int C D +c1 : int +d : int c2 : int +doc1(int):int doc2(int):int +dob(int):int +dod1(int):int dod2(int):int 2. Nedan följer ett antal olika versioner av en main()-metod man skulle kunna skriva i klassen A i UML-diagrammet ovan. För varje version, ange om den kompilerar, eller om det skulle ge upphov till ett kompileringsfel. Alla klasserna finns i samma paket, och ligger i samma katalog. Varje korrekt utvärderad main()-metod ger 0.5 p. (4 p) a) public static void main(string[] args){ a3 = new D(); a2 = a3.dob(1); b) public static void main(string[] args){ D myd = new D(); a2 = myd.dod1(1); c) public static void main(string[] args){ B myd = new D(); a2 = myd.dod1(1); 3

d) public static void main(string[] args){ B myb = new B(); myd.dob(1); e) public static void main(string[] args){ C myc = new C(); D myd = new D(); a1 = myc.doc1(myd.dod1(1)); f) public static void main(string[] args){ a2 = 1; a3 = new C(); a2 = a3.doc2(a2); g) public static void main(string[] args){ B myb = new C(); D myd = (D)myB; C myc = (C)myD; myc.doc2(1); h) public static void main(string[] args){ A mya = new A(); mya.a4 = new C(); mya.a1 = mya.a4.dob(1); mya.a3 = mya.a4; 4

3. Här följer 5 st kodlistningar i Java 1. För varje kodlistning, ange om den kommer att fungera, ge kompileringsfel eller ge fel när man kör den. Kod anses fungera omm den ger en deterministisk utskrift vid körning. Anta att varje klass X finns i en fil som heter X.java, och kompileras med kommandot javac X.java, och körs med java X. (5 p) a) public class A{ public static void main(string[] args){ System.out.println(new A()); public String tostring(){ return "Math.random()"; b) public class B{ private static double b = 0.0; public static void main(string[] args){ B b = new B(); System.out.println(b); public String tostring(){ return Double.toString(Math.random()); 1 För tydlighets skull anses här Java 8, som finns i skolans datasalar 5

c) public class C{ static C myc = new C(); public static void main(string[] args){ // Do nothing! public C(){ System.out.println("C"); 6

d) public class D implements Runnable{ private int d = 0; static Object lock = new Object(); public static void main(string[] args)throws InterruptedException{ Thread th1 = new Thread(new D()); Thread th2 = new Thread(new D()); th1.start(); th2.start(); th1.join(); th2.join(); System.out.println(new D().d); public void run(){ while(d < 50000){ incd(); private void incd(){ synchronized(lock){ d++; 7

e) public class E extends Thread{ public int e = 0; public Object lock; public E E1; public E E2; public static void main(string[] args) throws InterruptedException { E1 = new E(new Object()); E2 = new E(new Object()); E1.start(); E1.join(); E2.start(); E2.join(); System.out.println(e); public void run(){ dostuff(); public E(Object o){ lock = o; synchronized private void dostuff(){ while(++e < 50000){ synchronized(lock){ e += e++; 8

4. För varje påstående om nyckelord i Java, ange om det är sant eller falskt. 5 korrekta svar ger 4p, 4 korrekta svar ger 2p, 3 korrekta svar ger 1p, 2 eller färre korrekta svar ger 0p. (4 p) a) Ett fält som deklarerats som static kommer automatiskt att uppdateras i alla objekt av en viss klass om dess värde ändras i något objekt av samma klass. b) En metod som deklarerats som abstract kan inte överskuggas i en ärvande klass. c) En klass som har deklarerats som final kan inte instansieras. d) En metod som deklarerats som protected kan inte överskuggas i en ärvande klass. e) Ett fält som deklarerats som public kan ändras av metoder från andra klasser. 5. För varje påstående, ange om det är sant eller falskt. 5 korrekta svar ger 4p, 4 korrekta svar ger 2p, 3 korrekta svar ger 1p, 2 eller färre korrekta svar ger 0p. (4 p) a) Om man försöker starta fler trådar än det finns processorkärnor uppstår livelock. b) Ett sätt att undvika deadlock är att bara anropa metoder som delkarerats som synchronized. c) I Java kan olika trådar dela minne, och använda samma objekt. d) Thread interference kan uppstå om två trådar arbetar med samma resurs samtidigt. e) Starvation är när man skapar för många trådar så att arbetsminnet tar slut. 6. För varje påstående om UML, ange om det är sant eller falskt. 4 korrekta svar ger 2p, 3 korrekta svar ger 1p, 2 eller färre korrekta svar ger 0p. (2 p) a) Klassdiagram får inte innehålla gränssnitt. b) Alla relationer i klassdiagram måste alltid ha en riktning. c) Eftersom samma piltyper används för att visa relation till en superklass som till ett implementerat gränssnitt, måste gränssnitt alltid märkas med <interface> för att undvika missförstånd. d) Privata fält märks med en tilde (~) i klassdiagram. 9

Del II - fördjupningsfrågor Följande 5 frågor kan betygsättas med antingen A eller C. Betyget A ges då allt som efterfrågas i uppgiften besvaras korrekt, med en tillräcklig motivering. Mindre detaljfel som inte påverkar helheten kan accepteras. Betyget C ges då någon del av uppgiften inte besvarats korrekt eller getts tillräcklig motivering, eller om texten utöver efterfrågat svar innehåller betydande mängd information som inte efterfrågats (dvs. man får inte dubbelgardera ). Om betydande del av efterfrågat svar saknas eller är otillräckligt motiverat ges inget betyg. Följande resultat krävs för att uppnå respektive betyg på denna del: Betyg D: Uppnått lägst betyg C på minst 2 uppgifter. Betyg C: Uppnått lägst betyg C på minst 4 uppgifter. Betyg B: Uppnått betyg A på minst 2 uppgifter och C på alla resterande. Betyg A: Uppnått betyg A på minst 4 uppgifter och C på eventuell resterande. Besvara varje uppgift på ett separat papper. 7. Vad är en Threadpool? Beskriv hur och varför den används, och hur den kan implementeras. 8. Vad är en Remote Proxy? Beskriv hur och varför den används, och hur den kan implementeras. 9. Vad är en klassmetod, och hur skiljer den sig från en instansmetod? När bör man använda klassmetoder? Varför? 10. Du har märkt att väldigt många av dina programmeringsprojekt kräver att man sparar loggar av någon sort. Det kan röra sig om resultat från simulerade experiment (stora serier av numeriska data), chat-konservationer (texter med tillhörande metadata, som tid, person, samtalspartners, etc), felloggar (nogranna tekniska beskrivningar av olika programtillstånd så att man kan spåra och rätta till fel), mm. I stället för att uppfinna hjulet på nytt varje gång bestämmer du dig för att skriva ett generiskt loggbibliotek. Beskriv hur du skulle gå till väga för att skriva ett lättanvänt loggbibliotek som kan hantera alla möjliga typer av loggar som kan tänkas kunna uppstå i framtida projekt. Namnge alla ingående designmönster korrekt och motivera dina designval väl. 10

11. En vän sommarjobbar på ett hemligt programmeringsprojekt, och söker din hjälp. Hen har skrivit ett stort och avancerat programpaket, som när det ska köras på målplattformen visar sig köra alldeles för långsamt för att vara användbart. Det är dock fortfarande några veckor kvar att fixa till problemen innan sommaren är slut. Du föreslår att hen ska använda profileringen i en IDE, t.ex Netbeans, för att hitta flaskhalsar. Tyvärr finns det inga profilerare installerade på systemet som används, och vännen får varken installera ny programvara på jobbet, eller ta med sig koden utanför arbetsplatsen. Beskriv hur hen ska gå till väga för att lösa sitt problem inom den befintliga utvecklingsmiljön (kodeditor och kompilator). Beskriv möjliga fallgropar, och ge förslag till hur de kan undvikas. 11