Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Under redigering...

Expand
titleDel 1 - Teori (15%)

I vedlegg 1 finner du en datamodell som viser de tre klassene Person, Course og Exam

Oppgave a)

Hva betyr de ulike diagramdelene, altså boksene, strekene/pilene og tegnene (ord, tall og *)?

Expand
titleLF

Diagrammet er omtrent som et klassediagram, så boksene tilsvarer klasser. Navnet øverst en boks er klassenavnet, mens de andre er egenskaper, dvs. data, som instansene vil ha. Strekene er assosiasjoner (eller relasjoner), som sier noe om hvordan instanser kan kobles sammen. Tallene på enden av strekene angir hvor mange koblinger en instans kan ha (* betyr ubegrenset), såkalt multiplisitet. Pilene sier noe om i hvilken retning en kan følge en kobling, ingen betyr begge retninger, mens én pil betyr bare i den retningen.

Oppgave b)

Hvilke valg må en typisk ta når en skal skrive Java-kode for klassene basert slike diagrammer?

Expand
titleLF

Egenskapene og assosiasjonene blir typisk til felt med type som passer til multiplisiteten. En må velge hvordan dataene skal kapsles inn, altså konstruktører med parametre, gettere og settere, og evt. add- og remove-metoder og andre metoder.

Oppgave c)

Exam-klassen bruker en char-verdi for å representere en eksamenskarakter. Hva er problematisk med dette med tanke på å sikre korrekt bruk av klassen? Skisser kort, med tekst og/eller kode, en alternativ teknikk som løser problemet.

Expand
titleLF

En kan hindre gal bruk, dvs. ulovlige char-verdier, med validering og unntak, men det er bedre å kunne sjekke slikt ved kompilering. Da trengs en egen Grade-klasse og denne kan kodes slik at det ikke finnes andre instanser enn de som tilsvarer de lovlig karakterene A-F. Dette gjøres ved å ha privat(e) konstruktør(er) og én statisk variabel for hver mulig verdi:

Code Block
private Grade(char grade) { ... }
public static Grade A = new Grade('A'), B = new Grade('B'), ... , F = new
Grade('F');

Nå kan en bare bruke lovlige instanser når det forventes et Grade-objekt. Dette er essensielt en manuell koding av en enum-klasse, som ikke er pensum.

 

...