1) A: Proxy B: Facade C: Singleton D: Observer E: Iterator
2) 3) Template Method 4) Ramverk = Ett bibliotek/paket med många klasser som kan användas tillsammans för någon kategori av tillämpningar. Exempel på Java-ramverk är awt och swing för grafik och Collection för objektsamlingar. Komponent = Grafiskt objekt som kan visas i ett fönster, en byggsten som kan användas i olika sammanhang och som har en egen funktion. Exempel på komponenter finns i grafikbiblioteken, t.ex. knappar och textrutor. 5) Se föreläsning 12! 6a: For–satsen är helt onödig och gör bara programavsnittet svårt att förstå. Metoderna a, b, c och d exekveras alltid i följande sekvens. a(); b(); c(); d(); d();6b: Svar: B 7a: Svar: B 7b: Svar: C 8 Objekten i objektsamlingen a måste vara av en klass (typ) som implements Comparable. Comparable är ett interface i Java– biblioteket som innehåller en enda metod, compareTo(). Metoden jämför två objekt av klassen och talar om vilket vilket som kommer först i en sorteringsordning eller om de har samma värde.
9a: sin och cos är static 9b:
en lyssnarmetod är inte static.
9c: Fel.java:5: non-static variable fintTal cannot be referenced from a static context System.out.println("Fina talet = " + fintTal); ^ 1 errorNaturligtvis behöver inte felmeddelandet återges i svaret! 10
Lös koppling innebär att en klass inte beror direkt av en annan klass utan att den första klassen beror av ett interface (eller abstrakt klass) som den andra klassen implementerar (ärver från). Interfacet innehåller exakt de metoder som den första klassen behöver anropa. Detta är de enda publika metoderna i den implementerande klassen. Enligt uppgiftslydelsen så använder Speltestare fyra metoder ur Damspelsmodell. Detta symboliseras i UML-diagrammet av två publika metoder. Övriga metoder i Damspelsmodell är privata. Det övre diagrammet överensstämmer med den givna kodsnutten. Det undre diagrammet visar lös koppling mellan Speltestare2 och Damspelsmodell2. 11a String path() { String tmp = name; Directory d = parent; while (d != null) { tmp = d.name + "/" + tmp; d = d.parent; } return tmp; }11b printXML() för följande Directory -klass ger en utskrift
utan indentering (indrag) som speglar träddjupet.
class Directory extends FileElement { ArrayListOm man vill ha indrag vid utskriften så kan man anvauml;nda en String -parameter
till printXML() . Parametern innhåller blanktecken som skrivs ut före raden
om filen eller katalogen. Lite snyggare auml;r det att låta printXML() vara
parameterlös och anropa en hjauml;lpmetod med String -parametern.
void printXML(String off) { System.out.println(off + "<DIRECTORY>"+name); for (FileElement fe : theFiles) fe.printXML(off + " "); System.out.println(off + "</DIRECTORY>"); } printXML() i FileElement och i File måste också
ges samma parameter.
Strukturen på uppgift 11b liknar mycket labb 4 där man ska summera över en Composite-struktur. Här är det en slags summering där alla fil/katalog-namn som uppfyller ett sökvillkor läggs ihop i en lista.
I klassen ArrayList<String> findFiles(String t) { ArrayList<String>thelist = new ArrayList<String>(); if (t.equals(name)) thelist.add(path()); return thelist; }I klassen Directory :
ArrayList<String> findFiles(String target) { ArrayList<String> res = super.findFiles(target); for (FileElement fe : theFiles) { ArrayList<String> l = fe.findFiles(target); res.addAll(l); } return res; }
Litet fel i tentan: 11c. Låt findFiles ha en parameter som är ett objekt som innehåller en jämförelsemetod. Objektet implementerar ett specifikt gränssnitt, t.ex. interface Searchcondition { boolean satisfiescondition(String t); }Metoden satisfiescondition returnerar true om t på
uppfyller något sökkriterium, t.ex. börjar på "H".
Detta villkor (t.startswith("H")) är då hårdkodat i den
implementerande klassen. Naturligtvis kan man tänka sig att klara
av alla "börjar med"-situationer genom att låta metoden ha två parametrar.
Vid sökning så anropas findFiles(new SearchCondition(){ public boolean satisfiescondition(String targ){ return targ.startsWith("H"); } }));Metoden findFiles måste ändras så att den tar ett objekt av SearchCondition som parameter istället för String. Jämförelsen av fil/katalog-namnet i findFiles byts ut mot anrop av metoden satisfiescondition.
// I FileElement: ArrayList<String> findFiles(Searchcondition s) { ArrayList<String>thelist = new ArrayList<String>(); if (s.satisfiescondition(this.name)) thelist.add(path()); return thelist; } // I Directory: ArrayList<String> findFiles(Searchcondition s) { ArrayList<String> res = super.findFiles(s); for (FileElement fe : theFiles) { ArrayList<String> l = fe.findFiles(s); res.addAll(l); } return res; } Mönsternamn: Strategy. OBS! Ett så här långt och detaljerat svar behövs inte för att få 3p. |