The game of software has changed since the late 1980s and early 1990s. These days, robust software distribution (that is, objects everywhere—even on a network) is extremely important. For the past decade, developers have been writing applications using object-oriented languages and tools such as C++ and Delphi, among others. Using object-oriented programming languages has been a successful venture for most participants, giving rise to useful application frameworks and code libraries. These languages and tools are great for developing applications that exist on the desktop and that distribute information and functionality in limited ways.
Until now, sharing objects has traditionally been a source code proposition; that is, developing object-oriented software has involved confining the entire development team to a single development environment so that they could share the source code. With such a wide choice of languages and tools available to the contemporary developer, however, it doesn't make sense to use only one language to implement a large development project. For example, although tools such as C++ and the Microsoft Foundation Class (MFC) library are adequate for building user interfaces, they might not be the best tools for building infrastructure-type software. Microsoft Visual Basic is even better for writing user interfaces, but at the cost of losing some control. Raw C++ is a great language for writing infrastructure and lower-level software, but it makes writing user interfaces tedious.
Object models such as COM define binary standards so that different parts of an application can be developed independently. That way, an entire software project can be assembled from parts built using C, C++, Java, Visual Basic, or whatever language is popular at the moment.
In addition to software integration, COM is all about writing software that is easy to distribute—that's COM's primary function. COM basically takes the best parts of C++ and leaves out all the compiler-specific garbage imposed by the different compilers. In essence, COM formalizes the notion of interface-based programming.