Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Expand
titleDel 1 - Teori (20%)
Oppgave a)

Gitt følgende klasse:

Code Block
themeEclipse
languagejava
public class MysticalObject {

	private int number;

	public MysticalObject(int number) {
		this.number = number;
	}

	public void step() {
		number = -(number - (int) Math.signum(number));
	}

	public int getNumber() {
		return number;
	}
}

Tegn et objekttilstandsdiagram for et MysticalObject-objekt som er instansiert med new MysticalObject(3), som viser oppførselen til getNumber- og step-metodene.

Expand
titleLF

Her er oppgaven dels å forstå koden, dels å kjenne diagramnotasjonen og dels å skjønne hva som er relevant å ha med.

 
Oppgave b)

Objekttilstandsdiagrammer kan brukes til å beskrive oppførselen til et objekt. Angi en viktig fordel og en ulempe/begrensning ved slik bruk.

Expand
titleLF
 Fordeler: Eksempel på forløp kan være enklere å forstå enn en komplett definisjon i form av regler (invarianter). Diagrammer kan være mer intuitive enn tekst. Det er lett å skrive test-kode basert på diagrammet.

Ulemper: Diagrammene blir lett store, hvis de skal dekke alle relevante tilfeller. Det er kun i enkle tilfeller en kan beskrive oppførselen komplett.

Oppgave c)

Java krever at en deklarerer typen til alle felt, variabler og parametre (i motsetning f.eks. Python, Javascript og Matlab). Hva er de viktigste fordelene dette gir?

Expand
titleLF

 De blir lettere å:

  • oppdage/hindre feil bruk av verdier (for verktøy, kompilator og programmerer)

  • tilby hjelp til kodingen, f.eks. foreslå metoder

  • kompilere til effektiv kode 

Oppgave d)

I koden over så står det (int) foran kallet til Math.signum. Hva kalles dette (denne typen uttrykk) og hvordan virker det (påvirker det utførelsen) i dette tilfellet? Den samme syntaksen kan også brukes i tilfeller hvor typen er en klasse eller et grensesnitt. Hvordan virker det da?

Expand
titleLF
 Det kalles casting og brukes for å ”tvinge” Java til å ”akseptere” at uttrykket som helhet har den angitte typen. Når det brukes på tall-typer, så vil Java konvertere fra den ene til den andre typen (her: fra float til int). Når casting brukes med klasser/grensesnitt så vil det sjekkes at det indre uttrykket har den angitt typen, og hvis ikke så utløses ClassCastException.

...