Visuell Programutveckling med C# Provmoment: Ladokkod: Tentamen ges för: Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: 2012-08-22 Tid: 09.00 14.00 Hjälpmedel: Inga hjälpmedel 7,5 högskolepoäng Omtentamen NVC01G Systemvetarutbildningen och dataekonomutbildningen Totalt antal poäng på tentamen: 50 poäng För att få respektive betyg krävs: G=25, varav minst 12 poäng på teoridelen och minst 12 poäng på praktikdelen. VG=38, varav minst 12 poäng på teoridelen och minst 12 poäng på praktikdelen. OBS! For att få den praktiska delen (uppgift 5-7) rättad måste studenten ha uppnått minst 10/20 poäng på den teoretiska delen (uppgift 1-4). Om studenten inte uppnår 10 poäng på den teoretiska delen kommer den praktiska delen ej att rättas och 0 poäng kommer därmed att tilldelas på respektive uppgift. Allmänna anvisningar: Skriv dina svar på separata blad Spara alla filer på F: (OBS! Ingen annanstans, då försvinner de) Logga ur datorn när du är klar med tentamen (men stäng INTE av!). Rättningstiden är som längst tre veckor Viktigt! Glöm inte att skriva namn på alla blad du lämnar in. Lycka till! Ansvarig lärare: Anders Gidenstam, Petter Dessne Telefonnummer: 033 435 4214 (5945)
Svarsblankett Namn: (Ifylles av student) Personnummer: (Ifylles av student) Uppgift 1: A B C D R1 R2 R3 R4 Uppgift 2: A B C D a) b) c) d) e) f) Uppgift 3: A B C D a) b) c) d) e) Uppgift 4: A B C D a) b) c) d) e) Observera: Det minimala resultatet på uppgift 1 till 4 är 12 poäng. Om detta inte uppnås, kommer inte uppgift 5 till 7 att beaktas och automatiskt få 0 poäng.
1. Matcha följande definitioner inom objektorientering med motsvarande exempel (samma relation kan förekomma flera gånger). R1: Association (eng. association) R2: Komposition (eng. composition) R3: Aggregat (eng. aggregation) R4: Arv (eng. inheritance) A: En person kan äga hundar. En hund har en ägare. B: Ett huvud har två ögon. C: En fisk kan vara en haj, en abborre eller en sill. D: En armé har soldater. (4p)
2. Svara med något av de angivna alternativen på följande frågor. (a) En definition av de egenskaper som kan ingå i ett objekt är känd som? A. en metod B. ett objekt C. en instans D. en klass (b) En metod som endast kan anropas inifrån en instans eller klass, kallas för en? A. statisk metod B. publik metod C. abstrakt metod D. privat metod (c) Typen för en variabel, som det vid kopiering eller användning som parameter skapas en ny instans av innehållet, är klassificerad som en? A. värdetyp B. referenstyp C. instanstyp D. objekttyp (d) För att få ett handtag till en valfri metod med en specificerad signatur används nyckelordet? A. enumerator B. delegate C. iterate D. foreach (e) Kod som skrivs i finally blocket vid felhantering exekveras? A. bara om koden i try-blocket har exekveras (inget fel uppstod) B. bara om koden i catch-blocket har exekveras (ett fel uppstod) C. alltid, oberoende om ett fel uppstod eller ej D. det finns inget finally block, programmet kompilerar inte eller kraschar under körning (f) När en händelsehanterare (metod) kopplas till en händelse (event) används? A. ett värde av den delegat typ som hör till händelsen B. ett värde av godtycklig delegat typ C. en funktionspekare D. en instans av metoden (6p)
3. Svara med något av de angivna alternativen på följande frågor. (a) En egenskap (eng. Property) i en klass beter sig vid exekvering (programkörning) som? A. en instans B. en eller två metoder C. ett attribut D. en händelse (eng. event) (b) Vilken av följande typkonverteringar måste göras explicit i C#? A. Konvertering av ett värde av typen List<int> till Object. B. Konvertering av ett värde av flyttalstyp till en heltalstyp. C. Konvertering av ett värde av typen Windows.Forms.Form till Windows.Forms.Control. D. Konvertering av ett Float-värde till Double. (c) Vilket av följande påståenden om multitrådning i C# och.net är sant? A. Trådar i C# (System.Threading.Thread) är billiga att skapa. B. Klassen Monitor kan användas för att synkronisera trådar. C. Det grafiska gränssnittet Windows Forms är trådsäkert. D. Konstruktioner som Parallel.For() eliminerar risken för synkroniseringsbuggar. (d) Metoderna för en bas- eller superklass kan nås i subklassen via nyckelordet? A. override B. super C. this D. base (e) Vilket av följande påståenden om interface är sant? A. En referens till en klass som implementerar ett visst interface kan implicit konverteras till en interface-referens för det interfacet. B. En interface-referens kan implicit konverteras till en referens till ett objekt som implementerar interfacet. C. En klass kan implementera noll eller ett interface. D. Ett interface är en klass där alla metoder är definierade som abstract. (5p)
4. Studera följande givna program. Svara med något av de givna alternativen. (a) Vilket värde har average efter exekveringen av följande program? A. 0. B. 1. C. 2. D. 3. int average = 0; int[] numbers = new int[] 1, 2, 3, 4, 5 ; foreach (int nr in numbers) if (average == 0) average = average / numbers.length; else average = average + nr; (b) Vad har attributet foo för värde i en instans som skapats med konstruktoranropet Counter(4)? class Counter public int foo; public Counter(object foo) foo = foo; A. null. B. 0. C. 4. D. Inget programmet kompilerar inte eller kraschar under körning.
(c) Vad har attributet data för värde i en instans som skapats med konstruktoranropet SomeObject(3, 7)? class SomeObject public object data; public object moredata; public SomeObject(int count) data = count; public SomeObject(int count, int number) : this(count) moredata = number; A. null. B. 3. C. 7. D. Inget programmet kompilerar inte eller kraschar under körning. (d) Vilket av nedanstående påståenden är sant för kodfragmentet A a = new B(); a.g(4); givet definitionerna nedan? public class A public virtual int f(int a) return 2*a; public virtual int g(int b) return 1 + f(b); public class B : A public override int f(int b) return 1 + b; A. Koden kompilerar inte eftersom klassen B inte har någon metod g(). B. Metoden f() i klassen A kommer att anropas. C. Metoden f() i klassen B kommer att anropas. D. Ett undantag kommer genereras eftersom värdet är av typen B men variabeln a har typen A.
(e) Följande UML-diagram beskriver relationer mellan klasser. Vilket eller vilka påståenden är korrekta enligt diagrammet? a b C D f 1 0..* 1..* E 1..* G A. En instans av E är en b. B. En instans av a är en C. C. En instans av f är en b. D. En instans av C hör ihop med noll eller flera instanser av D. (5p)
5. På en skola vill man skapa ett register över sina lärare. Lärarna kan delas upp i adjunkter, lektorer och professorer. För alla lärare vill man lagra namn, ämnesområde, undervisningstimmar och lön. För adjunkterna vill man dessutom lagra årtal för kandidatexamen och för lektorerna vill man lagra årtal för doktorsexamen. För professorerna vill man lagra samma information som för lektorer och dessutom årtal för professorsbefordran. Skapa lämpliga klasser för att representera hierarkin av lärare samt registret. Strukturen skall vara objektorienterad och informationen om respektive lärare skall lagras i attribut med ändamålsenliga typer och åtkomsträttigheter. Informationen som lagrats om en lärare skall inte kunna ändras efter att läraren har skapats. I registret skall det finnas en metod för utskrift av information (namn, ämnesområde och undervisningstimmar samt beroende på typen av lärare även årtal för examen/befordran som kandidat (fil. kand.), doktor (fil. dr.) eller professor (prof.)) om en lärare samt en metod som skriver ut informationen om samtliga lärare som finns på skolan. Varje lärare ansvarar själv för att skapa textuell information om sig själv men skall inte befatta sig med utskrift av denna. Registret skall också ha en metod för att lägga till en lärare (som kan vara en adjunkt, lektor eller professor). Knyt ihop programmet genom att lägga till konstruktorer och eventuellt ytterligare erforderliga metoder i befintliga klasser. Tillverka ett icke interaktivt huvudprogram där programmet skapar några lärare och sedan lägger till dem i registret för att slutligen skriva ut hela lärarbeståndet. (10p)
6. Uppgiften går ut på att skapa nedanstående fönster. I fönstret visas hela tiden tre grafiska representationer av en räknare som kan ta värden mellan (och inklusive) 0 och 40. Den första grafiska representationen är en textbox som visar det nuvarande värdet, den andra en TrackBar-kontroll som visar det nuvarande värdet och den tredje en streckräknare som visar det nuvarande värdet med ett antal streck grupperade i grupper om 0,1, 2, 3, 4 eller 5 streck. Streckräknaren skall ritas med hjälp av GDI+ metoder (d.v.s. med klassen Graphics) och skall kunna visa värden mellan 0 (inga streck) och 5 i varje grupp, tillsammans skall de 8 grupperna kunna visa från 0 till 40 streck. All inmatning som sker, antingen i textboxen eller i TrackBar-kontrollen, skall få visuellt genomslag direkt och alla tre representationerna skall uppdateras. När värdet i textboxen inte är ett giltigt heltal mellan 0 och 40 skall ett felmeddelande omedelbart visas enligt bilden nedan (räknarna fortsätter visa det senast giltiga värdet, här 33). För full poäng skall streckräknarens grupper vara instanser av en egendefinierad grafisk kontroll som kan styras med en egenskap (property) för värde. Tips: Lös problemet stegvis, exempelvis börja med att implementera en streckräknare (0-5 streck) som en grafisk komponent. (10p)
7. Uppgiften går ut på att skapa en applikation för ett leverantörsregister. Tabellstrukturen för applikationens databas NORTHWND finns nedan. Applikationen skall vid start visa nedanstående fönster. När användaren matat in en del av ett leverantörsnamn i textboxen Supplier: och tryckt på knappen Search skall företagsnamnet för de leverantörer i databasen som har ett matchande namn visas i en ListBox (obs! inget annat) under Suppliers. När en leverantör väljs i listans så skall företagets namn och listan av alla dess produkter, på formen namn, kategori, enhetspris (obs! inget annat) visas i en detaljvy enligt bild nedan. Detaljvyn skall automatiskt uppdateras när en annan leverantör väljs i listan och när listorna töms på grund av en ny sökning.
Applikationens GUI skall arbeta mot logikklasser som du skapar och vars publika gränssnitt skall vara enligt nedanstående klassdiagram. Koden i GUI-delen får endast kommunicera med databasen via logikklassernas publika gränssnitt. All databashantering skall ske internt i logikklasserna och skall ske med hjälp av LINQ. Databasen är redan skapad och fylld med data. Du kommer åt den med hjälp av de inloggningsuppgifter (till SQL Server) som finns med i tentan. Databasen har många tabeller men följande tabeller och nyckelrelationer är relevanta för uppgiften: Tips: Lös problemet stegvis. Skapa logikklasserna först enligt klassdiagrammet ovan och fyll sedan klassernas metoder och properties med innehåll. Använd LINQtoSQL klassernas styrkor, som t.ex. de automatiska kopplingarna mellan raderna de olika tabellerna! (10p)