...
Expand | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||
Det finnes flere måter å implementere Dice-klassen og alle dens metoder, med ulike fordeler og ulemper. En måte å tillate bruk av flere implementasjoner er å gjøre om Dice til et grensesnitt og så ha en eller flere implementasjonsklasser, hvor den eksisterende Dice-klassen blir en av disse: public interface Dice { ... } public class DiceImpl1 implements Dice { ... tilsvarer løsningen i deloppgavene 1-6 ... } public class DiceImpl2 implements Dice { ... alternativ løsning ... }
Navnene på implementasjonsklassene kan selvsagt være mer forklarende. Oppgave a) - Dice-grensesnittet (4 poeng)Dette var en flervalgsoppgave med to spørsmål og valg av ett av flere alternativer.
Spørsmål 1: Tre alternative grensesnitt er foreslått, basert på den nåværende Dice-klassen:
Spørsmål 2: Den opprinnelige Dice-klassen implementerer Iterable<Integer>. Spørsmålet er hvordan dette skal håndteres ved overgangen til et Dice-grensesnitt.
Oppgave b) - Arv (6 poeng)Hvis en har flere implementasjoner av det nye Dice-grensesnittet, så kan en regne med at visse deler av disse vil bli nokså eller helt like. Ett aspekt som typisk vil bli (nokså) likt er håndtering av poengene (score). Forklar med tekst og/eller kode hvordan du vil håndtere det vha. arvingsmekanismen, slik at løsningen tillater stor grad av gjenbruk av kode i subklasser og blir ren og ryddig.
Oppgave c) - Delegering (10 poeng)Dicesin add-metode skal lage en ny Dice-instans (altså instans av en klasse som implementerer Dice) som kombinerer terningverdier fra to andre Dice-instanser (this og argumentet). En kan tenke seg at metoden returnerer en instans av en ny Dice-implementasjon kalt DiceAdder, som bruker delegering. Den vil ha to Dice-felt og en konstruktør som tar inn to Dice-instanser: DiceAdder(Dice dice1, Dice dice2) { ... feltene settes her ... } Hver Dice-metode kan da bruke/delegere til disse to Dice-instansene i sin løsning, f.eks. vil getDieCount()returnere summen av getDieCount()for hver av de to Dice-instansene: public int getDieCount() { return dice1.getDieCount() + dice2.getDieCount(); } Forklar med tekst og/eller kode hvordan delegeringsteknikken vil bli brukt i følgende metoder i en slik DiceAdder-klasse: getDieValue, getValueCount, contains, add og remove. Kommenter spesielt hvis delegeringsteknikken ikke passer for en spesifikk metode!
|
Expand | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||
Oppgave a) - final (2 poeng) Dette var en flervalgsoppgave med ett spørsmål og to korrekte alternativer og ett galt et. Spørsmål: Hvilke, om noen, av feltene øverst i FarkleRound-klassen kan ha modifikatoren final?
Oppgave b) - Kode i bank (2 poeng)Dette er en tekstinnfyllingsoppgave som vurderes automatisk. Spørsmål: Nederst i bank-metoden er en kodelinje erstattet med "... put this object in a state that indicates this round is finished ...". Skriv inn den korrekte kodelinjen. Koden må være korrekt, komplett og konsis, uten kommentarer, siden den sjekkes automatisk.
Oppgave c) - Unntakstyper (3 poeng)Dette er en flervalgsoppgave med tre spørsmål. I keepAndRoll-metoden utløses unntak i tre tilfeller. Spørsmål 1: Hvilken av disse unntakstypene passer i det første tilfellet?
Spørsmål 2: Hvilken av disse unntakstypene passer i det andre tilfellet?
Spørsmål 3: I det tredje tilfellet bruker vi unntakstypen SomeKindOfException, som er tenkt som en egendefinert unntakstype. Hvilken unntakstype bør brukes som superklassen til SomeKindOfException?
Oppgave d) - Kode i keepAndRoll (2 poeng)Nederst i keepAndRoll-metoden er én eller flere kodelinjer erstattet med "... what code needs to be here ? ...". Skrive linjen(e) som mangler. Koden vil bli lest av sensor.
|