Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel tillåtna och på problemdelen är alla skriftliga hjälpmedel tillåtna. Man löser teoridelen först, lämnar in den, hämtar problemdelen och tar sen fram sina böcker m.m. Använd inte mer än 2 timmar till teoridelen! Teoridelen har 20 poäng och problemdelen har 30 poäng. Dessutom kan man få tentapoäng för avklarade laborationer. 1-2 labmoment klara ger 1 bonuspoäng, 3-4 labmoment klara ger 2 bonuspoäng och om man gjort samtliga labmoment så får man 4 bonuspoäng som läggs till det man erhåller på tentan. 25 poäng varav minst 10 poäng från tentans problemdel ger säkert godkänt. Preliminära gränser för betygen 4 och 5 är 35 respektive 45. Teoridel T1) (2p) Förklara begreppet dynamisk bindning och vad man använda det till. T2) (2p) Vad är ett ramverk (framework) inom objektorienterad programmering? Vad är det för skillnad på ett ramverk och ett designmönster? T3) (2p) Förklara principen programmera mot ett gränssnitt och inte mot en implementation och nämn någon fördel med att göra så. T4) (3p) Beskriv mönstret Composite, vad dess syfte är, vilka delar som ingår. Rita gärna både ett UML-klassdiagram och ett objektdiagram för en exempeltillämpning. T5) (1p) Ett försök att implementera mönstret Singleton i Java resulterade i följande kod. Tyvärr fungerar inte klassen som det är tänkt. Vad är det som ska ändras för att det ska bli en riktig Singleton? class Singleton { private Singleton theinstance = new Singleton(); private Singleton() { public String tostring() { return "The One and Only"; public static Singleton getinstance() { return theinstance; 1
Frågorna 6 15 är flervalsfrågor, skriv alla svar på samma blad! T6) Antag att vi har klassen Ruta samt att konstanten N har ett värde >0. Vi vill skapa en vektor med N st Ruta objekt. Ruta har en parameterlös konstruktor. Betrakta följande programrader. Ruta[] ruta; // 1) ruta = new Ruta[N]; // 2) for (int i=0; i<n; i++) // 3) = hela for-satsen ruta[i] = new Ruta(); Vad behövs för att skapa den önskade vektorn? A) Alla satserna 1), 2) och 3) måste vara med B) Satserna 1) och 3) behövs. 2) är fel och måste strykas. C) Satserna 1) och 3) behövs. 2) är inte fel men behövs ej. D) Satserna 1) och 2) behövs men inte 3) T7) Konstruktor vid arv. Vad skall det stå vid *** iklassentorn? class Pjäs { int x; Pjäs (int x) {... class Torn extends Pjäs { Torn (int x) { ***... A) Det måste stå this.x = x; B) Det måste stå Pjäs(w); där w har typen int. C) Det måste stå super(w); där w har typen int. D) Inget av A), B) och C) är rätt, man kan t.ex. lämna tomt. T8) Antag att en instansmetod i klassen C är märkt med synchronized, dvsbörjar t.ex. public synchronized void m(). Metoden anropas via referensen r: r.m() Vilket påstående är rätt? A) Under exekvering av r.m() kan andra trådar inte anropa några metoder alls i det objekt som r refererar till. B) Under exekvering av r.m() kan andra trådar inte anropa några metoder som är märkta synchronized i det objekt som r refererar till. C) Under exekvering av r.m() sker en synkroniserad skräpsamling. D) Metoden m får inte anropa några andra metoder i det objekt som r refererar till. 2
T9) Javas klasser för strömmar är uppbyggda enligt ett välkänt designmönster. Vilket då? A) Template Method B) Composite C) Decorator D) Iterator T10) Vilket designmönster används i exemplet nedan? abstract class Date {... class SwedishDate extends Date {... class ChineseDate extends Date {... class NorwegianDate extends Date {... abstract class Document { abstract Date makedate(); // Flera konkreta metoder class SwedishDocument extends Document { Date makedate () { return new SwedishDate(); class ChineseDocument extends Document { Date makedate () { return new ChineseDate(); A) Factory Method B) Proxy C) Composite D) Observer T11) Vilket av följande påståenden om arbetssättet Extreme Programming, XP är falskt? A) XP-programmerare arbetar i par. B) XP är en iterativ process. C) Testning av små och stora moduler görs ofta, man kan t.o.m. säga att XP är en testdriven metodik. D) Man skriver först en noggrann systemspecifikation och håller sig sedan till den. 3
T12) Klassen Test har fyra metoder. En skall bort! En av metoderna är felaktig och gör att det inte går att kompilera klassen. Vilken då? class Test { static int sv = 17; int iv = 42; static int ma () { return sv; static int mb () { return iv; int mc () { return iv; int md () { return sv; A) ma B) mb C) mc D) md T13) Vilket av följande alternativ beskriver bäst termen refactoring? A) Uppdelning av programkoden i många små delar (klasser och metoder). B) Förbättring av programkoden utan att programmets yttre funktion ändras. C) Upprepad testning av ett program allteftersom det byggs ut. D) Förbättring av det gränssnitt ett program visar mot användaren med så lite förändringar av programkoden som möjligt. T14) Vilket av följande påståenden om arv/implementation i Java är sant? A) En klass kan ärva från två eller flera konkreta klasser, class Z extends X, Y... B) En klass kan ärva från två eller flera abstrakta klasser C) En klass kan implementera två eller flera gränssnitt (interface), class Z implements I1, I2.. D) När en klass implementerar ett gränssnitt med två metoder så kan man välja att i klassen skriva en implementation av endast en av dem. Den andra ges då en tom implementation som standard. 4
Studera följande två klasser: class Glass { String sort; String omdöme; Glass (String s, String o) { sort = s; omdöme = o; void sättomdöme (String o) { omdöme = o; public String tostring() { return sort + " fick omdömet " + omdöme; class GlassTest { public static void main(string[] x) { Glass banan = new Glass("Banan med basilika", "I NÖDFALL"); Glass hallon = new Glass("Hallon-vaniljdröm", "SOMMARENS GODASTE"); mysko(banan, hallon); System.out.println(banan); System.out.println(hallon); static void mysko (Glass g1, Glass g2) { g2.sättomdöme("favoriten"); Glass tmp = g1; g1 = g2; g2 = tmp; T15) Vad blir utskriften från main metoden? A) Hallon-vaniljdröm fick omdömet FAVORITEN B) Hallon-vaniljdröm fick omdömet SOMMARENS GODASTE C) Hallon-vaniljdröm fick omdömet FAVORITEN D) Hallon-vaniljdröm fick omdömet SOMMARENS GODASTE 5