Versions Compared

Key

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

...

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" as cardDeck0 {
}
object "#1 : Card" as card1card10 {
	suit = 'S'
	face = 1
}
object "#2 : Card" as card2card20 {
	suit = 'S'
	face = 2
}
object "#3 : Card" as card3card30 {
	suit = 'H'
	face = 1
}
CardDeckcardDeck0 --> card1card10: cards
CardDeckcardDeck0 --> card2card20: cards
CardDeckcardDeck0 --> card3card30: cards

object "CardContainerIterator" as iterator0 {
	pos = 0
}
iterator0 --> cardDeck0: cardContainer

object "CardDeck" as cardDeck1 {
}
object "#1 : Card" as card11 {
	suit = 'S'
	face = 1
}
object "#2 : Card" as card21 {
	suit = 'S'
	face = 2
}
object "#3 : Card" as card31 {
	suit = 'H'
	face = 1
}
cardDeck1 --> card11: cards
cardDeck1 --> card21: cards
cardDeck1 --> card31: cards

object "CardContainerIterator" as iterator1 {
	pos = 1
}
iterator1 --> CardDeckcardDeck1: cardContainer


iterator1 ..> iterator2: next()