Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Excerpt

På denne siden vises klasse- og objekttilstandsdiagrammer for løsningen, som hjelp til å skrive selve koden.

PlantUML Macro
interface CardContainer {
	getCardCount()
	getCard(int)
}

class CardDeck {
}
class CardHand {
}

CardContainer <|.. CardDeck
CardContainer <|.. CardHand

class Card {
	char suit
	int face
}

CardDeck "0" *--> "*" Card: cards
CardHand "0" *--> "*" Card: cards

interface "Iterator<Card>" as cardIterator {
	boolean hasNext()
	Card next()
}

class CardContainerIterator {
	int pos
}

cardIterator <|.. CardContainerIterator
CardContainerIterator -left-> "1" CardContainer: cardContainer

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.

...

PlantUML Macro
object CardDeck {
}
object "#1 : Card" as card1 {
	suit = 'S'
	face = 1
}
object "#2 : Card" as card2 {
	suit = 'S'
	face = 2
}
object "#3 : Card" as card3 {
	suit = 'H'
	face = 1
}
CardDeck --> card1: cards
CardDeck --> card2: cards
CardDeck --> card3: cards

object CardContainerIterator {
	pos = 0
}
CardContainerIterator --> CardDeck: cardContainer