@startuml

package libcanvas {
class CanvasImpl {
    Implementation of Canvas interface
}
class PaintingTool
class Rectangle
class Circle
class Triangle

interface Shape {
    Responsible for drawing objects on a canvas
}

interface Canvas {
    Responsible for managing the state of 2D canvas
}

class Controller {
    Responsible for handling user events
}

CanvasImpl -up-|> Canvas
Rectangle -up-|> Shape
Circle -up-|> Shape
Triangle -up-|> Shape

CanvasImpl -down-> PaintingTool : creates
PaintingTool <-up- Rectangle : uses
PaintingTool <-up- Circle : uses
PaintingTool <-up- Triangle : uses
Controller --> Canvas : uses
}

package GUI {
}

GUI -- Controller

@enduml