Traditionally, the reusability problem was solved by using software libraries, either written in-house or bought from a third-party software vendor. In this chapter, we saw that this solution had many problems. We went through a series of C++ programming techniques that could be used to solve the original problem as well as any new problem that arose in the process. Ultimately, we observed that by following two programming paradigms, we could develop reusable binary components that can evolve over time. The two programming paradigms, dynamic linking and binary encapsulation, form the foundation of the Component Object Model.