visuell programutveckling med c# 7,5 högskolepoäng · b. windows presentation foundation. c....
TRANSCRIPT
Visuell Programutveckling med C# 7,5 högskolepoäng Provmoment: Tentamen Ladokkod: NVC01G Tentamen ges för: Systemvetarutbildningen och dataekonomutbildningen Namn:
(Ifylles av student) Personnummer:
(Ifylles av student) Tentamensdatum: 2012-01-10 Tid: 14.00 – 19.00 Hjälpmedel: Inga hjälpmedel
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 12/20 poäng på den teoretiska delen (uppgift 1-4). Om studenten inte uppnår 12 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 det) 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 Terenius Telefonnummer: 033 435 4214 (5945)
Svarsblankett Namn:
(Ifylles av student) Personnummer:
(Ifylles av student)
Uppgift 1:
R1 R2 R3 R4
A □ □ □ □ B □ □ □ □ C □ □ □ □ D □ □ □ □
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 stol är en möbel.
B: En sittgrupp består av ett bord och fyra stolar.
C: En fotpall hör till fåtöljen.
D: En bokhylla består av stomme och hyllplan.
(4p)
2. Svara med något av de angivna alternativen på följande frågor.
(a) En implicit typomvandling kan göras__?
Alternativ: A. Från en abstrakt klass till en subklass. B. Från en superklass till en subklass. C. Till alla klasser i the .NET Framework Class Library. D. Från alla klasser till Object.
(b) En metod som kan anropas utan en instans kallas för en ___ ?
Alternativ: A. Publik metod. B. Statisk metod. C. Abstrakt metod. D. Privat metod.
(c) Hur skriver man för att visa ett modalt fönster i Windows Forms, efter denna
inledande rad? formAbout abbe = new formAbout();
Alternativ:
A. abbe.Show();. B. abbe.ShowDialog();. C. abbe.ShowModal();. D. abbe.ShowModWin();.
(d) Synligheten som i UML anges med ’-’ ger synlighet i _____?
Alternativ: A. Alla klasser i samma namespace. B. Klassens metoder. C. Klassen och alla subklasser till klassen. D. Alla klasser som har en referens till ett objekt av klassen.
(e) Vilken av följande typkonverteringar kan ske implicit i C# ?
Alternativ: A. Konvertering av ett Double värde till Float.
B. Konvertering av ett värde av flyttalstyp till en heltalstyp.
C. Konvertering av godtycklig typ till string.
D. Konvertering av ett värde av heltalstyp till en flyttalstyp.
(f) En array är uppbyggd enligt nedan. Hur skriver man för att kopiera den till en lista
av den generiska typen List? int[] arr = new int[3]; arr[0] = 2; arr[1] = 1; arr[2] = 7;
Alternativ: A. List list = arr; B. List<int> list = arr(); C. List<int> list = new List(arr); D. List<int> list = new List<int>(arr);
(6p)
3. Svara med något eller några av de angivna alternativen på följande frågor.
(a) Vilka av följande påståenden om arv i C# är sanna?
Alternativ: A. Arv gör det lättare att lägga till nya attribut i efterhand. B. Metoder får bara ärvas av högst tio klasser i C#. C. Arv skapar möjligheter för en verklighetsnära modellering. D. Arv innebär att avsevärt mycket mer kod måste skrivas.
(b) Vilka sorters metoder kan ärvas från en basklass?
Alternativ: A. private och shared. B. public och protected. C. shared och public. D. static och private.
(c) Parallellt (samtidigt) arbete (kod) kan i ett .NET program startas och köras som
instanser av klassen/erna ____?
Alternativ: A. System.Threading.Thread. B. System.Threading.Process. C. System.Threading.Tasks.Parallel. D. System.Threading.Tasks.Task.
(d) Vilken/vilka av nedanstående tekniker tillhandahåller ramverk för grafiska
gränssnitt i .NET?
Alternativ: A. Windows Graphics Library B. Windows Presentation Foundation. C. Windows Forms. D. Swing GDI.
(e) Vilket eller vilka av följande påståenden är sanna för ett interface?
Alternativ: 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. Ett interface definierar vilka metoder klasser som implementerar interface:t
måste ha. D. En klass får implementera maximalt ett interface.
(5p)
4. Studera följande givna program. Svara med ett eller flera av de givna alternativen.
(a) Vad skrivs ut av följande sats?
Console.WriteLine(5 % 2);
Alternativ: A. 0. B. 1. C. 2. D. 3.
(b) Givet följande klass definition:
abstract class Arwen { public void Ettan() {/* plats för kod */ } protected void Tvåan(int kilo) { /* plats för kod */ } public virtual int Trean(int km, int hastighet) { /* plats för kod */ } public abstract double Fyran(); }
Vilka metoder kan (ev. måste) överlagras (eng. override) av en klass som ärver
från klassen Arwen?
Alternativ: A. Ettan. B. Tvåan. C. Trean. D. Fyran.
(c) Vilket eller vilka av nedanstående påståenden är sanna för kodfragmentet object s = new SomeObject(31, 42)
givet definitionerna nedan?
class SomeObject
{
public object data;
public object moreData;
public SomeObject(int count)
{
data = count;
}
public SomeObject(int count, int number) : base()
{
moreData = number;
}
}
Alternativ: A. Attributet moreData i instansen s får värdet 31. B. Attributet data i instansen s får sitt defaultvärde null. C. Attributet data i instansen s får värdet 31. D. Attributet moreData i instansen s får värdet 42.
(d) Vilket eller vilka av nedanstående påståenden är sanna 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 abstract int g(int b);
}
public class B : A
{
public override int f(int b)
{
return 1 + b;
}
}
Alternativ: A. Koden kompilerar inte eftersom klassen A och/eller B är felaktig. 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. En delmängd av dessa
relationer kan uttryckas i text som ______ ?
D
a
E
fC
G
1..*
1..*
1 0..*
b
Alternativ: A. En instans av a är en C. B. En instans av G är en b. C. En instans av G består av en eller flera instanser av E. D. En instans av D är en C.
(5p)
5. På ett zoo för däggdjur i Danmark finns två apor (Bertil 4år och Strutharald 12 år), en
kamel (Gösta 82år) och två japanska giraffer (Greger 15år och Knut 2år). Alla
däggdjur har namn och ålder, dessutom låter de på ett specifikt sätt. Nedan återfinns
de kodrader som skall ligga i en lämplig metod som tar ett argument, kallat output,
av typen System.IO.TextWriter i respektive klass för att återge djurets läte på
ett korrekt sätt. (OBS! det är som alltid fel att explicit skriva ut till
Console.Out/consolefönstret från en logisk klass därför används en metod som kan
skriva till valfri TextWriter.)
Apa: output.WriteLine(”heeeheeyaeeya”);
Kamel: for(int i = 0 ; i < 3 ; i++) output.WriteLine (”uuuhre”);
Giraff: for(int i = 0 ; i < Age ; i++) output.WriteLine (”shitaaeete”);
Konstruera en generell applikation som modellerar ovanstående beskrivning
objektorienterat, d.v.s. lämpligt indelad i klasser.
Det är viktigt att ni skapar en metod public void DoZoo()
vars syfte är att alla djur i djurparken få chansen att uttrycka sig, dvs. respektive djurs
läte skrivs ut till consolefönstret / Console.Out (som har typen
System.IO.TextWriter) m.h.a. polymorfism.
Skapa även en metod public double ComputeAverageAge()
som beräknar genomsnittsåldern för djuren i djurparken.
Sätt sedan upp ovanstående scenario i main, låt djuren yttra sig och beräkna sedan
deras medelålder och skriv ut denna i consolefönstret.
(10p)
6. Uppgiften går ut på att skapa nedanstående fönster. I fönstret visas hela tiden tre
grafiska former. Vardera formen kan antingen vara en rektangel, triangel eller en
cirkel. Vilken form som visas väljs med den övre ComboBox:en nedanför formen.
Med den undre ComboBox:en väljs formens färg, alternativen skall vara röd, grön blå,
svart och gul. När programmet startar skall de förbestämda valen vara som i bilden
nedan.
Formerna skall ritas med hjälp av GDI+ metoder (d.v.s. med klassen Graphics) och
med pen tjockleken 5.0. All inmatning som sker, i någon av ComboBox:arna, skall få
visuellt genomslag direkt. Layouten skall göras så att formerna ändrar höjd när
fönstrets höjd ändras.
För full poäng skall formerna vara instanser av en egendefinierad grafisk kontroll som
kan styras med en egenskap (property) för formens typ och en egenskap för färgen.
Vidare skall formens storlek bestämmas av kontrollens storlek.
Tips: Lös problemet stegvis, exempelvis börja med att implementera en form som en
grafisk komponent.
För layouten är det lämpligt att rita formerna med en marginal på 5% av kontrollens
höjd och bredd.
Formens typ kan lämpligen anges som ett värde av uppräkningstypen public enum ShapeType { RECTANGLE, TRIANGLE, CIRCLE };
(10p)
7. Uppgiften går ut på att skapa en applikation för ett bokregister. Tabellstrukturen för
applikationens databas books finns nedan. Applikationen skall vid start visa
nedanstående fönster.
När användaren matat in en del av ett författarnamn i textboxen Author: och tryckt på
knappen Search skall efternamn, förnamn för de författare i databasen som har ett
matchande för- eller efternamn visas i en ListBox (obs! inget annat) under Authors.
När en författare väljs i listans så skall titlarna på de böcker denne är medförfattare till
visas i den andra ListBox:en (under Books). När en bok väljs i Books-listan så skall
all information om boken visas i en detaljvy enligt bild nedan. Listan över böcker och
detaljvyn skall automatiskt uppdateras när en annan författare eller bok väljs i listorna
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. Ni kommer åt den med hjälp av de
inloggningsuppgifter (till SQL Server) som finns med i tentan. Databasen har följande
tabeller och nyckelrelationer:
Tips: Lös problemet stegvis. Skapa logikklasserna först och fyll sen metoder och
properties med innehåll.
(10p)