@startuml !theme plain skinparam linetype ortho skinparam classAttributeIconSize 0 ' skinparam packageStyle rectangle class main as "main()" hide main circle hide main members class FileReader { + open(path) + read() + close() - protocol } class LocalFile class HTTPFile class Canvas { + get_tile(x, y) + set_tile(x, y) } class Tile class TileFactory class TileBehavior class GrayTileBehavior class RedTileBehavior class BlueTileBehavior class YellowTileBehavior class Artist class ArtistDeserializer class CanvasDeserializer package CPR { } package SDL2 { } interface Parser { + parse(f: FileReader) } class CSVParser class XMLParser class TXTParser FileReader <|-- LocalFile FileReader <|-- HTTPFile Canvas "1" -> "*" Tile TileBehavior <|-- GrayTileBehavior TileBehavior <|-- RedTileBehavior TileBehavior <|-- BlueTileBehavior TileBehavior <|-- YellowTileBehavior Parser <|-- CSVParser Parser <|-- TXTParser Parser <|-- XMLParser HTTPFile ..> CPR TileFactory --> Tile : create @enduml