|
1) A: Facade B: Strategy C: Proxy D: Mediator E: Iterator
2) Samma uppgift som förra årets ordinarie tenta (110524) fast fjärilsnamnen är utbytta mot liknande namn:
3a) I
3b) 4a) I vattenfallsmetoden sker testning i slutet av projektet, i agila metoder sker testning kontinuerligt (åtminstone väldigt ofta) av hela systemet. I vattenfallsmetoden är det svårt att ändra på redan utförda delar. Planering av projektet sker i början och planeringen följs. I agila tekniker är man ständigt beredd på ändrade krav som leder till ändringar i redan färdiga programdelar. 4b) T.ex. parprogrammering, kundrepresentation i projektet, utvecklingen sker i iterationer om 1-2 veckor, alla utvecklare har tillgång till all kod, refactoring (förbättring av koden utan att funktionen ändras) sker ofta. Fler karakteristika finns på föreläsningsanteckningarna. 4c) 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.
5) Model = data och metoder (algoritmer) som
representerar aktuellt problem. Det finns ingen grafik i Model.
6a) Varje
class RationalNumber implements Comparable
7a) Exmplet visar hur en klassmetod anrops (via klassnamnet).
Den ... createPerson cannot be referenced from a static context ...
7b) Markera metoden
7c) Gör konstruktorn till
7d) En abstrakt klass går inte att instantiera. Inled klassdefinitionen med
7e) Dynamisk bindning
I superklassen
7f) Klasser som inte ska instansieras används gärna som biblioteksmoduler.
I en klass läggs hjälpmetoder som inte ska anropas knutna till några objekt.
Typexempel i Javas bibliotek är
8a) MetodernalargestFile() och addPrefix():
File largestFile() {
return this;
}
void addPrefix() {
name = "F:" + name;
}
8b)
class Directory extends FileElement {
ArrayList<FileElement> theFiles;
Directory (String n) {
super(n);
theFiles = new ArrayList<FileElement>();
}
public void add(FileElement fe) {
theFiles.add(fe);
fe.parent = this;
}
public void remove(FileElement fe) { // Not required in exam!
fe.parent = null;
theFiles.remove(fe);
}
File largestFile() {
int max = 0;
File fm = null, f = null;
for (FileElement fe : theFiles) {
f = fe.largestFile();
if (f != null) {
int tmp = f.size;
if (tmp > max) {
max = tmp;
fm = f;
}
}
}
return fm;
}
void addPrefix() {
name = "D:" + name;
for (FileElement fe : theFiles)
fe.addPrefix();
}
}
|