UMEÅ UNIVERSITET Institutionen för Datavetenskap 13-04-04 TENTAMEN Kurs: Applikationsutveckling i Java 5DV135 Ansvarig lärare: Johan Eliasson HT12 Datum: 13-04-04 Tid: kl 9.00-13.00 Namn: Personnummer: Kodnr: 65 Till skrivningsbevakaren: Avskilj detta (sid1) försättsblad och stoppa i kuvert som skickas till Yvonne Löwstedt, Datavetenskap OBS! OBS! Denna skrivning rättas kodad. Detta blad kommer att avskiljas innan läraren får skrivningen för rättning. Ovanstående kod måste därför finnas på samtliga svarsblad när du lämnar skrivningen till skrivvakten. Memorera ditt kodnummer eftersom det även kommer att användas som referens när resultaten meddelas. UMEÅ UNIVERSITET 901 87 UMEÅ Johan Eliasson Tel.: 070-2378695 e-mail: johane@cs.umu.se
UMEÅ UNIVERSITET Institutionen för Datavetenskap UMEÅ UNIVERSITY Dept of Computing Science TENTAMEN Kurs: Applikationsutveckling i Java 5DV135 Ansvarig lärare: Johan Eliasson HT12 Datum: 13-04-04 Tid: kl 9.00-13.00 Kodnr: 65 Problem Lösning Poäng 1 2 3 4 5 6 7 Summa Betyg 2
Applikationsutveckling i Java Datum : 13-04-04 Tid : 9-13 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 30 Börja varje uppgift på nytt papper. Skriv ditt tentakodnummer och uppgiftens nummer på varje papper. Skriv bara på ena sidan av papperet. Sortera dina papper efter uppgiftsnummer. Kryssa för de uppgifter du lämnar in. Lösningarna skall vara snyggt och prydligt nedskrivna. Tankegången skall vara lätt att följa. Alla antaganden som inte är uppenbara skall redovisas. Tips! Försök lösa alla uppgifter! Observera att uppgifterna inte är ordnade efter svårighetsgrad. Det är ditt ansvar att övertyga om att du besitter den kunskap som efterfrågas. Uppgifter kan vara felformulerade, fråga om du är osäker eller tycker att något verkar konstigt. Redovisa dina resonemang så är det lättare att bortse från skrivfel. Det är viktigt att du löser den givna uppgiften! Lycka till! 3
Uppgift 1. (5 poäng) Förklara övergripande hur man arbetar då man använder sig av Test Driven Development (TDD) Uppgift 2. (2+1=3 poäng) a) Följande XML-dokument är inte korrekt. Ange vilka fel (2st) som finns i dokumentet. <?xml version="1.0" encoding="iso-8859-1"?> <bibliotek namn="umeå Stadsbibliotek"> <boksamling> <bok språk="engelska> <titel>hitchhiker's guide to the galaxy</titel> <författare>douglas Adams</författare> </bok> <bok språk="svenska"> <titel>liftarens guide till galaxen</titel> <författare>douglas Adams</författare> </bok> </boksamling> b) Under kursens gång har vi tittat huvudsakligen på en teknik för att validera XML-dokument. Vad heter denna teknik? Uppgift 3. (4 poäng) Vad används följande till då man konstruerar grafiska användargränssnitt i java. a) Layout managers b) Containers c) TableModel d) JList Uppgift 4. (1+1+3+1=6 poäng) a) Vad är ett Design Pattern b) Designpatterns delas ofta (bland annat i boken Design Patterns: Elements of Reusable Object-Oriented Software av GoF) in i tre kategorier. Vilka? c) Förklara hur man kan implementera designmönstret Decorator. d) Ange ett tillfälle då Decorator används i Javas klassbibliotek. Uppgift 5. (2 poäng) Vad är SQL för något och vad används det till? Uppgift 6. (5 poäng) Beskriv med hjälp av ett UML-sekvensdiagram beteendet i metoden nedan void sendmessage() { String text = mmessagearea.gettext(); mcommunicator.sendmessage(muser, text); mmessagearea.settext(""); mmessagearea.grabfocus(); 4
Uppgift 7. (5 poäng) I följande program så var det meningen att en tryckning på knappen i gränssnittet skulle visa det nuvarande värdet på en kontinuerligt uppräknad räknare och det förgående värdet räknaren hade innan sista uppräkningen. Det tidigare värdet borde eftersom räknaren räknas upp med ett varje gång alltså vara ett mindre än det nuvarande då vi inte drabbas av overflow. Vid en test av programmet så fick man dock inte alls de resultat som man förväntade sig. Ange vilka åtgärder som behövs för att göra koden trådsäker (och därmed fungerande). public class Main { public static void main(string[] args) { InfiniteCounter infinitecounter=new InfiniteCounter(); GUI gui=new GUI(infiniteCounter); gui.makevisible(); infinitecounter.start(); import java.awt.borderlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUI { private JFrame frame; private JLabel textlabel; private InfiniteCounter infinitecounter; public GUI(InfiniteCounter infinitecounter) { this.infinitecounter=infinitecounter; frame=new JFrame("Tentaproblem"); frame.setsize(300, 300); JButton button=new JButton("GetCurrentValue"); frame.add(button,borderlayout.north); textlabel = new JLabel(); frame.add(textlabel,borderlayout.south); button.addactionlistener(new ActionListener() { @Override public void actionperformed(actionevent e) { String value=gui.this.infinitecounter.getstring(); textlabel.settext(value); ); public void makevisible() { frame.setvisible(true); 5
public class InfiniteCounter extends Thread { private int value; private boolean running; private int prevval; public String getstring() { return "Value= " +value + " Previous value was "+ prevval; public void increasecounter() { prevval = value++; @Override public void run() { running=true; while(running) { increasecounter(); public void finish() { running=false; 6