Component-Based Software Development is a topic I return to from time to time. It is almost ancient history now: it was in 1993 when Microsoft came out with OLE (Object Linking and Embedding). OLE was based on a simple premise: a component can ask another component a simple question: “Do you support interface X?”
Let’s suppose that component A wants to use component B. Component A can ask Component B if it supports any of the interfaces that A needs. The process is to ask B for each interface, specifically for each version of each interface that A can use. If B supports one, then they can work together. If B doesn’t, then A has to look for another component that supports what A needs.
As already noted, B has to support the version of the interface that A can work with. Interface versioning and the proper assignment of version numbers is critical to make component-based software development work.