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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

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

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

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

Objektorienterad Programkonstruktion. Föreläsning dec 2015

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

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

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

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

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

Tentamen. DD2385 Programutvecklingsteknik vt Tisdag 7 juni 2016 kl

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

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

PROGRAMMERINGSTEKNIK TIN212

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

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

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

DAT043 Objektorienterad Programmering

DAT043 - Föreläsning 7

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

OOP Tenta

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

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

OOP Omtenta

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

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 OOP

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

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

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

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

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

LÖSNINGSFÖRSLAG TENTAMEN

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

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

Tentamen i Objektorienterad modellering och design Helsingborg

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

Tentamen i Objektorienterad modellering och design

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

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

TENTAMEN OOP

Laboration 1 - Grunderna för OOP i Java

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Instuderingsuppgifter läsvecka 2

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

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.

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

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

2D1339 Programkonstruktion för F1, ht 2004

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

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

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.

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

JAVA Mer om klasser och objektorientering

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

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

Klasshierarkier - repetition

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

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Tentamen. DD2385 Programutvecklingsteknik vt Torsdagen den 27 maj 2010 kl Hjälpmedel: penna, suddgummi, linjal

Objektorienterad Programmering (TDDC77)

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

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

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Classes och Interfaces, Objects och References, Initialization

Objektorientering: Lagring, räckvidd och livstid

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

Tentamen, EDAA10 Programmering i Java

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

Transkript:

Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 Tentamen 2016 03 18, kl. 14.00 17.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 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 följer beskrivningar av 6 olika problem du kan träffa på under programutveckling. För varje problem, ange vilket designmönster från listan nedan som är bäst lämpat att lösa det. 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) Ditt program skapar väldigt många objekt som är till stora delar identiska och som tar upp onödigt mycket minnesutrymme. b) Ditt program skapar väldigt många objekt som åtminstone till en början är i princip identiska, och som behöver väldigt resurskrävande beräkningar för att skapas. c) Du ska implementera en ny klass, men tvingas välja om du skall använda en intern datastruktur som är för otymplig för att kunna skapa nya objekt effektivt, eller en som gör att det går väldigt långsamt att använda de färdiga objekten. d) Ditt program har flera trådar som samtidigt använder samma resurser och orsakar trådinterferens. e) Du håller på att utveckla ett program som kommer att ha mycket interaktion med användare, men du tvivlar på att ditt nuvarande GUI är bra som det är, utan tror att man kommer att vilja byta ut det mot ett annat vid ett senare tillfälle. f) Du har precis hittat på en helt ny datastruktur för att effektivt lagra en viss typ av objekt. Tyvärr fungerar inte din nya datalagringsklass med befintliga klassers metoder för att stega sig igenom alla de objekt den innehåller. 2

2. I denna uppgift finns 3 kodlistningar. För varje kodlistning, ange vilket mönster (från listan nedan) som koden beskriver. Observera att generiska namn används i stället för standardiserade namn, samt att koden kan vara förenklad av utrymmesskäl, och går inte nödvändigtvis att kompilera. Varje korrekt namngiven kodlistning ger 1 p. (3 p) Factory Lock Flyweight Proxy Threadpool Iterator Composite Facade MVC Observer Builder Singleton Adapter Prototype a) public class A{ public static GenericType getobject(int a){ if(decisionfunction(a)){ return new SpecificType1(); else{ return new SpecificType2(); b) public class B{ private int a = 0; public synchronized void seta(int newa){ a = newa; public synchronized int geta(){ return a; public synchronized void inca(int b){ a += b; 3

c) public class C{ private static final HeavyType myheavy = new HeavyType(); private int a; public C(int seta){ a = seta; 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. (4 p) a) public class A{ public static void main(string[] args){ A mya = new A(); private A(){ this(5); private A(int a){ System.out.println(a); b) public class B{ 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) public class C{ public static void main(string[] args){ C myc = new C(){ public void printc(int c){ System.out.println(c); ; myc.printc(5); public void printc(int c){ System.out.println(c * Math.random()); 6

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

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

4. Nedan följer ett UML-diagram och ett antal olika kodlistningar. För varje ruta i UML-diagrammet, ange (med en bokstav A-H) vilket namn den borde ha, utifrån vilken av kodlistningarna som bäst beskriver den. Alla rutorna korrekt namngivna ger 3 poäng, tre korrekt namngivna ger 2 poäng, och två korrekt namngivna ger 1 poäng. (3 p) + a: int + dosomething() + dosomethingelse() + dosomething() + b: int + dosomething() + dosomethingdifferent() + b: int + c: int + dosomething() + dosomethingelse() A) public class A extends D{ public int b = 3; private int c = 3; private F myf; public void dosomething(){ myf = new F(); myf.dosomthingelse(); public void dosomethingdifferent(){ b -= c; 9

B) public interface B extends A{ public int a = 3; public void dosomething(){ a++; public void dosomethingelse(){ a--; C) public class C implements D{ public int b = 3; public void dosomething(){ a++; public void dosomethingdifferent(){ a--; 10

D) public class D implements E{ public int a = 3; public void dosomething(){ a++; public void dosomethingelse(){ a--; E) public interface E{ public void dosomething(); F) public class F implements E{ public int b = 3; public int c = 3; public void dosomething(){ b++; public void dosomethingelse(){ c--; 11

G) public class G extends F{ H) bu public int b = 3; private int c = 3; private F myf; public void dosomething(){ myf = new F(); myf.dosomthingelse(); public void dosomethingdifferent(){ b -= c; public interface H implements D,F{ public void dosomething(); I) public class I implements E{ public int b = 3; public int c = 3; public void dosomething(){ b++; public void dosomethingelse(){ c--; 12

5. För varje påstående om åtkomst 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 (4 p) a) Om ett fält deklareras med nyckelordet protected så kan dess innehåll inte ändras efter initiering. b) En metod som deklareras som protected kan bara anropas från klassen självt. c) Om en metod deklareras med nyckelordet private så kan den inte anropas av en ärvande klass. d) Metoden main() måste alltid deklareras som private för att förhindra att andra klasser anropar den och orsakar trådintereferens. 6. För varje påstående om polymorfism 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) Om en variabel deklarerats med en superklass A kan man instansiera den med en klass B som ärver från A. b) Eftersom det inte går att instansiera abstrakta klasser, får man inte deklarera variabler med abstrakta klasser. c) Det är tillåtet att deklarera variabler med gränssnitt. d) Ett gränsnitt kan implementera en klass om den är abstrakt. e) Om en variabel deklarerats med en klass A kan man instansiera den med en superklass B som A ärver ifrån. 7. För varje påstående om trådar 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 (4 p) a) Om man använder en Threadpool måste man ha lika många trådar som man har processorkärnor. b) Varje tråd kan ha flera olika programpekare. Om dessa pekar på samma rad i programmet uppstår ett deadlock. c) Trådinterferens kan förhindras genom att deklarera variabler som private. d) I Java kan man starta en ny tråd genom att anropa metoden start() på ett objekt av typen Thread. 13

Del II - fördjupningsfrågor Följande uppgifter besvaras på separat papper. 8. Förklara följande begrepp: thread interference, deadlock och starvation. (3 p) 9. Förklara vad gränssnitt och abstrakta klasser är och hur de används. Hur kan de underlätta för att åstadkomma lös koppling? (3 p) 10. Du har blivit ombedd att skriva program som kräver att man använder två smartphones, i ett försök att få upp försäljningen av dessa. Din uppdragsgivare tänker sig att man kan ha ett tangentbord på den ena telefonen och använda skärmen på den andra för att se texten man skriver. Eftersom uppdragsgivaren är kopplad till en större nätverksleverantör, vill de att all kommunikation mellan telefonerna ska ske över internetanslutningar. Till en början räcker det att kunna skriva och redigera texter, men din uppdragsgivare kan säkert komma på ny innovativ funktionalitet i framtiden, vilket du förstås bör ta höjd för. Skriv och förklara hur du strukturerar programmet och hur programmets olika delar kommunicerar med varandra. Namnge alla ingående designmönster korrekt. (7 p) 11. Din vän har precis börjat programmera i Java, men upplever att alla program hen skriver tar väldigt lång tid på sig att starta. Skriv en kort guide till hur man kan använda olika designmönster för att göra sina program snabbare i uppstarten, och namnge alla relevanta mönster korrekt. (5 p) 12. Hur fungerar designmönstrena Adapter och Proxy? Vilka likheter har de, och vilka skillnader? Hur kan man implementera dem? Rita en UML och förklara! (6 p) 14