Tentamen INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP) Delkurs 3 Introduktion till objektorienterad programmering och problemlösning Lärare: Johan Petersson, Tanja Mäki-Runsas Datum: 2016-06-04 Tid: 14:15-19:15 Hjälpmedel: - Ordbok till/från svenska och annat språk - Ordbok till/från engelska och annat språk - Appendixhäfte samt tillägg Antal uppgifter, del A: 5 Poäng, del A: 17 ------------------------------------------- Antal uppgifter, del B: 1 Poäng, del B: 5 För betyget godkänt (G) krävs ca 66% av poängen på del A För betyget väl godkänt (VG) krävs, utöver kraven för G, ca 50% av poängen på del B 1
Läs noga igenom detta: Ett svårläst lösning kan medföra poängavdrag. Renskriv därför dina svar på ett nytt ark vid behov. Den enskilde studenten ansvarar själv för att material som skall bedömas lämnas in till skrivningsvakt. Fyll noggrant i uppgiftsnummer (A1, A2 osv) och tentamenskod på alla inlämnade papper. Börja varje ny uppgift på nytt papper. Lämna in uppgifterna i nummerordning. Skriv endast på en sida. Penna som ger röd skrift får ej användas. Är uppgiften oklar, gör rimliga antaganden och redovisa dessa. Även inte helt fullständiga lösningar kan ge poäng. Lös de delar du kan. Lycka till! 2
Del A ------------------------------------------------------------------------------------- Uppgift 1 (3 p) Javaklassen Bok (obs! se källkoden nedan) håller information om böcker. En uppgift man håller information om här är bokens sidantal. Din uppgift är att skriva kod för metoden setsidantal som utgör ett tillägg till klassen. Metodens uppgift är ändra informationen om boken sidantal. Metoden är en s.k. förändringsmetod och tar ett heltal som parameter. Metoden skall dock också kontrollera om det angivna sidantalet är rimlig = ändring av fältets värde ska bara ske om parametervärdet är större än 0 och mindre än 10 000. - Metoden skall ta emot ett önskat sidantal som parameter - Metoden skall kontrollera om det angivna sidantalet är tillåtet (se ovan) - Värdet på sidantalet skall ändras endast om det angivna värdet ligger inom intervallet - Metoden skall returnera värdet true om sidantals-fältet har lagrat ett godkänt värde (annars ska false returneras). Du behöver bara visa metodens programkod (ej resten av klassen). Skriv ditt svar på ett vanligt svarsark 3
4
Uppgift 2 (1+1+2 p) Åven i den här uppgiften är utgångspunkten koden för klassen Bok enligt ovan. Besvara följande frågor: a) Hur skulle ett korrekt anrop till klassens konstruktor se ut i javakod? (d.v.s. hur skulle programkoden i en annan klass kunna se ut om man vill instanisera ett objekt av klassen bok?) b) Vilket tillstånd (state) skulle det nya objektet ha (direkt efter instansiering) om koden i ditt exempel ovan kördes? c) I en och samma javaklass kan man ha flera konstruktorer. Ge med ett kodexempel, ett förslag på en alternativ konstruktor i klassen Bok. Förklara skillnaden mellan ditt förslag och den konstruktor som finns i klassens kod nu. Skriv ditt svar på ett vanligt svarsark 5
Uppgift 3 (2 p) Utgångspunkten för den här uppgiften är klasserna BadAnläggning respektive Bassäng nedan. En badanläggning är i det här fallet ett utomhusbad med bassänger. För klassen BadAnläggning finner du källkoden och för klassen Bassäng finner du dess Javadokumentation nedan. Uppgiften går ut på att utöka klassen BadAnläggning med metoden visatemperaturer. Metodens anrop ska skapa en utskrift i terminalfönstret enligt bilden nedanför (de exakta värdena som visas i utskriften är förstås bara exempel). Du behöver bara visa metodens programkod (ej resten av klassen). Skriv ditt svar på ett vanligt svarsark Klassen BadAnläggning (källkod) 6
7
Klassen Bassäng (API-dokumentation) 8
Uppgift 4 (4 p) Utgångspunkten för denna uppgift är klasserna Bok (ovan) och BokHylla (nedan). Din uppgift är att komplettera klassen BokHylla med metoden antalböckervissförfattare. Metodens uppgift är att kontrollera, och skriva ut hur många böcker det finns av en viss författare i bokhyllan. Som metodnamnet indikerar skall den här sökningen göras med författarens namn. Resultatet av metodkörningen skall vara en utskrift som varierar beroende på om några böcker funnits eller ej (exempel nedan). 9
Klassen Bokhylla (källkod) 10
Uppgift 5 (1+2+1 p) Även i denna uppgift är utgångspunkten klassen Bok (ovan). Här fokuseras dock begreppet sammanhållning (cohesion) och det begreppets koppling till ansvarsdriven design (responsibility driven design). a) Identifiera på vilket sätt källkoden visar upp tecken på bristande sammanhållning. Beskriv alltså hur man kan se det i koden. b) Beskriv de förändringar man skulle kunna göra i koden för att förbättra sammanhållningen (gärna med källkod men det finns inget behov av att skriva komplett klasskod). c) Förklara på vilket sätt det ovan har med ansvarsdriven design att göra (exemplifiera alltså med koden i klassen Bok). Skriv ditt svar på ett vanligt svarsark 11
Del B ------------------------------------------------------------------------------------- Uppgift B1 (3 + 2p) a) Utgångspunkten även för denna uppgift är klasserna Bok och Bokhylla ovan. Här har vi dock tillfört ytterligare en klass: Bibliotek som helt enkelt hanterar en hel samling av bokhyllor (bilden). Delar av källkoden till klassen Bibliotek finner du nedan. Din uppgift är nu att utöka klassen Bibliotek med metoden listaallatitlar. Metoden skriver ut beteckningen för varje bokhylla + alla boktitlar i hela biblioteket. En utskrift från metoden skulle kunna se ut som exemplet nedan (även om själva datat förstås beror på vilken information som för tillfället finns lagrad). 12
b) Din uppgift är beskriva och förklara den kod du löst uppgiften i (a) ovan med. Beskrivning handlar om att redogöra för vad respektive kodrad faktiskt gör. Förklara innebär att du helt enkelt ska förklara vad respektive del av koden är för något. Här är det därför viktigt att inte hoppa över något steg i beskrivningen samt att använda korrekt terminologi när koden förklaras. 13