2021-03-23 22:54:32 +01:00
# Interface - CardContainer-oppgave
Denne oppgaven handler om å lage et felles grensesnitt for `CardDeck` - og `CardHand` -klassene, laget i oppgavene
[Innkapsling - Card-oppgave ](../oving3/Card.md ) og
2021-08-29 20:36:32 +02:00
[Objektstrukturer - Card-oppgave del 2 ](../oving4/Card.md ).
2021-03-23 22:54:32 +01:00
Her skal du lage og implementere et grensenitt kalt `CardContainer` , som spesifiserer metoder for lesing av samlinger av Card-objekter.
#### Del 1 - CardContainer interface
Definer et `CardContainer` -grensesnitt, med metodene som er felles for `CardHand` og `CardDeck` :
* `getCardCount()` - returnerer antall kort som dette objektet inneholder
* `getCard(int n)` - returnerer kort nr. `n` i dette objektet
Gjør nødvendig endringer i `CardHand` - og `CardDeck` -klassene for å implementere `CardContainer` -grensesnittet.
#### Del 2 - Iterator for CardContainer
Lag en klasse kalt `CardContainerIterator` , som er en [Iterator ](https://www.ntnu.no/wiki/display/tdt4100/Iterasjon+med+Iterator+og+Iterable )
for alle klasser som implementerer `CardContainer` -grensesnittet. `CardContainerIterator` må ha en konstruktør som tar inn en instans av
(en klasse som implementerer) `CardContainer` .
*Hint*: Merk at `CardContainerIterator` ikke vet om `CardContainer` -objektet er et `CardDeck` -objekt, et `CardHand` -objekt eller et annet
objekt som implementerer `CardContainer` . Den har derfor ikke tilgang til de interne listene i `CardHand` og `CardDeck` .
Hvilke metoder må alle klasser som implementerer `CardContainer` ha, og hvordan kan disse metodene brukes for å lage en
[Iterator ](https://www.ntnu.no/wiki/display/tdt4100/Iterasjon+med+Iterator+og+Iterable )?
Testkode for oppgaven finner du her: [interfaces/CardDeckTest.java ](../../src/test/java/interfaces/CardDeckTest.java ), [interfaces/CardHandTest.java ](../../src/test/java/interfaces/CardHandTest.java ) og [interfaces/CardContainerIteratorTest.java ](../../src/test/java/interfaces/CardContainerIteratorTest.java ).
#### Ekstraoppgave
La `CardContainer` -grensesnittet utvide (`extends`) `Iterable<Card>` og la `iterator()` -metoden som dermed kreves, returnere en korrekt
konfigurert instans av `CardContainerIterator` .