Increasingly, complex software systems are being constructed as compositions of reusable software components. One critical issue for such constructions is the design and implementation of the interaction mechanisms, or connectors, that permit the various software components to work together properly. Complex systems also often have extra-functional requirements which these connectors must satisfy. It is not always possible to find an existing connector that satisfies the requirements of the system, and at present it is time-consuming and difficult to create new kinds of connectors. A principled, compositional means of systematically constructing connectors is needed. In this thesis I describe a new approach in which a basic connector type (such as RPC or data streams) can be augmented with selected adaptations or enhancements to produce a more complex connector type. I characterize a small set of structural transformations that can be applied compositionally to basic connector types to arrive at a wide variety of useful complex connector types. I give formal semantics for these transformations and demonstrate that it is possible to semi-automatically generate implementations of instances of the new connector types. I explore and evaluate this idea in the context of dependability, using transformations to increase the reliability of existing component interaction mechanisms.