Oppgave a)Gitt følgende klasse: Code Block |
---|
| 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 |
---|
|
| 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 |
---|
| 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 |
---|
| 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 |
---|
| 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. |
|