Skip to main content

What Is COM?

Quite often programmers develop the ability to write COM components but are still hazy about what COM really is. So let's make a one-line definition of COM. COM is a specification and a set of services that permit us to create applications that are language-independent, modular, object-oriented, distributed, customizable, and upgradable. Let us now take apart this definition word by word.

COM is a specification

The COM specification describes the standards that you need to follow in order to create COM components. This standard describes how components should look like and how they should behave. COM is a set of services The COM specification is backed up by a set of services or APIs. On Win32 platforms these services are provided as a part of the operating system in the form of a COM library. In other operating systems they are provided as a separate package.

COM components are language-independent

COM is a binary standard. The components can be written in any programming language as long as they follow a standard memory layout prescribed by COM. As of this writing, the number of languages and tools that support COM include C, C++, Java, JScript, Visual Basic, VBScript, Delphi, PowerBuilder, MicroFocus Cobol, etc.

COM allows modular programming

COM components can be distributed either as DLLs or as executables. Components present in different modules can communicate with each other through the communication mechanism provided by COM.

COM is object-oriented

COM components are like normal objects. They have an identity, state and behavior. COM components along with COM interfaces support the concept of encapsulation and polymorphism. COM enables easy customization and upgrades to your applications. COM components are linked one another dynamically. Also there is a standard way of locating a component. Hence we can replace an existing component with a new one without being required to recompile the entire application.

COM enables distributed applications

The components can be transparently relocated on a remote computer without affecting the clients i.e. local and remote components are treated in the same manner. This makes distributed computing very easy.

What COM Is Not?

  • COM is not a computer language. In fact, COM can be implemented through a variety of languages.

  • COM doesn't replace DLLs. In fact, components are often implemented as DLLs to exploit the ability of a DLL to link dynamically.

  • COM doesn't stand for OLE controls (that's ActiveX), compound documents (that's OLE DB and ADO) or game and graphics programming (that's DirectX). All these technologies are however based on COM.

Comments

Popular posts from this blog

MFC - Microsoft Foundation Classes Design Patterns

1 Introduction This paper describes the use of object-oriented software design patterns, as presented in Design Patterns: Elements of Reusable Object-Oriented Software by Gamma et al., within the Microsoft Foundation Class Library (MFC). MFC is used for implementing applications for Microsoft Windows operating systems. Because of the size of the MFC library, a complete analysis would have been beyond the scope of this assignment. Instead, we identified various possible locations for design patterns, using the class hierachy diagram of MFC, and studied the source carefully at these locations. When we did not find a pattern where we expected one, we have documented it anyway, with examples of how the particular problem could have been solved differently, perhaps more elegantly, using design patterns. We have included a brief introduction to MFC in Section 2 , as background information. The analysis has been split into three parts, with one section for each major design pattern ca...

Explain Polymorphism and Flavors of Polymorphism...

Polymorphism is the ability of different objects to react in an individual manner to the same message. This notion was imported from natural languages. For example, the verb "to close" means different things when applied to different objects. Closing a door, closing a bank account, or closing a program's window are all different actions; their exact meaning is determined by the object on which the action is performed. Most object-oriented languages implement polymorphism only in the form of virtual functions. But C++ has two more mechanisms of static (meaning: compile-time) polymorphism: Operator overloading. Applying the += operator to integers or string objects, for example, is interpreted by each of these objects in an individual manner. Obviously, the underlying implementation of += differs in every type. Yet, intuitively, we can predict what results are. Templates. A vector of integers, for example, reacts differently from a vector of string objects when it receives ...

• Why might you need exception handling be used in the constructor when memory allocation is involved?

Your first reaction should be: "Never use memory allocation in the constructor." Create a separate initialization function to do the job. You cannot return from the constructor and this is the reason you may have to use exception handling mechanism to process the memory allocation errors. You should clean up whatever objects and memory allocations you have made prior to throwing the exception, but throwing an exception from constructor may be tricky, because memory has already been allocated and there is no simple way to clean up the memory within the constructor.