@startuml ' TODO: ' - state snapshots (memento) ' - send commands from GUI !include style.ipuml ' !include hide-groups.ipuml ' !include hide-details.ipuml class main as "main()" hide main circle hide main members exception Exception { + Exception(const char* fmt, ...) + what() : const char* -- # error : char* # va_format(va_list args, const char* fmt) } rectangle "File reading" <> { class FileReader <> { +open(url) : File& } interface File { + read() : string + close() -- # open(string url) # clone() : File* <> } class LocalFile { - instance : LocalFile <> } class HTTPFile { - instance : HTTPFile <> } package CPR { class Response <> class Url <> } File <|.. LocalFile File <|.. HTTPFile File <. FileReader File .> FileReader HTTPFile --> CPR.Response CPR.Response - CPR.Url } rectangle "Parsing & deserialization" <> { interface Parser { + parse(File) + heuristic(File) : unsigned int } File <.. Parser class CSVParser class XMLParser class TXTParser Parser <|-- CSVParser Parser <|-- TXTParser Parser <|-- XMLParser class Deserializer class PeopleDeserializer { + set_target(People &) -- + add_artist(float, float, float, float) } class CanvasDeserializer { + set_target(Canvas &) -- + set_rows(unsigned int) + set_meta_cols(unsigned int) + add_meta_type(string, Color, unsigned int) + add_tile(unsigned int, unsigned int, string) } Deserializer <|-- PeopleDeserializer Deserializer <|-- CanvasDeserializer } rectangle "Model" <> { class Canvas { + get_tile(x, y) + set_tile(x, y) - data : CanvasData - tiles : Tile[] } class People { - artists : Artist[] } class Museum { + load : - artists : People - canvas : Canvas } ' TODO color : Color? class Tile { + data : TileData } struct TileData { + type : string } class Artist { + update() -- - data : ArtistData } struct ArtistData { + x : float + y : float + vx : float + vy : float } struct CanvasData { + rows : unsigned int + columns : unsigned int } Museum --> People Museum --> Canvas Canvas --> Tile People --> Artist Tile --> TileData Artist --> ArtistData Canvas --> CanvasData ' LAYOUT Artist -r[hidden] Tile Tile -r[hidden] CanvasData } rectangle "Visualization" <> { package SDL2 { } class View { } class ViewController { } ViewController --> View View --> SDL2 } class TileAppearance { + color : Color } class TileBehavior class GrayTileBehavior class RedTileBehavior class BlueTileBehavior class YellowTileBehavior struct Color { red : unsigned int green : unsigned int blue : unsigned int } PeopleDeserializer <... People CanvasDeserializer <... Canvas Deserializer <... Museum TileBehavior <|-- GrayTileBehavior TileBehavior <|-- RedTileBehavior TileBehavior <|-- BlueTileBehavior TileBehavior <|-- YellowTileBehavior TileAppearance .r Color ' LAYOUT PeopleDeserializer -r[hidden] CanvasDeserializer @enduml