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. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

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

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

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

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

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

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

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

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

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

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

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

DAT043 Objektorienterad Programmering

PROGRAMMERINGSTEKNIK TIN212

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.

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

Tentamen. DD2385 Programutvecklingsteknik vt Tisdag 7 juni 2016 kl

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

OOP Tentamen

Laboration 2: Designmönster

Generisk klass med typparameter Inre klass - ListIterator

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Laboration 2: Designmönster

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

Designmönster/Design patterns

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

Tentamen Programmering fortsättningskurs DIT950

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

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

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

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

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

LÖSNINGSFÖRSLAG TENTAMEN

TENTAMEN OOP

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

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

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

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

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 Objekt-orienterad programmering i Java, 5p distanskurs

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

Classes och Interfaces, Objects och References, Initialization

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

Tentamen i Objektorienterad modellering och design Helsingborg

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

TENTAMEN OOP

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

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Föreläsning 1 Datastrukturer (DAT037)

Tentamen i Objektorienterad modellering och design Helsingborg

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

OOP Omtenta

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Information. Computer

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

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

Tentamen i Objektorienterad modellering och design

Tentamen, EDAA10 Programmering i Java

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

Objektorienterad Programkonstruktion. Föreläsning dec 2015

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

Lösningar till tentamen i EDAF25

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

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

Föreläsning 15: Repetition DVGA02

Laborationer, moment 4 5

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

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

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Algoritmer. Två gränssnitt

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

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

Tentamen, Algoritmer och datastrukturer

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

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

Design Patterns. En kort introduktion

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

OOP Tentamen

Laborationer, moment 4 5

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

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

Tentamen i Objektorienterad programmering

Transkript:

Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 Tentamen 2014 03 20, kl. 10.00-13.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del I ska besvaras på för ändamålet lämnad plats i tentamenslydelsen. Frågorna i del II besvaras på separat papper. Använd gärna både fram- och baksida, men behandla högst en uppgift per sida. 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 5p i del II Betyg C: 20p i del I och 10p i del II Betyg B: 20p i del I och 15p i del II Betyg A: 20p i del I och 20p i del II Ansvarig: Christian Smith (ccs@kth.se) Lycka till! 1

Del I - flervalsfrågor 1. I denna uppgift finns 5 uppsättningar UML-diagram. Generiska namn används i stället för de mer vanliga namn som avslöjar vilket mönster det är. För varje diagram, ange det designmönster som bäst beskriver det. Välj från listan nedan. Varje korrekt angivet designmönster ger 1 p. (5 p) MVC Singleton Adapter Proxy Composite Flyweight Threadpool Lock Observer Factory Builder Prototype Facade Socket a) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu AClass +create():intfac <Interface> IntFac Client vara:aclass varb:intfac setb() +somemethod() varb = vara.create() ImplementationA ImplementationB ImplementationC +somemethod() +somemethod() +somemethod() 2

b) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu SomeClass par:params +setpar() +updatepar() +changepar() +get():aclass Client vara:someclass varb:aclass return new AClass(par) AClass +AClass(Params) setb() vara=new SomClass() vara.setpar(); vara.changepar(); vara.updatepar(); varb = vara.get(); 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 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 c) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu ClientA ClientB ClientC SomeClass AnotherClass ObscureClass PrettyClass vara:someclass varb:anotherclass varc:obscureclass vard:yetanotherclass +DoStuff() vara.somemethod() varb.dothings(vara) VarA.someOtherMethod() varc.docrazystuff(vara,varb) vard.donttrythisathome(varb) varb.add(vara,varc,vard) vard.goodmethod() vard.badmethod(varc) vard.uglymethod(vard) YetAnotherClass 3

d) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu AnAbstractClass ClientClass +dosomething() if(vara==null){ vara=new ConcClass() vara.dosomething() OtherConcClass vara:concclass +dosomething() ConcClass +dosomething() e) bu bu bu bu bu bu bu bu bu bu bu bu bu bu bu SomeClass +dosomething() ClientClass vara:someclass UsefulClass +dogreatthings() SomeSubClass varb:usefulclass +dosomething() varb.dogreatthings() 4

2. Nedan följer 3 exempel på Java-program. För varje program, ange om programmet ger en korrekt implementation av en singleton. Varje korrekt analyserat program ger 1 p. (3 p). a) public class SingletonA{ private static SingletonA theinstance = new SingletonA(); private SingletonA(){ public static SingletonA getinstance(){ return theinstance; b) public class SingletonB{ private static SingletonB theinstance = null; private SingletonB(){ if(theinstance == null){ theinstance = new SingletonB(); public static SingletonB getinstance(){ return new SingletonB(); c) public class SingletonC{ private static SingletonC theinstance = null; private SingletonC(){ public static SingletonC getinstance(){ if(theinstance == null){ theinstance = new SingletonC(); return theinstance; 5

3. Nedan följer 3 exempel på Java-program. För varje program, ange om programmet ger fungerande trådsäker variabelåtkomst. Varje korrekt analyserat program ger 1 p. (3 p). a) public class ThreadSafeA{ private static volatile int a = 0; public void inca(){ a++; public void deca(){ a--; public int geta(){ return a; b) public class ThreadSafeB{ private static int a = 0; public synchronized void inca(){ a++; public synchronized void deca(){ a--; public synchronized int geta(){ return a; 6

c) public class ThreadSafeC{ private static int a = 0; private static Object lock = new Object(); public void inca(){ synchronized(lock){ a++; public void deca(){ synchronized(lock){ a--; public int geta(){ return a; 7

4. För varje påstående om text och strängar 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 0 p (4 p) a) String är en av Javas inbyggda primitiva datatyper. b) En fördel med att använda strängkonkatenering med + -operatorn är att det ger snabbare kod om man hanterar långa strängar med många sammanslagningar. c) En Scanner är en iterator för String-objekt. d) Ett String-objekt i Java går inte att ändra i efterhand, dvs den är vad man kallar immutable. e) Eftersom en String är implementerad som en array av char så kan den bara innehålla text kodad som ascii. 5. För varje påstående om XML, 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) XML är ett utrymmeseffektivt sätt att lagra komplexa datastrukturer, som t.ex mätdataloggar från experiment. b) XML passar bra för att lagra data med en explicit trädstruktur. c) En anledning till att lagra data i XML-format kan vara att man vill att det ska vara lättfattligt för en mänsklig läsare. d) Alla XML-taggar måste alltid förekomma i par, med en start-tag och en slut-tag. 6. För varje påstående om designmönster nedan, 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 0 p (4 p) a) Det fämsta syftet med Flyweight är att minska minnesanvändning. b) Composite används för att minska overhead i parallella program. c) Polymorfism är ett problem som man ofta kan undvika med Threadpool. d) Ett vanligt mål med att använda Observer är att göra programexekveringen snabbare. e) MVC är ofta ett lämpligt mönster när man gör program med grafiska användargränssnitt. 8

7. För varje programlistning nedan, ange om koden går att kompilera eller ej. (4 p) a) public class ParentClass{ private int a = 0; public class SubClass extends ParentClass{ private int b; public SubClass(){ b=a; b) public class ParentClass{ public static void main(string[] args){ SubClass sc = new ParentClass(); private class SubClass extends ParentClass{ c) public class ParentClass{ public static void main(string[] args){ IntFace ifce = new SubClass(); private static class SubClass extends ParentClass implements IntFace{ private interface IntFace{ 9

d) public final class ParentClass{ private ParentClass(){ public static void main(string[] args){ ParentClass pc = new ParentClass(); SubClass sc = pc.new SubClass(); private class SubClass extends ParentClass{ 10

Del II - fördjupningsfrågor Följande uppgifter besvaras på separat papper. 8. a) Vad menas med Lös koppling? Är det bra eller dåligt? Varför? (2 p) b) Ge exempel på hur man kan koda för att åstadkomma respektive undvika lös koppling. (2 p) 9. Förklara skillnaden mellan abstrakta klasser och gränssnitt, och när man bör använda vilken. (2 p) 10. Förklara vad en Threadpool är, och hur och varför man använder den. (2 p) 11. Nedan följer fem olika designmönster. Välj ut tre olika kombinationer av två mönster ur denna lista, och beskriv hur dessa mönsterpar kan kombineras med varandra, och varför man skulle vilja göra det. Notera att det ska handla om en direkt kombination av mönster, inte bara en applikation som råkar innehålla båda mönstren. (6 p) Builder Factory Singleton Lock Proxy 12. Du har bestämt dig för att bli rik och berömd och tänker åstadkomma detta genom att ge dig in i spelbranschen och börja producera enkla billiga spel för olika plattformar som stöder Java. Din marknadsresearch säger dig att det är ganska små skillnader mellan framgångsrika och misslyckade spel, men att slumpen verkar spela stor roll. För att komma runt detta tänkte du börja med att programmera ett praktiskt ramverk som du kan återanvända för att göra olika spel, så att du enkelt kan producera ett stort antal olika spel med förhoppningen att något av dem slår igenom. För att minimera risken att någon stämmer dig på alla dina miljoner när framgången väl kommer, har du beslutat att inte använda några tredjepartsbibliotek. Du tänker dig att alla dina spel ska vara enkla och actionbetonade, och ska innehålla ett antal olika figurer och föremål som kan interagera med varandra enligt olika regler, i stil med Angry Birds, Cut The Rope, Flappy Bird, Worms eller liknande succéspel. Beskriv hur du konstruerar ditt ramverk för att göra dina enkla spel i, så att du får en bra arkitektur med så mycket återandvändbar och lättmodifierad kod som möjligt. Vilka designmönster använder du, hur, och varför? (8 p) 13. Du hjälper en vän att skriva ett enkelt fotoredigeringsprogram i Java, och enligt din rekommendation använder hen färdiga Swingkomponenter till användargränssnittet. I ritprogrammet kan man applicera olika filter på sin bild genom att trycka på någon av ett antal olika knappar. Vissa filter kan dock ta väldigt lång tid att köra, och din vän lägger för säkerhets skull till en avbryt -knapp. Tyvärr fungerar det inte som hen hade tänkt sig, eftersom det inte går att trycka på någon knapp, inklusive avbryt, medan filterkoden körs, utan resultatet av knapptryckningarna kommer först när filtreringen är färdig. Din vän undrar vad som händer och hur hen ska fixa det. Ge ett hjälpsamt svar! (3 p) 11