38 lines
2.2 KiB
Markdown
38 lines
2.2 KiB
Markdown
# Arv - CardContainerImpl-oppgave
|
|
|
|
Denne oppgaven handler om å lage en felles superklasse `CardContainerImpl`
|
|
for `CardDeck`- og `CardHand`-klassene, laget i [Card-oppgaven](../oving4/Card.md)
|
|
og [CardContainer-oppgaven](../oving5/CardContainer.md).
|
|
|
|
**Merk:** Om du ikke har gjort Card-oppgaven og CardContainer-oppgaven allerede,
|
|
kan du bruke løsningsforslaget som er lagt ut for disse under `lf/src/interfaces`.
|
|
|
|
### Del 1 - Superklassen CardContainerImpl
|
|
Lag en `CardContainerImpl`-superklasse, som implementerer grensesnittet
|
|
`CardContainer` (se [CardContainer-oppgaven](../oving5/CardContainer.md)) og
|
|
inneholder koden som er felles for `CardDeck` og `CardHand`.
|
|
|
|
La `CardDeck` og `CardHand` arve `CardContainerImpl` og gjør nødvendige endringer
|
|
i disse klassene, slik at totaloppførselen er som før. F.eks. skal `CardDeck`
|
|
-objektet ha samme konstruktør som før, som skal sikre samme initielle tilstand
|
|
(men ikke nødvendigvis med samme konstruktør-kode).
|
|
|
|
Merk at målet er at mest mulig kode skal flyttes til *superklassen* og gjenbrukes
|
|
i *subklassene*. Det er viktig å bruke innkapsling rett
|
|
(hint: `protected`-modifikatoren) for å nyttiggjøre seg superklassen i størst
|
|
mulig grad.
|
|
|
|
### Del 2 - Regler for maksimalt antall kort
|
|
Anta at en ønsker å unngå at instanser av `CardContainerImpl` (eller av en av
|
|
subklassene) inneholder for mange kort. Legg til et *privat* `maxCardCount`-felt
|
|
i `CardContainerImpl`, en konstruktør som *initialiserer* feltet og en *getter*
|
|
for å lese verdien. Legg så til evt. endre kode i `CardContainerImpl` som sikrer
|
|
at antall kort ikke overstiger dette tallet og at subklassene ikke kan omgå
|
|
denne valideringen.
|
|
|
|
`CardContainerImpl`-subklassene `CardDeck` og `CardHand` skal sette maks-antallet
|
|
som følger: `CardDeck` skal sette makstallet til *52* og `CardHand` skal ta
|
|
inn maks-antallet i *sin* konstruktør. Hvis man forsøker å legge til flere kort
|
|
enn hva som er tillatt i `CardHand`, skal det utløses en `IllegalStateException`.
|
|
|
|
Testkode for oppgavene finner du her: [inheritance/CardDeckTest.java](../../src/test/java/inheritance/CardDeckTest.java) og [inheritance/CardHandTest.java](../../src/test/java/inheritance/CardHandTest.java). |