Contracts: specifying behavioral compositions in object-oriented systems | Synapse