COM defines a model for component interaction. The goal of COM is to let developers assemble applications from prebuilt parts, or components, irrespective of where the components are located or what development language was used to implement them. The COM model is defined in such a way that components and applications can evolve independently over time.
The COM programming model is based on objects, interfaces, classes, and components. COM objects are instances of COM classes, which are named implementations of one or more COM interfaces. An interface defines a set of related methods; it represents a contract between the client and the implementer of the interface. All COM interfaces derive from the fundamental interface IUnknown. IUnknown provides object lifetime management and interface navigation features. COM components are binary units of software that can be used to create COM objects. Components include COM classes, an implementation of a class object used to create instances of each class, and code to create the registry entries needed to locate the classes. Most components available today, including many system services provided by Windows, are Automation-aware components that expose dual interfaces. These components are accessible to almost every development language and programming environment, including scripting languages. COM provides the basic building blocks of the three-tier Windows DNA application.