COM(前身 OLE)是所有 ActiveX 技術基礎,也是特殊規範,遵循其開發的元件可透過作業系統特性實現「互操作」。Win32 新軟體皆與 COM 相關,作業系統透過 COM 物件揭露特性。廠商元件可建立於 COM 基礎,我們能創建註冊自有 COM 元件。編寫 Win32 代碼必須與 COM 打交道。本文重述 COM 程式設計基本概念,假設讀者掌握 COM 伺服器(提供服務)與 COM 客戶端(請求服務)概念。
Java/COM 整合是 Microsoft Java 編譯器與虛擬機最有趣特性。Java 與 COM 模型極度相似,整合概念直觀、技術上無縫結合——訪問 COM 几乎無需特殊代碼。技術細節由編譯器/虛擬機控制。結果:Java 程式設計師可像對待原生 Java 物件一樣對待 COM 物件;COM 客戶端可像使用其他 COM 伺服器一樣使用 Java 實現的 COM 伺服器。可用 Java 實現 ActiveX 自動化伺服器,亦可在 Java 程式中使用 ActiveX 控制項。
最引人注目的是 COM 介面與 Java interface 關鍵字的關係——近乎完美匹配:
• COM 物件只揭露介面,介面本身無實作,由揭露物件負責
• COM 介面描述語義相關函數組,不揭露資料
• COM 類別組合介面,Java 類別可實現多介面
• COM 為引用物件模型,程式設計師永不「擁有」物件,只獲介面引用;Java 同為引用模型,引用可「轉型」為介面引用
• COM 物件生命週期取決客戶端引用計數,歸零自行刪除;Java 物件生命週期同由引用計數決定,無引用時待垃圾收集器處理
COM 與語言無關,但實際開發多用 C++ 和 VB。C++ 強大生成高效代碼但難用;VB 簡單但遠離底層作業系統,物件模型與 COM 映射不佳。Java 介於兩者間,兼具易用性與底層存取能力,是編寫 COM 代碼的有效語言。後續將討論 COM 開發關鍵問題,編寫 Java/COM 客戶端與伺服器時首須釐清。