@startuml package "Public API" <> #DDDDDD { interface IConnection { +requestName() +enterProcessLoop() +leaveProcessLoop() } interface IObject { +registerMethod() +emitSignal() } interface IProxy { +callMethod() +subscribeToSignal() +get/setProperty() } class Message { +serialize(...) +deserialize(...) +send() Type msgType } } interface IConnectionInternal { +addObjectVTable() +createMethodCall() +createSignal() } class Connection { } class Object { IConnectionInternal& connection string objectPath List interfaces List methods List signals List properties } class Proxy { IConnectionInternal& connection string destination string objectPath List signalHandlers } IConnection <|-- Connection IConnectionInternal <|- Connection IObject <|-- Object IProxy <|-- Proxy Connection <-- Object : "use" Connection <-- Proxy : "use" Message <.. Object : "send/receive" Message <.. Proxy : "send/receive" @enduml