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 StringGrid og StringGridIterator og klassen StringGridImpl.

StringGridImpl inneholder begge 0, 1 eller flere String-objekter. StringGrid deklarerer metoder som StringGridImpl må implementere, og som gir tilgang til String-objektene den inneholder.

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

Internt bruker StringGridIterator-objekter row- og column-attributtene for å holde rede på hvilket String-objekt som neste kall til next() skal returnere. hasNext() må bruke row og column og StringGrid-objektet sine getRowCount()- og getColumnCount()-metoder for å si om iterasjonen er ferdig, og next() må bruke row og column og StringGrid-objektet sin getElement(int, int)-metode for å få tak i riktig String-objekt. Hvert kall til next() må dessuten øke column og evt. row (og nullstille column) slik at iterasjonen går forover og til neste linje.

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 StringGridImpl-objekt, som inneholder to rader og tre kolonner med seks String-objekter, og hvordan en (og samme) StringGridIterator utvikler seg over tid gjennom en iterasjon over String-objektene som StringGridImpl-objektet inneholder, altså "en", "to", "tre", "fire", "fem" og "seks". Vi ser at StringGridIterator-objektet hele tiden er koblet til samme StringGridImpl-objekt og at det eneste som endrer seg er row, column-attributtene, som går gjennom alle par fra 0, 0 til og med 1, 2 og stopper på 2, 0 (siden 2 >= antall 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 StringGridIterator-objektet koblet til et StringGridImpl-objekt, men at det godt kunne vært en hvilken som helst instans av en klasse som implementerer StringGrid.

 

 

 

 

 

  • No labels