Högskolan Dalarna sid 1 av 5 ÖVNINGSTENTAMEN I PROGRAMUTVECKLINGSMETODIK, DEL 2 för SY1, Läsperiod 4, 1999 Hjälpmedel: Inga hjälpmedel är tillåtna Max: 60 poäng. Betygsgränser: betyg G - ca 36p, betyg VG - ca 48p Skriv tydliga och kortfattade svar! 1. Begrepp. (10p) a) Vilken är skillnaden mellan den direkta och indirekta medlemsoperatorn? (2p) b) Redogör för vilka olika typer av åtkomlighet som en medlemsfunktion kan ha? (2p) c) Hur skapar man en datamedlem som är konstant. (2p) d) Vad är skillnaden mellan en grupp med kryssrutor och en grupp med radioknappar? (2p) e) I objektorinterad analys förekommer bekreppet "aktör". Förklara detta begrepp. (2p) 2.Klassdiagram (10p) Följande klassdiagram är givet. Förare 1 1 Bil lyssna(motorljud) starta() stoppa() Visa i ett interaktionsdiagram hur föraren Kalle startar sin gamla Ford och stoppar den strax därefter på grund av att den låter så illa.
Högskolan Dalarna sid 2 av 5 3. Klasser och arv (10p) Följande klasser är givna: #include <string.h> const int STRLENGD = 80; class Person Person(char *, char *); void skrivperson() cout << "Namn: " << namn << "Personnr: " << personnr << endl; char namn[strlengd] ; char personnr[strlengd]; ; class Kurs Kurs(char *); const char *getname()return kursnamn; char kursnamn[strlengd] ; ; class Elev : public Person Elev(char *, char *, char *); void skrivelev() skrivperson(); cout << "Kurs: " << fysik.getname() << endl; Kurs fysik; ; int main (void) Elev kalle("kalle", "123456-7890", "Dynamik"); kalle.skrivperson(); kalle.skrivelev(); a) Skriv de tre konstruktorer som behövs för att programmet skall fungera. (6p) b) Hur påverkas programmet om man byter "class Elev : public Person" mot "class Elev : protected Person". (2p) c) Hur påverkas programmet om man byter "class Elev : public Person" mot "class Elev : private Person". (2p)
Högskolan Dalarna sid 3 av 5 4. Polymorfi (10p) Den här uppgiften består av tre deluppgifter. I deluppgifterna används följande kod: #include <string.h> class Person Person(char *namnet, long hemtelefon, int aldern) strcpy(namn, namnet); hemnr = hemtelefon; alder = aldern; int getalder()return alder; virtual long gettelnr()=0; char namn[80]; long hemnr; int alder; ; class Arbetare : public Person Arbetare(char *namnet, long hemtelefon, int aldern, long jobbtelefon) : Person(namnet, hemtelefon, aldern) jobbnr = jobbtelefon; long gettelnr()return jobbnr; long jobbnr; ; class Vikarie : public Arbetare Vikarie(char *namnet, long hemtelefon, int aldern, long jobbtelefon, bool jobbar) : Arbetare(namnet, hemtelefon, aldern, jobbtelefon), arbetar(jobbar) long gettelnr() if (arbetar) return jobbnr; else return hemnr; int getalder()return 27; bool arbetar; ;
Högskolan Dalarna sid 4 av 5 a) Följande main-funktion innehåller tre fel. Beskriv dessa fel (3p) Person lisa = new Person("Lisa Karlsson", 11111, 10); Arbetare *erik = new Arbetare("Erik Nilsson", 22222, 20, 12345); Arbetare *karin = new Vikarie("Karin Andersson", 33333, 30, 56789, false); cout << "Namn: " << erik->getnamn() << endl; cout << "Telefon: " << erik->gettelnr() << endl; cout << "Ålder: " << erik->alder << endl; b) Vilken utskrift ger följande main-funktion. (3p) Person *individ[2]; Arbetare *knegare[2]; knegare[0] = new Arbetare("Niklas Jonsson", 54321, 30, 12345); knegare[1] = new Vikarie("Urban Jansson", 99999, 35, 11111, true); individ[0] = knegare[0]; individ[1] = knegare[1]; for (int i=0; i<2; i++) cout << individ[i]->getalder() << endl; for (int i=0; i<2; i++) cout << knegare[i]->gettelnr() << endl; c) Komplettera uppgiftens ursprungliga kod så att följande main-funktion går att köra. (3p) All kod behöver inte upprepas, endast förändringar i koden behöver redovisas. Arbetare *stina = new Arbetare("Stina Flink", 54321, 40, 12345); Arbetare *urban = new Vikarie("Urban Rask", 99999, 45, 11111, true); stina->getinfo(); urban->getinfo(); Följande utskrift ska erhållas: Stina Flink har telefonnummer 54321 hem och 12345 till arbetet. Urban Rask arbetar i dag.
Högskolan Dalarna sid 5 av 5 5. Analys och Design (10p) Vid objektorienterad analys och design förekommer olika typer av relationer för att beskriva hur olika objekt eller klasser förhåller sig till varandra. Ge en kortfattad förklaring för varje begrepp i deluppgift "a" till och med "e" och visa hur de olika relationer ritas. a) Beroende (2p) b) Association (2p) c) Aggregation (2p) d) Komposition (2p) e) Generalisering (2p) 6. Grafiska användargränssnitt (10p) a) Vad är en meddelanderuta? (2p) b) Berätta om hur man kan åskådliggöra att en komponent för tillfället inte är användbar, nämn tre olika sätt att göra detta på. (3p) c) Förklara vad en dialogmodell är. (5p)