21  Critique d’une conception

Dans cet exercice, l’objectif est de vous sensibiliser à la facilité de comprendre une conception à partir d’un problème. Un objectif secondaire est de considérer les choix de conception sur le plan de la cohésion et du couplage. Ici, il s’agit du jeu Monopoly, qui est un exemple proposé par Larman (2005), pour lequel il a également proposé un modèle du domaine et une conception, selon la méthodologie.

Pour cet exercice, nous examinerons une conception orientée objet réelle du jeu Monopoly disponible sur GitHub, soit Emojiopoly. Voici le travail à faire.

Diagramme de classes d’Emojiopoly

Pour visualiser la conception, nous avons généré un diagramme des classes en UML avec l’outil tplant :

Cardtext: stringaction: "advance" | "back" | "choice" | "payeach" | "collecteach" |"doubletransport" | "earn" | "pay" | "stealmoney" | "stolenmoney" |"streetrepairs" | "gotojail"value?: string | number | number[]MonopolyGamejackpot: numbercurrentTurnIndex: numberconsecutiveDoubles: numberplayers: Player[]currentPlayer: Playerdice: number[]isTurnFinished: booleanunpaidDebts: Debt[]chanceCards: Card[]chestCards: Card[]chanceCardIndex: numberchestCardIndex: numberboard: Square[]playerNames: string[]houseRules: HouseRulesmessageEventHandler: (message: string) => voidaddToJackpot(amount: number): voidrollDice(die1?: number, die2?: number): voidmoveToSquare(newSquare: Square, awardSalary?: boolean): voidsendToJail(): voidmoveBack(numberOfSpaces: number): voidpostBail(): voidtakeChance(): voidtakeChest(): voidhandleCard(card: Card): voidmovePlayer(): voidpayDebts(): voidfinishTurn(): voidHouseRulesPlayerownedProperties: Property[]currentSquare: SquareturnsInJail: numbername: stringmoney: numberPropertybuildingsCount: numberisMortgaged: booleanowner: Playername: stringcolor: "brown" | "lightblue" | "pink" | "orange" | "red" | "yellow" |"green" | "blue" | "white"price: numberrent: number[] | "transport" | "utility"buildPrice: numberSquareoccupants: Player[]squareContents: "gotojail" | Property | "go" | "jail" | "parking" |"chance" | "chest" | "incometax" | "supertax"addOccupant(occupant: Player): voidremoveOccupant(occupant: Player): voidDebtamount: numbergame: MonopolyGamedebtor: Playercreditor: PlayerinitialAmount: numberpayDebt(): voidtoString(): string**1**1*11*11

Figure 21.1: Diagramme de classes logicielles (TypeScript) pour le projet [Emojiopoly].(https://github.com/Chuzzy/Emojiopoly)

Modèle du domaine de Monopoly

Puisque la solution Emojiopoly est en anglais, vous pouvez regarder le modèle du domaine de Monopoly en français et en anglais pour vous aider à comprendre les termes.

JeuMonopolycompteurRondsvaleurPlateauPionnomJoueurargentnomCasenomPropriétéprixCaseOrdinaireCaseDépartCaseImpôtsCaseTerrainCaseGareCaseServicePublicPossède0..1*Possède11Est-sur0..81140Joue2..81Joué-avec12Joué-sur11

MDD (version française) de Monopoly proposé par Larman (2005)

MonopolyGameroundCountDiefaceValueBoardTokennamePlayercashnameSquarenamePropertypriceRegularSquareGoSquareIncomeTaxSquareLotSquareRailroadSquareUtilitySquareOwns0..1*Owns11Is-on0..81140Plays2..81Played-with12Played-on11

MDD (version anglaise) de Monopoly proposé par Larman (2005)