Petter Dessne, HIT 2013-08-19 Omtentamen i OOPW, 29 augusti 2013 kl. 9-13 Maxpoäng: 100. Betygsgränser: A: 90p + B: 80p + C: 70p + D: 60p + E: 50p + Mindre än 50 poäng ger underkänd tentamen. Poängen kan fördelas hur som helst mellan uppgifterna. Observera att varken jag (Petter) eller Björn Abelli finns tillgängliga på tentamensdagen, men frågorna bör vara enkla att förstå. Är det något du inte uppfattar så förklara hur du tolkar uppgiften och gör så gott du kan. Hjälpmedel: Papper och penna, samt dator för programmeringsuppgiften (det är alltså endast EN programmeringsuppgift som kräver dator). Du kan lösa flera uppgifter på samma pappersark om du vill, eftersom jag rättar alla uppgifterna denna gång. Resultatet på omtentan bör vara dig tillhanda senast den 18 september. Lycka till! Petter
Frågor till omtentamen i OOPW, augusti 2013 Del 1, allmänt om OO,.Net samt C# (svara på papper) Uppgift 1. (7 p) Du har fått i uppdrag av din chef att ge förslag på en strategi för ett egenutvecklat administrativt system. Du bestämmer dig snart för att jobba med Microsoft-teknik eftersom det är lätt att integrera med organisationens övriga system. Men ett system kan vara både webbaserat (Asp.Net) och Windows-baserat (Windows Forms). Vad är det som avgör vilken väg du väljer? Beskriv alltså för- och nackdelar med att ha ett system baserat på Asp.Net, respektive för- och nackdelar med att ha ett system Windows Forms-baserat. När (storlek på organisationen, typ av organisation, typ av system etc) passar vilken strategi bäst? Uppgift 2. (6 p) Beskriv vad är List (även kallad List<T>) är för något i C#. Skriv vad den används till och ge exempel på användbar List-syntax för att t.ex. lägga till, sortera, plocka fram och ta bort element. Uppgift 3. (12 p, tre poäng per rätt svar) (a) Om felhantering: När exekveras kod som skrivs i finally-blocket? Alternativ: A. Bara om koden i catch-blocket har exekverats (ett fel uppstod). B. Alltid, oberoende om ett fel uppstod eller ej. C. Det finns inget som heter finally! D. Bara om koden i try-blocket har exekverats (dvs. inget fel uppstod). (b) Vad skrivs ut från följande kod? object[] arr = new object[4]; arr[0] = new StringBuilder(); arr[1] = "hej"; arr[2] = new int[1]; arr[3] = "oopw"; var result = array.oftype<string>(); foreach (var element in result) { Console.WriteLine(element); } (c) En metod som endast kan anropas inifrån en instans eller den egna klassen, kallas för en? Alternativ: A. Statisk metod. B. Publik metod. C. Abstrakt metod. D. Privat metod.
(d) Hur skriver man i C# i klassdeklarationen för klassen Barn för att visa att klassen Barn ärver klassen Pappa? Uppgift 4. (15p) Här följer ett antal frågor om objektorientering och i viss mån C#. Svara så gott du kan, och rita gärna figurer för att förklara. a) Vad är ett interface? b) Vad menas med en association? Ge även exempel på associationer! c) Vad menas med överskuggning? Ge även exempel! d) Vad är polymorfism? När kan polymorfism vara användbart? e) Vad innebär att en metod är static? Vad är det bra för?
Del 2, Asp.Net (svara på papper) Uppgift 5. (25 p) Beskåda skärmdumpen nedan. Det är som kanske framgår en inloggningssida till ett administrationsgränssnitt för en portal. Här följer ett antal frågor/uppgifter rörande Asp.Net/C# och inloggning mm. Använd så många pappersark som du behöver, det viktiga är att det syns tydligt vad du skriver. Om du inte kan exakt syntax så skriv i pseudokod. a) Skriv.aspx-koden för textboxarna och lablarna etc, dvs koden mellan div-taggarna för det färgade fältet. b) Skriv lämplig kod i code-behind, som ska triggas när man trycker på login-knappen: Skriv kod för validering. Skriv även kod för att sätta en variabel (vilken typ ska det vara förresten?) som behåller personen inloggad ett tag, samt kod för att skicka vidare personen till lämplig sida, samt kom-ihåg-mig-kod så att man slipper skriva in namnet (petter) nästa gång man kommer till den här sidan. Skriv kod för nästa sida för att kolla om personen är inloggad. Om personen inte är det ska han eller hon skickas tillbaka till sidan du ser nedan.
Del 3, WinForms (praktisk kodning) Uppgift 6. (35 p) Du har pga. det soliga sommarvädret fått solsting och därför fått för dig att skapa ett skivregister i WinForms. Skapa alltså ett sådant enligt följande kriterier. Ifall tekniken kraschar på tentadagen, skriv ned vad du kan på papper, i pseudokod om du inte kan exakt kod. Allmänt: Ett system där man kan skriva in skivor, och också lista skivor som man äger. Skivorna lagras (helst) centralt i en separat klass. Startsida: En välkomstsida med välkomsttext etc efter behag En knapp som leder till sida där man skriver in en skiva En knapp som leder till en sida där man ser skivor Ny skiva: Textboxar och lablar för skivor läggs till efter förstånd. En skiva har titel, artist och årtal, vilket är lämpligt att lägga som tre comboboxar. Tabbordning ska fungera. Görs med attributet TabIndex för varje kontroll. Med andra ord: först textbox för artist, sedan trycker man på tabb och hamnar på titel och sedan på årtal. När man klickar på en Lägg till-knapp ska skivinformationen sparas (se nedan). Tidpunkt (datum och klockslag) ska läggas till per automatik när skivinfon sparas. Data ska alltså sparas på valfritt objektorienterat sätt, förslagsvis till en egen klass. (Ju bättre OO-lösning desto bättre, men gör så gott du kan och gör annorlunda om du fastnar.) Det som ska sparas är artist, titel, årtal och alltså tidpunkt. Fönstret ska stängas när skivan har lagts till. Skivlista: Lista helt enkelt alla skivor i en datagridview eller motsvarande. Rubrikerna i din datagridview ska ha lämpliga namn. Listningen kan t.ex. göras med hjälp av en datatable utifrån en loopning av dina sparade data. Lyckas du inte fylla tabellen så gör så gott du kan i övrigt, alternativt lista dina data på annat sätt. Lista helst i någon bra ordning, t.ex. sorterat på artist. Lägg också till en knapp som stänger fönstret. Övrigt: Alla sidor ska ärva från en base form i stället för från Page. Alla textboxar (eller andra kontroller om du föredrar det) i programmet ska ärva utseende (t.ex. ljusgrå bakgrund) från base form (kan göras via Linq om man så vill). Alla kontroller ska ha vettig namngivning. Alla metoder ska kommenteras på ett vettigt sätt. Obs! Stöter du på problem så strunta i kravet/egenskapen och gör så gott du kan!