@startuml class App class GameObject interface GraphicComponent interface InputComponent interface PhysicComponent class ObjectGraphicComponent class DemoInputComponent class PlayerInputComponent class ObjectPhysicComponent GraphicComponent <|.. ObjectGraphicComponent InputComponent <|.. DemoInputComponent InputComponent <|.. PlayerInputComponent PhysicComponent <|.. ObjectPhysicComponent GameObject *-- ObjectGraphicComponent GameObject *.. DemoInputComponent GameObject *.. PlayerInputComponent GameObject *-- ObjectPhysicComponent class App { +main(String[] args) } class GameObject{ - inputComponent; - physicComponent; - graphicComponent; - name; - velocity - coordinate +GameObject() +createPlayer() +createNpc() +demoUpdate() +update(e:int) +getName() +getVelocity() +setVelocity(acceleration:int) +getCoordinate() +setCoordinate() } interface GraphicComponent{ +update() } interface InputComponent{ +update() } interface PhysicComponent{ +update() } class ObjectGraphicComponent{ +update(gameObject:GameObject) } class DemoInputComponent{ -walkAcceleration +update(gameObject:GameObject,e:int) } class PlayerInputComponent{ -walkAcceleration +update(gameObject:GameObject,e:int) } class ObjectPhysicComponent{ +update(gameObject:GameObject) } @enduml