1) A: Facade B: Template Method
C: Proxy D: Iterator E: Strategy
2) ![]() 3a) Mönstret är Composite.
3b) 4a) A: server B: port C: tråd D: socket E: ström
5a) Testning sker "kontinuerligt", dvs man testar koden ofta, varje dag. 6) Man ändrar i programkoden (förbättrar den förstås) utan att den yttre funktionen ändras. 7) En prototyp är ett program där all funktionalitet "syns" men inte fungerar fullt ut. I Rapid Prototyping vill man snabbt visa en icke-teknisk kund vad som går att göra. Från prototypen väljs en funktion (funktionalitet i programmet, ej kodmässig funktion) i taget och utvecklas i en interativ process. 8a) A: FALSKT B: SANT C: SANT D: FALSKT
8b) En fabriksmetod är en metod som returnerar ett objekt,
antingen ett nyskapat eller ett som redan fanns. Fabriksmetoder används
när man inte vill att användaren ska få bestämma vilka objekt
som skapas med 9) I mönstret Observer finns ett subjekt (eller Observable) som andra objekt är beroende av. När subjektet uppdateras så ska andra objekt också uppdateras. De beroende objekten (Observers) registreras hos subjektet, som känner till sina Observers. När en ändring sker i subjektet underrättas alla Observers. Exempel 1: Ett grafiskt objekt som andra objekt lyssnar på är subjekt, de lyssnande objekten är Observers och underrättas när en händelse sker. Exempel 2: En modell kan ha flera vyer samtidigt. När modellen uppdateras ska alla vyerna också uppdateras. Modellen är subjekt och vyerna Observers och underrättas när en händelse sker.
10a) Fel 1: Konstruktorn måste vara privat. Som klassen är
skriven nu är det fritt fram att skapa hur många objekt man vill.
När konstruktorn gjorts
Fel 2: Metoden som returnerar Singleton-objektet måste vara
10b) En klass enligt mönstret Singleton görs bäst i Java
som en 11) Rätt svar är alternativ C.
12)
Dynamisk bindning:
I en superklass
Polymorfism: Ojbekt av alla subklasser till
13a)
13b) import java.util.*; abstract class Decorator implements IQueue<String> { IQueue<String> myq; Decorator(IQueue<String> q) { myq = q; } public boolean isEmpty() { return myq.isEmpty(); } public void put(String s) { myq.put(s); } public String get() { return myq.get(); } } 13c) import java.util.*; class SeqDeco extends Decorator { SeqDeco(IQueue<String> q) { super(q); } public void putSequence(List<String> list) { for (String s:list) super.put(s); } public List<String> getSequence(int n) { List<String> reslist = new LinkedList<String>(); for (int i=0; i<n; i++) { if (this.isEmpty()) break; reslist.add(this.get()); } return reslist; } } 13d) class TimeDeco extends Decorator { long timeForLastEvent = -1; TimeDeco(IQueue<String> q) { super(q); } public void put(String s) { super.put(s); timeupdate(); } public String get() { timeupdate(); return super.get(); } void timeupdate() { long newtime = System.currentTimeMillis(); if (timeForLastEvent > 0) { System.out.println(newtime-timeForLastEvent); } else System.out.println(0); timeForLastEvent = newtime; } int interval() { // in milliseconds if (timeForLastEvent < 0) return -1; return (int)(System.currentTimeMillis() - timeForLastEvent); } } |