Coordinating Distributed Objects presents a novel object-oriented methodology to simplify the construction of distributed software systems. The methodology is based on a programming construct, called synchronizer, that allows the coordination of distributed application components to be programmed in a modular fashion and at a high level of abstraction. The methodology offers new insight into the problem of coordination in distributed systems and can be applied to a broad spectrum of distributed software systems such as process control, multimedia, and groupware.Current methodologies for developing distributed applications do not adequately address the complexity of coordinating application components. The coherence between asynchronous application components, for instance, is usually implemented by explicitly programming a large number of messages and the responses to them. The synchronizer construct, however, implements coordination as abstract and reusable coordination constraints, and thereby reduces code size and complexity by an order of magnitude.Synchronizers offer other attractions as well: they maintain procedural abstraction, data encapsulation, and inherent concurrency. Overall, they allow coordination to be expressed at a level of abstraction that is much closer to the mental model of code developers.