@startuml package com.iluwatar.typeobject { class App { - LOGGER : Logger {static} + App() + main(args : String[]) {static} } class Candy { ~ name : String ~ parent : Candy ~ parentName : String - points : int - type : Type ~ Candy(name : String, parentName : String, type : Type, points : int) ~ getPoints() : int ~ getType() : Type ~ setPoints(a : int) } ~enum Type { + crushableCandy {static} + rewardFruit {static} + valueOf(name : String) : Type {static} + values() : Type[] {static} } class CandyGame { - LOGGER : Logger {static} ~ cells : Cell[][] ~ pool : CellPool ~ totalPoints : int ~ CandyGame(num : int, pool : CellPool) ~ adjacentCells(y : int, x : int) : List ~ continueRound() : boolean ~ handleChange(points : int) ~ numOfSpaces(num : int) : String {static} ~ printGameStatus() ~ round(timeSoFar : int, totalTime : int) } class Cell { ~ candy : Candy ~ positionX : int ~ positionY : int ~ Cell() ~ Cell(candy : Candy, positionX : int, positionY : int) ~ crush(pool : CellPool, cellMatrix : Cell[][]) ~ fillThisSpace(pool : CellPool, cellMatrix : Cell[][]) ~ handleCrush(c : Cell, pool : CellPool, cellMatrix : Cell[][]) ~ interact(c : Cell, pool : CellPool, cellMatrix : Cell[][]) : int } class CellPool { - RANDOM : Random {static} ~ pointer : int ~ pool : List ~ randomCode : Candy[] ~ CellPool(num : int) ~ addNewCell(c : Cell) ~ assignRandomCandytypes() : Candy[] ~ getNewCell() : Cell } class JsonParser { ~ candies : Hashtable ~ JsonParser() ~ parse() ~ setParentAndPoints() } } Cell --> "-candy" Candy Type ..+ Candy Candy --> "-type" Type Candy --> "-parent" Candy CandyGame --> "-pool" CellPool CellPool --> "-pool" Cell @enduml