Högskolan Dalarna sid 1 av 5 Lösningsförslag till TENTAMEN I OBJEKTORIENTERAD PROGRAMMERING 5p,för D2 1999-01-14 1. a) Systemavgränsningen är dokument som innehåller en kortfattad beskrivning av vad som begränsar systemet. b) Ett användningsfall beskriver ett händelseförlopp mellan aktör och systemet. c) Ett klassdiagram visar relationerna mellan de klasser som ingår i systemet. d) Ett interaktionsdiagram visar hur systemets objekt anropar varandra för att lösa en uppgift e) En leveransplan består av en plan för utveckling av körbara versioner av systemet 2. a) HUS FLERFAMILJHUS 2..* LÄGENHET 1 0..* BOENDE b) Association, aggregation och arv. 3. a) Person::Person(char *namnet, char *numret) strcpy(namn, namnet); strcpy(personnr, numret); Kurs::Kurs(char *kursen) strcpy(kursnamn, kursen); Elev::Elev(char *namnet, char *numret, char *kursen):person(namnet,numret),fysik(kursen) b) Det går inte att anropa klassen Persons medlemsfunktion "skrivperson" i funktionen "main" eftersom arvet från Person till Elev är "protected". c) Det går inte att anropa klassen Persons medlemsfunktion "skrivperson" i funktionen "main" eftersom arvet från Person till Elev är "private".
Högskolan Dalarna sid 2 av 5 4. import java.applet.*; import java.awt.*; import java.awt.event.*; Fel 1: public class Test implements Applet Rätt: public class Test extends Applet Fel 2: public Test() Rätt: public void init() Fel 3: knappen.addactionlistener(lyssnare()); Rätt: knappen.addactionlistener(new Lyssnare()); Fel 4: meddelande->settext("välkommen tillbaka!"); Rätt: meddelande.settext("välkommen tillbaka!"); Fel 5: return true; Rätt: //return true; dvs. satsen ska tas bort. 5. #include <iostream.h> class Koordinat Koordinat(int xkoord = 0, int ykoord = 0)x = xkoord; y = ykoord; int getx()constreturn x; int gety()constreturn y; int x, y; ; class Form virtual ~Form(); virtual double area()=0; ; class Cirkel : public Form Cirkel(int radie):pi(3.14159)r = radie; double area()return pi*r*r; const double pi; int r; ; class Polygon : public Form Polygon(Koordinat*, int); ~Polygon()delete[] k; double area(); int n; Koordinat *k; ; Polygon::Polygon(Koordinat* koor, int antal) n = antal; k = new Koordinat[n]; for (int i=0; i<n; i++) k[i] = koor[i];
Högskolan Dalarna sid 3 av 5 double Polygon::area() double serie = k[n-1].getx() * k[0].gety() - k[n-1].gety() * k[0].getx(); for (int i=1; i<n; i++) serie += k[i-1].getx() * k[i].gety() - k[i-1].gety() * k[i].getx(); return ((serie < 0)? -serie : serie) / 2.0; int main() int i = 0; Form *figur[2]; figur[0] = new Cirkel(1); Koordinat *corner = new Koordinat[2]; corner[0] = Koordinat(0,0); corner[1] = Koordinat(1,2); figur[1] = new Polygon(corner, 2); delete [] corner; cout << "Ytans storlek: " << figur[i]->area() << endl; corner = new Koordinat[3]; corner[0] = Koordinat(2,2); corner[1] = Koordinat(3,2); corner[2] = Koordinat(3,3); delete figur[1]; figur[1] = new Polygon(corner, 3); delete [] corner; cout << "Ytans storlek: " << figur[i]->area() << endl; delete figur[i]; return 0; 6. #include <fstream.h> #include <strstream.h> #include <string.h> int main() double a = 0.0; double b = 0.0; double summa = 0.0; char tecken[80] = '\0'; ifstream filein("decimaltal.txt"); filein.getline(tecken, sizeof tecken, '\n'); istrstream stringin(tecken); stringin >> a >> b; summa = a + b; ostrstream stringout(tecken, sizeof tecken); stringout << summa << ends; ofstream fileout("resultat.txt"); fileout.write(tecken, strlen(tecken)+1); return 0;
Högskolan Dalarna sid 4 av 5 7. a) class Letters : private set<char> Letters operator (const Letters &object)constreturn Union(object); ; b) class Letters : private set<char> friend Letters operator (const char *string, const Letters &object); Letters(const char *string)insertchars(string); Letters operator (const Letters &object)constreturn Union(object); ; Letters operator (const char *string, const Letters &object) return (object string);
Högskolan Dalarna sid 5 av 5 c) class LetterError; class Letters : private set<char> void insertletters(const char *string) throw(lettererror); ; class LetterError LetterError(const Letters errors)charerrors = errors; void forbiddenchars()const cout << "Felaktiga tecken: "; charerrors.print(); Letters charerrors; ; void Letters::insertLetters(const char *string) throw(lettererror) Letters alphabet, errors; char ch; int i = 0; for (ch='a'; ch<='z'; ch++) alphabet.insertchars(ch); for (ch='a'; ch<='z'; ch++) alphabet.insertchars(ch); while (i < strlen(string)) if (!alphabet.contains(string[i])) errors.insertchars(string[i]); i++; if (errors.isempty()) insertchars(string); else throw LetterError(errors);