@startuml
    abstract Identifiable
    interface Allocable
    interface Uncopyable
    abstract AbstractApplication
    abstract AbstractController
    class WindowManager << (S, #FF7700) >>
    class Initializer << (S, #FF7700) >>
    Window --down|> Identifiable
    Window ..down|> Allocable
    Window ..down|> Uncopyable
    Window -left- "1" SDL_Window
    Window .right. WindowManager : queryId
    WindowManager .right. Initializer : initializeSDL
    GLWindow --down|> Window
    GLWindow -left- "1" SDL_GLContext
    Stage --down|> GLWindow
    Stage -left- "1" Viewport
    AbstractApplication -down- "1" Stage
    AbstractApplication -left- "*" AbstractController
@enduml
