Umeå Universitet Datavetenskap Anders Broberg 15-01-12 TENTAMEN Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg HT-15 Datum: 15-01-12 Tid: kl 14.00-18.00 Namn: Personnummer: 5DV133-1 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. 1(7)
UMEÅ UNIVERSITET Institutionen för Datavetenskap UMEÅ UNIVERSITY Dept of Computing Science TENTAMEN Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg HT-15 Datum: 15-01-12 Tid: kl 14.00-18.00 5DV133-1 Problem Inlämnad Poäng 1 2 3 4 5 6 7 8 9 Summa Betyg 2(7)
TENTAMEN I DATAVETENSKAP. OBJEKTORIENTERAD PROGRAMMERINGSMETODIK (5DV133) Datum : 15-01-12 Tid : 14.00-18.00 Hjälpmedel : Inga Antal Uppgifter : 9 Totalpoäng : 52 (halva poängtalet krävs normalt för godkänt) Kryssa för de uppgifter du lämnar in Skriv tentakoden på varje blad. 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 på alla uppgifter! Om du inte kan lösa en av flera deluppgifter, gör lämpliga antaganden och gå vidare till efterföljande deluppgifter. Uppgifter kan vara felformulerade, fråga om du är osäker eller tycker att något verkar konstigt. Jag nås via telefon kontakta tentavakterna. Det är ditt ansvar att övertyga om att du besitter den kunskap som efterfrågas. Det är viktigt att du löser den givna uppgiften! Lycka till! 3(7)
Uppgift 1 (8p) Vilka av följande påståenden är sanna respektive falska. 1 poäng per rätt svar, -1 poäng för felaktigt svar och om man inte svarar på en uppgift får man 0 poäng för denna. Obs! Man kan inte få mindre än noll poäng på uppgiften. a) Alla klasser ärver från klassen Object i Java. b) Interface i java kan bara innehålla konstanter och abstrakta metoder. c) Ett exceptions /undantag måste fångas i try-catch block i den metod där de kastats. d) Man får ha två metoder i samma klass som skiljer sig åt endast beroende på returtypen e) Man får ha två metoder med samma namn i en klass om de har olika parametrar (typ/antal) f) Alla ord som kan skapas med hjälp av bokstäverna a-z, A-Z och _ kan användas som variabelnamn i Java. g) För att använda en klass i ett annat paket måste du använda import kommandot i början av din källkodsfil. h) En av de stora fördelarna med Java är att det tillåter äkta multipelt arv. Uppgift 2 (3 poäng) I din konstruktor till en Bil-klass står det public Bil { super(); a) Vad betyder satsen super() i detta sammanhang? Kan den förekomma någon annanstans i konstruktorn och i så fall var? Lite längre ner i klassen står följande:.. super.ritaut();.. b) Vad innebär denna sats? Uppgift 3 (4 poäng) Vad kännetecknar en god klass? 4(7)
Uppgift 4. (12 poäng) a) Förklara Java-konstruktionerna extends och implements. Ange skillnader och likheter. b) Förklara vad en abstrakt klass och ett interface är för något. Ange skillnader och likheter. c) Vad är skillnaden mellan en klass och ett objekt. d) Java-program skall gå att köra på olika datorer och under olika operativsystem utan att behöva kompileras om. Hur åstadkoms detta? e) Jämför fält med klassen Vektor. Vilka skillnader och likheter finns. f) Förklara skillnaden mellan överlagring (overloading) och omdefinition (overriding). Uppgift 5. (4p) Följande reserverade ord används i samband med hantering av exceptions (undantag). Förklara vad deras användning/vad de gör och ge exempel på användandet av var och en av dem. a) Try b) Catch c) Throw d) Throws Uppgift 6 (8 poäng) Ni har blivit ombedda att hjälpa till med designen av ett nytt system för ett biluthyrningsföretag. Er uppgift blir att ta fram en lämplig klassdesign för systemet (ni behöver alltså inte implementera det). Företaget hyr ut två olika typer av bilar (bensindrivna personbilar och skåpbilar som går på diesel). Kunderna ska kunna boka en viss typ av bil för ett visst antal dagar och systemet skal då reservera en sådan bil under tidsperioden som kunden önskar (förutsatt att bokningen går att utföra). För att hålla reda på bilarna använder man sig på företaget av bilarnas registreringsnummer. Självklart ska var och en av bilarna inte kunna vara bokade/uthyrda till två kunder samtidigt. För att kunna hantera ev. problem så behöver företaget veta namnet, personnummer och telefonnumret till alla kunder som bokat en bil. Då en kund återlämnar bilen ska systemet kunna räkna ut priset som denne ska betala. Priset bestäms av antalet dagar som bilen varit uthyrd (200 kronor/dag för personbilen och 300kr/dag för skåpbilarna), antal mil som bilen körts (10 kr/mil) samt hur mycket bensin/diesel som är kvar i tanken jämfört med då bilen hämtades ut. För diesel debiteras 14 kronor per liter mindre som finns i tanken vid återlämnandet och för bensin 15 kronor. Om mer bensin/diesel finns i tanken vid återlämnandet än vid uthämtandet så dras motsvarande summa av på totalpriset. Lämna in en beskrivning av designen som innehåller alla klasser och hur de hänger ihop. För varje klass ska alla viktiga attribut och metoder finnas med. Ni ska beskriva er design genom ett UML-klassdiagram. Uppgift 7 (4 poäng) Förklara CRC-metoden, vad den går ut på, vilka steg den har, samt vad CRC står för. 5(7)
Uppgift 8 (4 p) Nedan finns ett antal klasser och interface. Ge en beskrivning av dessa (och relationerna mellan dem) i form av ett UML-klassdiagram. // The context class uses this to call the concrete strategy public interface Strategy { int execute(int a, int b); // Implements the algorithm using the strategy interface public class ConcreteStrategyAdd implements Strategy { public int execute(int a, int b) { System.out.println("Called ConcreteStrategyAdd's execute()"); return a + b; // Do an addition with a and b public class ConcreteStrategySubtract implements Strategy { public int execute(int a, int b) { System.out.println("Called ConcreteStrategySubtract's" + "execute()"); return a - b; // Do a subtraction with a and b public class ConcreteStrategyMultiply implements Strategy { public int execute(int a, int b) { System.out.println("Called ConcreteStrategyMultiply's" + "execute()"); return a * b; // Do a multiplication with a and b // Configured with a ConcreteStrategy object and maintains a reference to a Strategy object public class Context { private Strategy strategy; // Constructor public Context(Strategy strategy) { this.strategy = strategy; public int executestrategy(int a, int b) { return strategy.execute(a, b); 6(7)
Uppgift 9 (5 poäng) Hitta de fel som finns i nedanstående klass. Beskriv för varje fel vad som är fel samt ge ett förslag på vad man skulle kunna göra för att åtgärda det. Obs! Radnummren är bara till för att ni skall ha något att hänvisa till och räknas ej som ett fel. Observera också att antal poäng inte har något (direkt iallafall) med antal fel att göra. 1. public class mångafel extends Object 2. { 3. final int enidentifierare=0; 4. int hej=1; 5. void enmetod() 6. { 7. hej=2; 8. 9. 10. int enmetod() 11. { 12. private int enlokalvariabel=1; 13. enidentifierare++; 14. return enlokalvariabel/2; 15. 16. 17. public Object enannanmetod(int värden[]) throw IOException 18. { 19. float hej=1.0; 20. if (hej/2==0.5) 21. throws(new IOException("Ooops")); 22. return värden; 23. 24. 25. public void entredjemetod(int värden[]) 26. { 27. int enlokalvariabel =0; 28. for (int i=0;i<värden.length;i++) 29. enlokalvariabel +=värden[i]; 30. return enlokalvariabel; 31. 32. 7(7)