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. 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 FACIT. 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

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

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

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

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

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

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

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

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

DAT043 - Föreläsning 7

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

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 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

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

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

PROGRAMMERINGSTEKNIK TIN212

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

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

TENTAMEN OOP

Laboration 1 - Grunderna för OOP i Java

Tentamen. DD2385 Programutvecklingsteknik vt Tisdag 7 juni 2016 kl

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

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

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

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

Objektorientering: Lagring och livstid

Objektorientering: Lagring, räckvidd och livstid

Instuderingsuppgifter läsvecka 2

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

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

DAT043 Objektorienterad Programmering

LÖSNINGSFÖRSLAG TENTAMEN

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

TDDD78 Objektorientering: Lagring och livstid

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

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

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

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

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

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

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

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

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

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

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

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

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

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

Objektorienterad Programmering (TDDC77)

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

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

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Classes och Interfaces, Objects och References, Initialization

TENTAMEN OOP

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.

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

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

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

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

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

Klasshierarkier - repetition

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

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

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

TDDD78 Viktiga begrepp, del 2

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

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Laboration 2: Designmönster

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.

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

Laboration 2: Designmönster

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

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

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Transkript:

Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 Tentamen 2017 03 14, kl. 14.00 17.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 först en ursprunglig instans, som sedan kopieras varje gång man behöver nya objekt av typen. b) Man använder ett gemensamt gränssnitt för seriell åtkomst av innehållet ur olika typer av samlingar (Collections). c) Man samlar objekt i en trädstruktur, som möjliggör att man behandlar noder och grenar på samma sätt. d) Man gör så att bara en tråd i taget får åtkomst till en viss metod. e) Man delar upp sitt program i tydligt avgränsade delar, som ansvarar för visualisering, datalagring, respektive övergripande programstyrning. f) Man samlar en komplex struktur av flera olika klasser och metodanrop bakom en klass som har ett enkelt externt API. 2

2. I denna uppgift finns 4 UML-diagram. För varje diagram, ange vilket mönster (från listan nedan) som beskrivs. Observera att generiska namn används i stället för standardiserade namn. Varje korrekt namngivet diagram ger 1 p. (4 p) Factory Lock Flyweight Proxy Threadpool Iterator Composite Facade MVC Observer Builder Singleton Adapter Prototype a) ImplementationA +othermethod() <Interface> IntFac +somemethod() Client varb:intfac ImplementationB +somemethod() othermethod() b) AnAbstractClass ClientClass +dosomething() if(vara==null){ vara=new ConcClass() vara.dosomething() OtherConcClass vara:concclass +dosomething() ConcClass +dosomething() 3

c) <Interface> IntFac +dosomething() ConcreteClass +dosomething() AClass vara:list<intfac> varb:sometype +addtolist(intfac) +changeb() doforallinlist() varb.change() doforallinlist() for all IntFac in vara dosomething() d) Client vara:intfac AClass +create():intfac seta() <Interface> IntFac vara = AClass.create() +somemethod() ImplementationA ImplementationB ImplementationC +somemethod() +somemethod() +somemethod() 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 av ett tal 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) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu public class A{ private A(){ this(3); private A(int a){ System.out.println(a); b) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu public class B{ static private B myb; public static void main(string[] args){ myb = new B(5); private B(int b){ System.out.println(b); 1 För tydlighets skull anses här Java 8, som finns i skolans datasalar 5

c) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu public class C{ public static void main(string[] args){ C myc = new SubC(); myc.printc(5); public static void printc(int c){ System.out.println(c * Math.random()); static class SubC extends C{ public static void printc(int c){ System.out.println(c); 6

d) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu public class D implements Runnable{ static int d = 0; static final 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(d); public void run(){ while(d < 50000){ incd(); private void incd(){ synchronized(lock){ d++; 7

e) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu public class E extends Thread{ private static int e = 0; private final Object lock = new Object(); public static void main(string[] args) throws InterruptedException { E E1 = new E(); E E2 = new E(); E1.start(); E1.join(); E2.start(); E2.join(); System.out.println(e); public void run(){ dostuff(); 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. 4 korrekta svar ger 2p, 3 korrekta svar ger 1p, 2 eller färre korrekta svar ger 0 p (2 p) a) Ett fält som deklarerats som synchronized i ett objekt kommer automatiskt att uppdateras om motsvarande fält ändras i ett annat objekt av samma klass. b) En metod som deklarerats som final kan inte överskuggas i en ärvande klass. c) En klass som har deklarerats som abstract kan inte instansieras. d) Värdet på ett fält som har deklarerats som protected får inte ändras efter initialisering. 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) Fält som deklarerats som static kallas för klassvariabler. b) Alla klasser går att instansiera, eftersom de ärver från Object, som går att instansiera. c) Klassmetoder kan inte direkt skriva till instansvariabler. d) Gränssnitt kan bara innehålla klassmetoder. e) Instansmetoder kan inte direkt anropa klassmetoder. 6. För varje påstående om arv 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) Om ett gränssnitt ärver från flera andra gränssnitt så måste en implementerande klass implementera samtliga metoder från alla gränssnitt i arvshierarkin. b) Man får inte deklarera en klass som både abstract och final, för den måste antingen kunna instansieras eller ärvas. c) Om en variabel deklarerats med en superklass A kan man instansiera den med ett objekt av en klass B som ärver från A. d) Om en klass B ärver från en superklass A får B bara vara abstract om A också är det. e) Det är tillåtet för en klass att ärva från flera andra superklasser, under förutsättning att dessa superklasser bara innehåller abstrakta metoder. 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 polymorfism? Hur kan det användas för att förbättra prestanda vid programkörning? 8. Välj ett designmönster där man kan använda sig av antingen gränssnitt eller abstrakta klasser i implementationen. Beskriv hur respektive implementation kan göras, och förklara för- och nackdelar med respektive sätt. 9. En av dina nära vänner, som är mottagningsansvarig på en av KTH:s sektioner, har bett dig göra en app som de kan använda för att hålla koll på vad olika personer gör på campus under olika mottagningsaktiviteter. De vill att varje användare ska kunna använda programmet till att rapportera in var de befinner sig just nu, och att olika ansvariga ska kunna se denna information i en lista, så att de dels lätt kan hitta personer, se att alla positioner är korrekt bemannade, eller bara förbereda sig när någon grupp kommer närmare. Du ställer upp, men innan du hinner börja utveckla programmet kommer det en förfrågan från en annan sektion om de också kan få använda din app, men de vill dessutom kunna visualisera all information på en grafisk karta. Dessutom vore det bra om man kunde ta bilder och skicka dessa så att de ansvariga kan se hur det ser ut på en viss plats just nu. Du svarar att du inte har tid att utveckla mer än den nödvändigaste funktionaliteten för den första vännens sektion, men att du gärna delar med dig av koden, och i ett svagt ögonblick skryter du om att din kod är väldigt lätt att bygga vidare på, vad man än vill göra. Beskriv hur du strukturerar programmet, hur olika delar kommunicerar med varandra, och hur du ser till att alla behov ovan tillgodoses. Namnge alla ingående designmönster korrekt. 10

10. En vän har hört av sig med ett problem som hen vill ha din hjälp med. Hen har läst på om parallellisering och försökt göra ett bra program enligt konstens alla regler. Hen har skrivit ett multitrådat program, där en stor sammansatt uppgift har delats upp i små oberoende deluppgifter, som hanteras av varsin Runnable. Dessa kör på en Threadpool, och lås används för att undvika alla former av deadlock. Programmet fungerar förvisso, men det går lika långsamt när hen har åtta trådar i poolen som vid en tråd, trots att processorn har åtta kärnor. Vad kan problemet vara, och vad bör hen försöka göra för att få ut bättre effekt av sin parallellisering? 11. Jämför de två designmönstren flyweight och virtual proxy. Vilka likheter och skillnader har de? Vad används de till, och hur? Hur kan man implementera dem? 11