COM's essential goal is to let developers assemble applications from pre-built parts, or components, irrespective of component location or development language used to implement the components. The COM model is defined so 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-service layer Windows DNA application.