Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans

Högskolan Dalarna
Data-avdelningen
Hans-Edy Mårtensson
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
Data-avdelningen
Hans-Edy Mårtensson
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
{
public:
Koordinat(int xKoord = 0, int yKoord = 0){x = xKoord; y = yKoord;}
int getX()const{return x;}
int getY()const{return y;}
private:
int x, y;
};
class Form
{
public:
virtual ~Form(){};
virtual double area()=0;
};
class Cirkel : public Form
{
public:
Cirkel(int radie):pi(3.14159){r = radie;}
double area(){return pi*r*r;}
private:
const double pi;
int r;
};
class Polygon : public Form
{
public:
Polygon(Koordinat*, int);
~Polygon(){delete[] k;}
double area();
private:
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];
sid 2 av 5
Högskolan Dalarna
Data-avdelningen
Hans-Edy Mårtensson
}
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;
for (i=0; i<2; i++)
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;
for (i=0; i<2; i++)
cout << "Ytans storlek: " << figur[i]->area() << endl;
for (i=0; i<2; i++)
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;
}
sid 3 av 5
Högskolan Dalarna
Data-avdelningen
Hans-Edy Mårtensson
7.
a)
class Letters : private set<char>
{
public:
//.. .
Letters operator|(const Letters &object)const{return Union(object);}
//.. .
};
b)
class Letters : private set<char>
{
friend Letters operator|(const char *string, const Letters &object);
public:
//.. .
Letters(const char *string){insertChars(string);}
Letters operator|(const Letters &object)const{return Union(object);}
//.. .
};
Letters operator|(const char *string, const Letters &object)
{
return (object | string);
}
sid 4 av 5
Högskolan Dalarna
Data-avdelningen
Hans-Edy Mårtensson
c)
//.. .
class LetterError;
class Letters : private set<char>
{
public:
//.. .
void insertLetters(const char *string) throw(LetterError);
//.. .
};
class LetterError
{
public:
LetterError(const Letters errors){charErrors = errors;}
void forbiddenChars()const
{cout << "Felaktiga tecken: "; charErrors.print();}
private:
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);
}
sid 5 av 5