You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 16 Next »

På denne siden vises klasse- og objekttilstandsdiagrammer for løsningen, som hjelp til å skrive selve koden.
CardContainergetCardCount()getCard(int)CardDeckCardHandCardchar suitint faceIteratorCardboolean hasNext()Card next()CardContainerIteratorint poscards0*cards0*cardContainer1

Dette klassediagrammet illustrerer forholdet mellom grensesnittetene CardContainer og CardContainerIterator og klassene CardDeck, CardHand og Card.

CardDeck og CardHand inneholder begge 0, 1 eller flere Card-objekter. CardContainer deklarerer metoder som CardDeck og CardHand må implementere, og som gir tilgang til Card-objektene de inneholder. Merk at det er implisitt at metodene deklarert i grensesnittet handler om assosiasjonen(e) til Card.

CardContainerIterator implementerer Iterator<Card> og må derfor implementere hasNext() og next(). Den har en assosiasjon til en CardContainer og hasNext()- og next()-metodene brukes for å iterere over Card-objektene som det assosierte CardContainer-objektet inneholder.

Internt bruker CardContainerIterator-objekter et pos-attributt for å holde rede på hvilket Card-objekt som neste kall til next() skal returnere. hasNext() må bruke pos og CardContainer-objektet sin getCardCount()-metode for å si om iterasjonen er ferdig, og next() må bruke pos og CardContainer-objektet sin getCard(int)-metode for å få tak i riktig Card-objekt. Hvert kall til next() må dessuten øke pos, slik at iterasjonen går forvover.

CardDeck1.card0 : Cardsuit = 'S'face = 11.card1 : Cardsuit = 'S'face = 21.card2 : Cardsuit = 'H'face = 1CardContainerIteratorpos = 0CardDeck1.card0 : Cardsuit = 'S'face = 11.card1 : Cardsuit = 'S'face = 21.card2 : Cardsuit = 'H'face = 1CardContainerIteratorpos = 1pos = 1CardDeck1.card0 : Cardsuit = 'S'face = 11.card1 : Cardsuit = 'S'face = 21.card2 : Cardsuit = 'H'face = 1CardContainerIteratorpos = 2CardDeck1.card0 : Cardsuit = 'S'face = 11.card1 : Cardsuit = 'S'face = 21.card2 : Cardsuit = 'H'face = 1CardContainerIteratorpos = 3cardscardscardscardContainercardscardscardscardContainercardContainerhasNext() => truenext() => #card0cardscardscardscardContainernext() => #card1next() => #card1hasNext() => truecardscardscardscardContainerhasNext() => truenext() => #card2hasNext() => false 
  • No labels