COM (Component Object Model)

Component Object Model (COM) je binární standard pro vytváření a interakci softwarových komponent. Byl představen společností Microsoft v roce 1993. Nejedná se o programovací jazyk, ale o specifikaci (rozhraní), která umožňuje objektům vytvořeným v různých programovacích jazycích (C++, Visual Basic, Delphi atd.) vzájemně komunikovat a sdílet funkce.

Základní filozofie COM

Hlavní myšlenkou COM je znovupoužitelnost softwaru. Místo aby vývojář psal vše od nuly, může použít již hotovou komponentu jiného výrobce.

Binární kompatibilita

Tradiční kód je často vázán na konkrétní kompilátor nebo jazyk. COM definuje standard na úrovni binárního kódu. Díky tomu může aplikace napsaná v C++ volat funkce z komponenty napsané ve Visual Basicu, aniž by znala její vnitřní zdrojový kód.

Klíčové koncepty

1. Rozhraní (Interfaces)

V systému COM aplikace nikdy nepřistupuje k datům objektu přímo. Přistupuje pouze k jeho rozhraním. Rozhraní je v podstatě tabulka funkcí (v-table), které objekt nabízí. Každé rozhraní má svůj unikátní identifikátor (IID).

2. GUID a CLSID

Aby nedocházelo ke kolizím mezi tisíci komponentami v počítači, používá COM Globally Unique Identifiers (GUID). Každá komponenta má své unikátní CLSID (Class ID). Tyto identifikátory jsou uloženy v registru systému Windows (Windows Registry).

3. IUnknown: Základ všech rozhraní

Každý COM objekt musí implementovat základní rozhraní zvané IUnknown. To obsahuje tři klíčové metody:

QueryInterface: Umožňuje programu zjistit, zda objekt podporuje konkrétní rozhraní.

AddRef: Zvyšuje čítač odkazů na objekt.

Release: Snižuje čítač odkazů. Když klesne na nulu, objekt se sám odstraní z paměti.

Varianty a rozšíření COM

V průběhu let se COM vyvíjel do několika specializovaných podob:

Technologie	Popis
OLE	(Object Linking and Embedding) Umožňuje vkládání objektů jedné aplikace do druhé (např. tabulka Excelu vložená do Wordu).
ActiveX	Odlehčená verze COM komponent určená původně pro web (Internet Explorer).
DCOM	(Distributed COM) Rozšiřuje COM o schopnost komunikovat mezi různými počítači v síti.
COM+	Modernizovaná verze (vydaná s Windows 2000), která přidává funkce jako správa transakcí a sdílení prostředků.

COM v moderním světě

I když se dnes pro vývoj webových aplikací používají jiné standardy (REST API, JSON), COM zůstává hluboko v základech Windows:

Windows Shell: Průzkumník souborů ve Windows je postaven na COM rozhraních.

DirectX: Moderní grafické rozhraní pro hry využívá COM architekturu.

WinRT: Moderní runtime pro Windows 10/11 aplikace je v podstatě evolucí COM (často nazývaný „COM na steroidech“).

Nevýhody a "DLL Hell"

Správa COM komponent byla historicky náročná. Protože se komponenty musely registrovat do systému, docházelo často ke konfliktům verzí (tzv. DLL Hell), kdy instalace nového programu přepsala sdílenou komponentu a znefunkčnila jiné aplikace.

Související pojmy: ActiveX, OLE, Windows Registry, DLL, .NET Framework.