The oft-referenced Christopher Alexander has made similar observations to the domain of architecture, and his work has instigated a minor revolution in that field. Using the terms suggested by Rob Murray, I distinguish between the strategic and tactical design decisions. A tactical decision is one that has more local implications, such as the protocol of a specific class, or the signature of a member function. Most important, perhaps, our strategic decisions have the greatest impact on our ability to craft simple, elegant architectures. Whereas the design of a class embodies the knowledge of how individual objects behave, a mechanism is a design decision about how collections of objects cooperate.
Mechanisms thus represent patterns of behavior.
Whereas abstractions reflect the vocabulary of the problem domain, mechanisms are the soul of the design. During the design process, the developer must consider not only the design of individual classes, but also how instances of these classes work together. Once a developer decides upon a particular pattern of collaboration, the work is distributed among many objects by defining suitable methods in the appropriate classes. Ultimately, the protocol of an individual class encompasses all the operations required to implement all the behavior and all the mechanisms associated with each of its instances. One of the contributions Linnaeus made to the field of botany was the suggestion that patterns may be found in the very patterns of animal and plant structure and behavior.