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

Compare with Current View Page History

« Previous Version 3 Next »

På denne siden vises klasse- og objekttilstandsdiagrammer for løsningen, som hjelp til å skrive selve koden.
StringGridgetRowCount()getColumnCount()getElement(int row, int column)StringGridImplIteratorStringboolean hasNext()String next()StringGridIteratorint rowint columngrid1

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.

StringGridImpl"en" "to" "tre""fire" "fem" "seks"StringGridIteratorrow = 0column = 0StringGridIteratorrow = 0column = 1StringGridIteratorrow = 0column = 2StringGridIteratorrow = 1column = 0StringGridIteratorrow = 1column = 1StringGridIteratorrow = 1column = 2StringGridIteratorrow = 2column = 0stringGridstringGridhasNext() => truenext() => enstringGridhasNext() => truenext() =>tostringGridhasNext() => truenext() =>trestringGridhasNext() => truenext() =>firestringGridhasNext() => truenext() =>femstringGridhasNext() => truenext() =>sekshasNext() => false

Dette objekttilstandsdiagrammet viser en objektstruktur med et CardDeck-objekt, som inneholder tre Card-objekter, og hvordan et (og samme) CardContainerIterator utvikler seg over tid gjennom en iterasjon over Card-objektene som CardDeck-objektet inneholder, altså #card1, #card2 og #card3. Vi ser at CardContainerIterator-objektet hele tiden er koblet til samme CardDeck-objekt og at det eneste som endrer seg er pos-attributet, som går gjennom rekka 0, 1, 2 og stopper på 3 (siden 3 >= antall kort).

Merk at i dette eksemplet er CardContainerIterator-objektet koblet til et CardDeck-objekt, men at det godt kunne vært et CardHand-objekt eller hvilken som helst instans av en klasse som implementerer CardContainer.

 

 

 

 

 

  • No labels