...
| Dette klassediagrammet illustrerer forholdet mellom grensesnittetene CardContainer og CardContainerIterator og klassene CardDeck, CardHand og Card. StringGrid og StringGridIterator og klassen StringGridImpl. StringGridImpl CardDeck og CardHand inneholder begge 0, 1 eller flere Card String-objekter. CardContainer StringGrid deklarerer metoder som CardDeck og CardHand StringGridImpl må implementere, og som gir tilgang til Card String-objektene de den inneholder. Merk at det er implisitt at metodene deklarert i grensesnittet handler om assosiasjonen(e) til Card. StringGridIterator implementerer Iterator<String> CardContainerIterator implementerer Iterator<Card> og må derfor implementere hasNext() og next(). Den har en assosiasjon til en CardContainer en StringGrid og hasNext()- og next()-metodene brukes for å iterere over Card String-objektene som det assosierte CardContainer StringGrid-objektet inneholder. Internt bruker CardContainerIterator StringGridIterator-objekter et pos-attributt row- og column-attributtene for å holde rede på hvilket Card String-objekt som neste kall til next() skal returnere. hasNext() må bruke pos row og column og CardContainer StringGrid-objektet sin getCardCountsine getRowCount()- og getColumnCount()-metode metoder for å si om iterasjonen er ferdig, og next() må bruke pos og CardContainerbruke row og column og StringGrid-objektet sin getCardgetElement(int, int)-metode for å få tak i riktig Card String-objekt. Hvert kall til next() må dessuten øke pos, column og evt. row (og nullstille column) slik at iterasjonen går forvoverforover og til neste linje. |
| Dette objekttilstandsdiagrammet viser en objektstruktur med et CardDeck StringGridImpl-objekt, som inneholder tre Cardinneholder to rader og tre kolonner med seks String-objekter, og hvordan et en (og samme) CardContainerIterator StringGridIterator utvikler seg over tid gjennom en iterasjon over Card String-objektene som CardDeck StringGridImpl-objektet inneholder, altså #card1, #card2 og #card3 "en", "to", "tre", "fire", "fem" og "seks". Vi ser at CardContainerIterator StringGridIterator-objektet hele tiden er koblet til samme CardDeck StringGridImpl-objekt og at det eneste som endrer seg er pos row, column-attributetattributtene, som går gjennom rekka alle par fra 0, 0 til og med 1, 2 og stopper på 3 2, 0 (siden 3 2 >= antall kort)rader). Her er det ikke tatt hensyn til rowMajor-logikken, som oppgaven etterspør, men det endrer ikke så mye, kun hvilken av column og row som økes først. Merk at i dette eksemplet er CardContainerIterator StringGridIterator-objektet koblet til et CardDeck StringGridImpl-objekt, men at det godt kunne vært et CardHand-objekt eller en hvilken som helst instans av en klasse som implementerer CardContainer StringGrid.
|