Objektorienterad systemutveckling I Provmoment: Ladokkod: 21OS1B Tentamen ges för: ADAEK12h ASYST12h NGIMI12h 7,5 högskolepoäng Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: 19 augusti 2014 Tid: 13.00-17.00 Hjälpmedel: Inga hjälpmedel. Totalt antal poäng på tentamen: För att få respektive betyg krävs: G=25, VG=40 50 poäng Obs! För dig som tillhör tidigare årgångar (dvs. gamla OOSU) räcker det att få 12,5 poäng på Peters del för att du ska få betyget G (skälet är att programmering inte ingick i gamla OOSU). Vill du däremot ha VG är det samma regler som för årets studenter, 40 p på hela tentan. Rättningstiden är i normalfall tre veckor, annars är det detta datum som gäller: 2014-09-09 Viktigt! Glöm inte att skriva namn på alla blad du lämnar in. Lycka till! /Peter & Petter Ansvarig lärare: Peter Rittgen, Petter Dessne 1
Analys- och designdel (Peters del) 1. Rita ett klassdiagram som innehåller klasserna Person, Säljare, Köpare, Produkt, Beställning, Leverans, Datum. Ange passande attribut till varje klass och alla lämpliga samband mellan klasserna. (10 poäng)
2. Utveckla ett användningsfall som beskriver hur en kund bokar ett flyg på en webbsida. Rita ett användningsfalldiagram (use case diagram) och skriv en berättelse (use case narrative) som innehåller aktiviteter som utförs av kunden och bokningssystemet. (15 poäng)
Petters uppgifter, omtentamen OOSU2, augusti 2014 Man kan skapa en mängd nyttiga och mindre nyttiga program med Windows Forms. Din uppgift består i att färdigställa ett bingo-spel med följande egenskaper: Spelbrädet består av 5*5 textboxar, placerade i en panel. Rutorna har röd bakgrund från början och är numrerade 1-25. Genom att trycka på en knapp slumpas ett nummer fram och motsvarande ruta görs grön. När fem rutor, horisontellt eller vertikalt, i rad är gröna skrivs ett meddelande ut i en messagebox. När man klickar bort meddelandet nollställs brädet, dvs allt blir rött igen. Alla frågor nedan har att göra med detta program. Instruktioner för inlämning Du ska skriva koden på papper. Tänk på att koden måste vara tydligt skriven så att jag kan läsa det du skriver. Du behöver inte bekymra dig direkt om indentering (indrag). Kodkommentarer Av pedagogiska skäl är min kod inte kommenterad. Du ska förstås kommentera din kod som vanligt. Jag har skrivit på engelska i min kod, men du kan skriva på svenska om du vill. Uppgiftens syfte och rättningsprincip Tanken med de här uppgifterna är att ni ska uppvisa kunskaper i 1. Kodning 2. Förståelse för OO-principer 3. Förmåga att tillämpa existerande kod 4. Förmåga att tänka i algoritmer 5. Insikt i bra kod-etikett (namngivning och liknande) Poängen sätts efter hur jag bedömer att ni lyckats i dessa avseenden. Om du t.ex. inte vet hur du ska växla mellan booleska värden kan du fortfarande få många poäng genom att visa att du kan anropa metoder i andra klasser etc. Som alltid gör så gott du kan och skriv det du hinner med. Tanken är inte att alla ska få full poäng på uppgifterna utan att de sammantaget ska vara ganska svåra. Lycka till! Petter
Skärmdumpar Så här ser spelet ut när man startar det. I bilden nedan har jag klickat på knappen fem gånger. Hu har jag fem i rad och spelet är vunnet. Ett meddelande syns. När jag klickar på OK startar spelet om (dvs ser ut som på första bilden igen).
Klassdiagrammet för programmet
Fråga A (4p): Precis som i sudokuspelet är det inte fråga om att handgripligen ändra utseendet på en viss ruta, utan rutornas värden hämtas från andra klasser och bakgrundsfärgen sätts utifrån det, t.ex.: if (DigitController.digits[i, j].selected == true) tb.backcolor = Color.LightGreen; Studera klassdiagrammet ovan. Beskriv i ord hur programmet hänger ihop, dvs. vad klasserna har med varandra att göra och varför en klass är satt till static (det hade kunnat lösas på andra sätt också men jag tyckte det var enklast i det här fallet). Fråga B (4p): I klassdigrammet hittar du klassen Digit ( siffra på engelska). Skriv koden för dess två properties (i valfritt propertyformat, dvs prop eller propfull ) samt för dess konstruktor. Fråga C (8p): Den statiska klassen DigitController håller en tvådimensionell array av Digits. Koden nedan visar ett exempel på hur en viss digit i arrayen får ett värde ändrat i klassen clslogic: DigitController.digits[0, 4].selected = true; Skriv metoden checkhoriz eller checkvert som kontrollerar om en rad har fem inprickade nummer (dvs om alla digits i kolumnen eller raden har selected==true). VÄND!
Fråga D (9p): I koden nedan syns början och slutet på metoden som körs när man klickar på knappen. Skriv det som ska stå emellan, baserat på det ovan beskrivna händelseförloppet samt klassdiagrammet! private void btnnewnumber_click(object sender, EventArgs e) { logic.newnumber(); //a randomized digit is set to selected RedrawBoard(); //the board is redrawn (i.e. a square becomes green) - - - DIN KOD HÄR - - - } } RedrawBoard(); //all squares become red again