COM je založena na objektech. Tyto objekty ale nejsou úplně to stejné jako v objektových jazycích (i když si jsou velice podobné). COM objekty jsou velmi dobře zapozdřeny, není tedy možnost získat přístup k vnitřní implementaci objektu. Není možnost zjistit, jaká data, datové struktury a podobné může daný objekt obsahovat. Obvykle se COM objekty kreslí pouze jako prázdné obdélníky.
Jediný způsob, jak komunikovat s COM objekty je skrze rozhraní. Rozhraní pak zpřístupňují sadu metod použitelnou pro práci s objektem. Rozhraní tvoří dohodu mezi komponentou a klientem. Jinými slovy, rozhraní pouze nedefinuje, které funkce a metody jsou použitelné, ale definuje také, co objekt dělá, když jsou dané metody volány. Tato dohoda ale nevymezuje způsob implementace - COM objekt není nijak omezen ve způsobu implementace metod rozhraní. Jediné, co musí dodržet, je že už jednou dohodnuté rozhraní nelze změnit. |
Toto se děje z důvodu, že na dohodnutém způsobu komunikace mohou záviset další aplikace. Pokud by se dohoda rozhraní porušila, mohlo by dojít k selhání.
Existují však úskalí této technologie. Nelze například zcela využít kód nacházející se v těchto komponentách (právě kvůli "dokonalému" zapouzdření). Nelze tedy z komponent dědit a následně upravit některé metody. U COM komponent se hovoří o tzv. DLL hell, tedy "peklu DLL". Potíže se vyskytují zejména v souvislosti s verzemi. Často se stává, že novější verze komponent přepíší jejich starší verze a tím způsobí nekorektní chování aplikací vycházejících z předchozích verzí.
Každý COM objekt implemetuje rozhraní IUnknown obsahující následující tři funkce. Z něj dědí všechna ostatní rozhraní použitá v COM objektu.
AddRef()
Slouží ke zvýšení počtu odkazů na použité rozhraní.
QueryInterface()
Slouží pro přepínání mezi rozhraními
Release()
Sníží počet odkazů na použité rozhraní. Pokud počet klesne na nulu, objekt je uvolněn.
GUID (Globally Unique Identifier) je klíčová část modelu COM. Jedná se o 128 bitovou strukturu, u níž je zajištěno, aby žádné dva GUID nebyly stejné. GUID se v COM modelu používá ze dvou důvodů:
jednoznačně rozlišit určitý COM objekt. GUID přiřazené ke COM objektu se nazývá class ID (CLSID). To se používá k vytvoření instance COM objektu.
jednoznačně rozlišit patřičné rozhraní COM. GUID používané s určitým COM rozhraním se pak nazývá interface ID (IID). Tohoto se používá tehdy, když se žádá o náležité rozhraní od objektu.
I když GUID se bere jako struktura, většinou se jedná o řetězec ve tvaru {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}, kde x představují hexadecimální čísla.