...
Expand | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||
Oppgave a) - Konstruktører (8 poeng)Skriv kode for de to konstruktørene (merk forskjellen i argumenttype), slik at valueCounters blir riktig initialisert. Du SKAL IKKE innføre andre felt. Du kan lage hjelpemetoder om du ønsker. For begge konstruktørene er argumentet en sekvens med terningverdier (altså ikke tellere) som den nyinitialiserte instansen skal representere. Merk at det er lov å lage ekstra konstruktører for å gjøre andre metoder, f.eks. add og remove, enklere å skrive.
Oppgave b) - Terningverdier (8 poeng)Skriv metodene getDieCount, getDieValue og getValueCount iht. forklaringen og koden gitt tidligere (API-beskrivelsen).
Oppgave c) - Flere metoder (8 poeng)Skriv metodene contains, isSame, add og remove, som alle tar et Dice-objekt som eneste argument. Merk at ingen av disse endrer på verken this-objektet eller argumentet. Her er noen eksempler på bruken av disse metodene, hvor [t1, t2, t3, ... tn] brukes som pseudo-synaks for et Dice-objekt som representerer terningverdiene t1-tn: [1, 2, 2, 4].contains([1, 4]) returnerer true, mens [1, 2, 4].contains([2, 2]) returnerer false. [1, 2, 2, 4].isSame([1, 2, 2, 4]) returnerer true, mens [1, 2, 2, 4].isSame([1, 2, 4]) returnerer false [1, 2].add([1, 4]) returnerer [1, 1, 2, 4] [1, 1, 2].remove([1, 4]) returnerer [1, 2] Merk at removei kke har samme logikk som Collectionsin removeAll-metode.
Oppgave d) - DiceIterator (6 poeng)Lag en implementasjon av Iterator<Integer>kalt DiceIterator, slik at den kan brukes slik det er vist i Dice sin iterator()-metode. Du kan anta at valueCounters-feltet i Dice er synlig i DiceIterator-klassen.
|
Expand | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Expand | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oppgave a) - DiceScore-klassen (6 poeng)Skriv ferdig DiceScore-klassen, med egnede felt, konstruktørkode og tilgangsmetoder, med utgangspunkt at DiceScore-objekter ikke skal kunne endres etter at de er opprettet.
Oppgave b) - SingleValue-klassen (6 poeng)Skriv kode for klassen SingleValue(enkeltverdi), som implementerer DiceScorermed følgende logikk: For et Dice-argument som ikke inneholder den spesifikke verdien returneres null. Ellers returneres et (nytt) DiceScore-objekt med riktige verdier satt.
Oppgave b) - SingleValue-klassen (6 poeng)Skriv kode for klassen SingleValue(enkeltverdi), som implementerer DiceScorermed følgende logikk: For et Dice-argument som ikke inneholder den spesifikke verdien returneres null. Ellers returneres et (nytt) DiceScore-objekt med riktige verdier satt. Merk at klassen bare gir poeng for Merk at klassen bare gir poeng for én av den angitte verdien, selv om Dice-objektet inneholder flere av denne verdien. Eksempel: Et SingleValue-objekt opprettet med new SingleValue(5, 50), vil gi 50 poeng for et Diceobjekt med én eller flere femmere. DiceScore-objektet som returneres skal inneholde et Dice-objekt med bare én femmer og (poeng)tallet 50.
Oppgave c) - Straight-klassen (8 poeng)Skriv kode for klassen Straight(alle terningene utgjør en serie), som implementerer DiceScorermed følgende logikk: For et Dice-argument uten straightreturneres null. Ellers returneres et (nytt) DiceScore-objekt med riktige verdier satt. Poengene som gis er en spesifikk verdi (konstant) som settes når Straight-objektet opprettes. Merk at koden skal virke selv om det er (mange) færre eller flere terninger enn mulige terningverdier (1-6). Et Dice-objekt med bare én terningverdi vil f.eks. alltid gi straight, mens et Dice-objekt med flere enn 6 terningverdier aldri kan gi straight.
Oppgave d) - Nothing-klassen (8 poeng)Skriv kode for klassen Nothing, som implementerer DiceScorer med følgende logikk: Et spesifikt antall poeng gis hvis ingen (andre) poengregler gir poeng. De andre reglene representeres av et sett DiceScore-objekter som gis inn når Nothing-objektet opprettes. Dette gjør at Nothing-klassen ikke trenger å duplisere logikk som er spesifikke for andre regler. Bestem selv typen til diceScorers-argumentet som gis inn. Merk at denne regelen bare gjelder hvis Dice-argumentet til getScore-metoden inneholder minst et visst antall terninger, typisk like mange som brukes i spillet. Dette minsteantallet gis også inn ved opprettelse av Nothing-objektet.
Oppgave e) - Mer om Nothing-klassen (4 poeng)Hva kalles implementasjonsteknikken som det legges opp til at Nothingskal bruke? Begrunn svaret, f.eks. ved å forklare (kort) hva som er karakteristisk for denne teknikken.
Oppgave f) - DiceScorer-deklarasjon (4 poeng) Når en lager en instans av et DiceScorer-objekt og lagrer (referansen til) det i en variabel, så kreves det at variablen er deklarert med en egnet type. Anta at en har følgende deklarasjon med initialisering: ??? aSingleValueObject = new SingleValue(1, 100); Hvilke (tre) mulige typer er det lov å skrive der det står ???, hva er avgjørende for valget og hva vil man typisk bruke?
Oppgave g) - Arv med AbstractScorer (6 poeng) De tre implementasjonene av DiceScorer(SingleValue, Straight og Nothing) har én ting felles. Forklar med tekst og/eller kode hvordan du vil utforme en felles superklasse (f.eks. kalt AbstractScorer) for disse tre, og hvordan de tre implementasjonene vil måtte endres for å fungere som subklasser.
|
Expand | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||
Oppgave a) - Iterasjon (6 poeng)Du ønsker å skrive ut (med System.out.print(...)) alle terningverdiene som et Dice-objekt representerer, men oppdager at den ikke har en egen toString()-metode som kan brukes. Skriv vanlig iterativ løkkekode som skriver ut alle terningverdiene til et Dice-objekt med mellomrom mellom (det gjør ikke noe om det kommer et ekstra mellomrom bakerst): Dice dice = new Dice(...); ??? Hva skal stå her for å få skrevet ut alle terningverdiene i dice?
Skriv kode som har samme effekt, men som utnytter et funksjonelt grensesnitt (se ressurs med Java-API) og Java 8 sin lambda-syntaks: dice. ??? Hva skal stå her for å få skrevet ut alle terningverdiene i dice?
Oppgave b) - Testing av Dice-klassen (6 poeng)Skriv en eller flere test-metoder for Dice sin contains-metode. Tenk spesielt på å teste grensetilfeller, som det kan tenkes ikke håndteres riktig!
Oppgave c) - Diagramtyper (4 poeng)Hva er forskjellen (hensikt og innhold) mellom objektdiagrammer og objekttilstandsdiagrammer?
Oppgave d) - Observerbarhet (6 poeng)Hva er hensikten med observert-observatør-teknikken? Hva vil det si at et objekt er observerbart? Du blir bedt om å gjøre Dice-objekter observerbare. Forklar med tekst og evt. kode hva du vil gjøre for å møte dette kravet.
|
Oppgave c) - Straight-klassen (8 poeng)Skriv kode for klassen Straight(alle terningene utgjør en serie), som implementerer DiceScorermed følgende logikk: For et Dice-argument uten straightreturneres null. Ellers returneres et (nytt) DiceScore-objekt med riktige verdier satt. Poengene som gis er en spesifikk verdi (konstant) som settes når Straight-objektet opprettes. Merk at koden skal virke selv om det er (mange) færre eller flere terninger enn mulige terningverdier (1-6). Et Dice-objekt med bare én terningverdi vil f.eks. alltid gi straight, mens et Dice-objekt med flere enn 6 terningverdier aldri kan gi straight.
Oppgave d) - Nothing-klassen (8 poeng)Skriv kode for klassen Nothing, som implementerer DiceScorer med følgende logikk: Et spesifikt antall poeng gis hvis ingen (andre) poengregler gir poeng. De andre reglene representeres av et sett DiceScore-objekter som gis inn når Nothing-objektet opprettes. Dette gjør at Nothing-klassen ikke trenger å duplisere logikk som er spesifikke for andre regler. Bestem selv typen til diceScorers-argumentet som gis inn. Merk at denne regelen bare gjelder hvis Dice-argumentet til getScore-metoden inneholder minst et visst antall terninger, typisk like mange som brukes i spillet. Dette minsteantallet gis også inn ved opprettelse av Nothing-objektet.
Oppgave e) - Mer om Nothing-klassen (4 poeng)Hva kalles implementasjonsteknikken som det legges opp til at Nothingskal bruke? Begrunn svaret, f.eks. ved å forklare (kort) hva som er karakteristisk for denne teknikken.
Oppgave f) - DiceScorer-deklarasjon (4 poeng) Når en lager en instans av et DiceScorer-objekt og lagrer (referansen til) det i en variabel, så kreves det at variablen er deklarert med en egnet type. Anta at en har følgende deklarasjon med initialisering: ??? aSingleValueObject = new SingleValue(1, 100); Hvilke (tre) mulige typer er det lov å skrive der det står ???, hva er avgjørende for valget og hva vil man typisk bruke?
Oppgave g) - Arv med AbstractScorer (6 poeng) De tre implementasjonene av DiceScorer(SingleValue, Straight og Nothing) har én ting felles. Forklar med tekst og/eller kode hvordan du vil utforme en felles superklasse (f.eks. kalt AbstractScorer) for disse tre, og hvordan de tre implementasjonene vil måtte endres for å fungere som subklasser.
|
Expand | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||
Oppgave a) - Iterasjon (6 poeng)Du ønsker å skrive ut (med System.out.print(...)) alle terningverdiene som et Dice-objekt representerer, men oppdager at den ikke har en egen toString()-metode som kan brukes. Skriv vanlig iterativ løkkekode som skriver ut alle terningverdiene til et Dice-objekt med mellomrom mellom (det gjør ikke noe om det kommer et ekstra mellomrom bakerst): Dice dice = new Dice(...); ??? Hva skal stå her for å få skrevet ut alle terningverdiene i dice?
Skriv kode som har samme effekt, men som utnytter et funksjonelt grensesnitt (se ressurs med Java-API) og Java 8 sin lambda-syntaks: dice. ??? Hva skal stå her for å få skrevet ut alle terningverdiene i dice?
Oppgave b) - Testing av Dice-klassen (6 poeng)Skriv en eller flere test-metoder for Dice sin contains-metode. Tenk spesielt på å teste grensetilfeller, som det kan tenkes ikke håndteres riktig!
Oppgave c) - Diagramtyper (4 poeng)Hva er forskjellen (hensikt og innhold) mellom objektdiagrammer og objekttilstandsdiagrammer?
Oppgave d) - Observerbarhet (6 poeng)Hva er hensikten med observert-observatør-teknikken? Hva vil det si at et objekt er observerbart? Du blir bedt om å gjøre Dice-objekter observerbare. Forklar med tekst og evt. kode hva du vil gjøre for å møte dette kravet.
|
Expand | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||
Du skal lage en liten JavaFX-app for å teste DiceScorer-implementasjonene dine, altså SingleValue-, Straight- og Nothing-klassene. Følgende oppførsel skal støttes:
Illustrasjonen for oppgaven viser resultatet etter at knappen tilsvarende Straight er trykket. Følgende FXML er skrevet for appen:
| |||||||||||||||||||||
Expand | |||||||||||||||||||||
| |||||||||||||||||||||
Du skal lage en liten JavaFX-app for å teste DiceScorer-implementasjonene dine, altså SingleValue-, Straight- og Nothing-klassene. Følgende oppførsel skal støttes:
Illustrasjonen for oppgaven viser resultatet etter at knappen tilsvarende Straight er trykket. Følgende FXML er skrevet for appen:
Skriv en JavaFX-kontroller som implementerer ønsket oppførsel, basert på kodeskjelettet nedenfor. Den skal passe til den oppgitte FXML-en og bruke klasser og metoder beskrevet tidligere i oppgavesettet. Du kan anta at Dice har en passende toString()-metode.
Skriv en JavaFX-kontroller som implementerer ønsket oppførsel, basert på kodeskjelettet nedenfor. Den skal passe til den oppgitte FXML-en og bruke klasser og metoder beskrevet tidligere i oppgavesettet. Du kan anta at Dice har en passende toString()-metode.
Hvis det er detaljer du er usikker på, så forklar med tekstkommentarer i koden.
Hvis det er detaljer du er usikker på, så forklar med tekstkommentarer i koden.
|