@startuml Client -> Node Node <|- Leaf Node <|-- Tree Node <--o Tree interface Node { {abstract} +Request() {abstract} +Add(Node) {abstract} +Remove(Node) {abstract} +GetChild(int) } class Leaf { +Request() } class Tree { -children : List +Request() +Add(Node) +Remove(Node) +GetChild(int) } note right of Tree Tree::Request() { for (auto c : children) c->Request(); } end note hide empty attributes hide empty methods @enduml