@startuml package RealWorldExample{ abstract DrawingElement { # name: string + DrawingElement(name: string) + virutal Add(DrawingElement) + virutal Remove(DrawingElement) + virutal Display(indent: int) } class PrimitiveElement extends DrawingElement{ + PrimitiveElement(name: string) + Add(DrawingElement) + Remove(DrawingElement) + Display(indent: int) } class CompositeElement extends DrawingElement{ + CompositeElement(name: string) - elements: List + Add(DrawingElement) + Remove(DrawingElement) + Display(indent: int) } class Program Program -l-> DrawingElement: " " CompositeElement "1" o-l--- "*" PrimitiveElement: " " } package basico { class Leaf extends Component class Composite { + Operation() + Add(Component) + Remove(Component) + GetChildren(index): Component } class Component { + Operation() + Add(Component) + Remove(Component) + GetChildren(index): Component } Composite "1" o-l- "*" Component: Children Composite -u-|> Component class Client Client -r-> Component } @enduml