====== 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.//