Component based development is seen as a way to increase programmer productivity and reduce software maintenance costs through the reuse of off-the-shelf software components. Component-based development is distinguished from object-orientation in that systems are defined by the composition of black-box components that
interact according to well-defined protocols. Current component models define interaction protocols between components as object interfaces. Such an approach is limited: an interface can only describe bundles of synchronous,
request/reply operations, but cannot specify the protocol by which those operations must be invoked or how multiple interfaces are to be used in concert. Yet all but the simplest component models define interaction protocols
that involve multiple parties, many-to-one communication or concurrency between communicating parties.
We introduce a model of component interaction that addresses the limitations of object invocation. This interaction
model is used as the basis for a language, Midas, that is used to define interaction protocols between components.
Midas definitions can be annotated with formal specifications of properties of the protocol. We show how the use
of a notation to define the interaction protocol allows one to mechanically check the behaviour of the interaction
protocol over different transports, thereby catching errors at the design stage. Models can also be translated into
Midas definitions are compiled into runtime support code that makes use of the transport framework. This framework hides the platform-specific transport API and defines transport protocols as compositions of lightweight components. This componentisation of the transport protocol allows the designer to select the most appropriate protocol
for each binding and insert additional functionality, such as compression or encryption, above existing protocols.
Tests show that this componentisation does not effect the latency or throughput of a binding compared to the use
of a traditional implementation.