面向對象技術不僅提供了一種全新的認知世界與建模方法,更深遠地重塑了計算機軟體工業的發展軌跡。從面向對象程式語言、設計方法論,到面向對象資料庫的誕生,這項技術為軟體工程化奠定了堅實基礎,更直接催生了組件、構件、中間件等現代軟體架構核心概念。
一、 可重用軟體組件的演進與突破
隨著計算機與網路技術飛速發展,應用系統規模龐大、研製週期長、維護成本高、功能過度耦合難以靈活拆裝升級、異構系統間集成困難等問題日益凸顯。為實現全行業範圍的軟體「即插即用」,關鍵在於解決系統的可操作性、可擴展性、語言獨立性與跨平台互操作能力。
面向對象程式設計思想發展二十餘年雖功能強大,但孤立發展已近極限,形成大量「對象孤島」。將面向對象思想與組件程式設計相結合,孕育出基於對象的組件軟體結構,為此領域開闢新路徑。
軟體組件的定義與歷代演變
廣義上,軟體組件是定義良好、獨立、可重用的二進制代碼,涵蓋功能模塊、封裝對象類、軟體框架與系統模型等。其演變歷程清晰勾勒出軟體復用技術的成熟軌跡:
- 60 年代末至 80 年代初:結構化模塊式開發主導,組件指定義良好的方法包或功能模塊。
- 80 年代:面向對象思想興起,組件內涵轉為類庫。類雖具備封裝、多態、繼承特性,但強依賴具體程式語言,耦合度高,使用者需深入了解類庫結構與宿主語言,難以滿足可移植性與互操作性要求。
- 90 年代後:組件內涵進一步強化,聚合性、獨立性、重用性顯著提升。現代基於對象的組件架構中,組件指可便捷插入語言、工具、作業系統、網路系統的二進制代碼與數據。
軟體 IC 的核心特徵
這類軟體組件可視為「軟體集成電路元件」,具備以下關鍵特性:
- 粒度靈活:無硬體 IC 的天然聚合性限制,構成粒度大小自由,便於擴展。
- 語言獨立與智能互操作:透過統一二進制標準,建立機構間智能互操作機制。
- 介面式訪問:外界僅通過介面訪問組件內部功能。
- 多側面性:語義層次高,可從不同側面連接,外部特性非唯一。
- 支援核心 OO 特性:封裝、繼承、多態。
基於經典面向對象技術的組件模型,已廣泛被軟體業接受。Microsoft 的 OLE/COM 與 SunSoft 的 JavaBeans 即為兩大典型組件規範。
二、 三大主流組件技術深度解析
1.1 JavaBeans:視覺化組件標準
Java Bean 是基於 Java 環境的可視、可操控、可重用組件。JavaBeans 組件模型規範了設計所有 Bean 的框架,確保 Bean 在具備特定功能的同時,能被視覺化構造工具識別、操控,並持久化設計資訊以指導運行時行為。
作為可視化組件,所有 JavaBean 擁有六大核心機制:
- 內省:告知構造工具其功能,支援設計時操控。
- 用戶定制:允許程式設計師在開發階段改變 Bean 外觀與行為。
- 事件:捕捉、引發事件,並將可產生/處理的事件告知構造工具。
- 特性:支援開發階段定制,亦使運行時系統能加工控制 Bean。
- 持久化:保存開發時對 Bean 的修改,運行時恢復。
- 設計時與運行時功能分離:職責清晰劃分。
JavaBean 主要服務於視覺化環境,亦可透過程式介面直接操控,Java 類庫提供相應控制類。
1.2 OMA/CORBA:異構分布式對象互操作標準
對象管理集團(OMG)致力於推動面向對象方法在軟體工程中的應用,並制定大規模並行系統軟體架構模型與通用介面規範。其核心成果包括:
- OMA(Object Management Architecture):基準架構,涵蓋統一術語體系、抽象框架、分布式系統參考模型,規範四大標準——ORB、對象模型、對象服務、通用組件。
- CORBA(Common Object Request Broker Architecture):OMA 參考模型中 ORB 的技術規範,規定對象定義、創建、調度、引用及通訊方式。符合 CORBA 的 ORB 屬典型中間件,允許 Client 對象向 Service 對象發請求。
CORBA 核心組成包含:
- ORB:核心通訊組件,屏蔽本地/遠程對象差異,實現透明通訊。
- IDL(Interface Definition Language):高階符號語言描述對象介面,不涉及實現細節,支援 C、C++、Smalltalk、Java 等語言映射。
- 介面庫:存儲服務對象屬性、操作、自定義數據類型、異常處理的 IDL 定義。
- BOA(Basic Object Adapter):描述 ORB 與服務端應用間介面,負責調度服務端對象並交換消息。
- SII(Static Invocation Interface):編譯時客戶需知服務介面,介面變更需重新編譯。
- DII(Dynamic Invocation Interface):無關服務端的通用介面,運行時動態構造請求,支援智能即插即用,但增加複雜度。
CORBA 提供整合框架,應用僅需給出 IDL 介面即可插入協同工作,為分布式環境下異構應用即插即用集成提供強力支援。
1.3 OLE/COM:Microsoft 的分布式對象模型
與 CORBA 類似,OLE/COM 基於分布式對象模型,獲多方支持。OLE 建立在 COM(Component Object Model)之上,核心中間件功能與 CORBA 相似,同樣支援對象定義、創建、調度、引用、通訊及 IDL。差異在於 COM 支援不同程式語言或編譯器實現對象間的二進制相容,並提供 OLE Automation 等特性。
OLE/COM 結構核心為 COM,支援對象定義、創建、銷毀、調度、介面遍歷與查詢。SCM(Service Control Manager)集中負責搜索服務對象與建立客戶/服務器通道,透過註冊表定位服務程式,建立 RPC 通道並載入代理存根。Automation 允許客戶動態構造請求並發送至遠端對象,且任何符合規範的對象均能自動提供介面資訊,優於 CORBA 需透過介面庫獲取。
三、 分布式對象中間件:連接異構世界的紐帶
90 年代以來,計算進入以網路為中心的新時期,用戶渴望構建豐富的分布式客戶/服務器應用,實現數據、知識、計算資源共享與企業級協同。分布對象技術成為主流方向,特點在於:針對異構環境應用互操作、核心對象管理融合客戶/服務器模型與 OO 技術、提供面向對象 API、成爲集成框架與軟體部件標準核心技術。
中間件作為介於應用層與網路層間的功能層,使應用獨立於異構作業系統、硬體平台與通訊協議。它擴展客戶/服務器結構為三層或多層架構,為可靠、可擴展、複雜的事務密集型應用提供有力支撐。
四大中間件類型
- 基於 RPC:傳統過程調用擴展,被調用對象可在任意物理平台。代表:OSF DCE、Sun ONC+。
- 面向消息:支援基於消息傳遞的進程間通訊,適用客戶/服務器與對等網模型,效率通常高於 RPC。代表:Sun ToolTalk、PeerLogic Pipes、Talarian SmartSockets。
- 基於 ORB:面向對象應用首選,消息經 ORB 路由,同時處理集成與安全。代表:Microsoft OLE/COM/DCOM、OMG CORBA。
- 數據庫中間件:支援異構關係數據庫透明訪問。代表:Sybase Open Server、Oracle SQL Connect、BEA WebLogic。
四、 基於面向對象技術的應用軟體系統架構
軟體架構描述系統計算構件組織結構、交互關係及設計演變原則。研究首要問題在於如何建模。針對大規模複雜應用,系統模型設計目標為提高開放性與集成性,兼顧效率。
開放性、集成性與效率的辯證關係
- 開放性:含數據開放、功能開放、系統可擴充性,基本取決於系統模型。
- 集成性:透過一致的信息描述與處理機制統一子系統,好壞同取決於系統模型。
- 效率:含運行時空複雜度與開發難易度,大部分取決於模型,亦關乎具體實現。
三者相輔相成,開放性為基礎:唯有開放才有集成,唯有開放才有效率。
系統模型演進四階段
- 以數據為中心:資料庫置核心共享,各功能部件獨立開發,統一數據交換介面。擴充性好,但結構鬆散、集成性差、僅能數據復用、代碼冗余大、數據語義易失真。僅具數據開放性。
- 以執行為中心:共享計算/執行功能置於執行中心,解決代碼冗余與界面風格不一,嚴格管理數據一致性。但執行中心設計複雜、功能集合難定義、通訊與管理負擔重易成瓶頸。具數據與功能開放性,整體優於前者。
- 面向對象系統模型:系統內核、用戶界面、應用對象各封裝共享數據與操作,無中心結構,對象實體地位平等。優勢在於合理封裝降低通訊開銷與操作複雜性,結構靈活。開放性與有效性均優於前兩類。但對象間點對點直接連接,對象增多時通訊鏈接平方級激增,各對象需維護功能服務信息庫造成冗余與一致性維護開銷,且介面無一致標準,擴充隨意不規範。
- 基於總線的系統模型:組件、中間件技術成熟催生新模型。系統仍屬面向對象結構,但對象為規範設計的模塊(組件),共存並充分互作。關鍵在於高效總線結構,使組件通過公共介面連接,實現即插即用、無縫集成。通訊鏈接數線性增長,介面規範一致性降低複雜度,提高互操作性。依組件地位分核心組件與應用組件,總線分核心總線與應用總線形成雙總線結構,應用總線屏蔽部分服務請求減輕核心總線流量。核心組件與總線構成系統原型框架,再集成應用組件。分布式環境下,應用組件常透過 Agent 間接連接應用總線,Agent 代理複雜通訊、轉換異構數據保證 Broker 通訊語言統一,Broker 與 Agent 構成中間件層。
五、 並發面向對象技術:邁向並行計算新紀元
並行計算是未來方向,將面向對象與並行計算結合的並發面向對象技術屬新興研究領域。主流 OO 語言(如 C++)僅支援順序執行描述;即便 Smalltalk 提供並發機制,多採傳統並發控制模式,未從對象模型特點(封裝、繼承、自治)出發,導致並發與對象模型概念衝突。
三大並發面向對象程式設計方案
- 設計全新並發 OO 語言;
- 擴展現有順序 OO 語言;
- 使用現有順序 OO 語言,透過外部庫提供並發抽象——並發類庫正成為最重要方法,優勢在於無需修改原語言、保留原有程式設計方法、善用 OO 特性、用戶易接受。
並發類庫設計必須與對象模型既有特性有機結合,擴展語言描述系統並發行為能力,通常需底層特殊軟體(運行支撐系統)支持,並將複雜性隱藏在類庫中。
並發對象模型與構造方案
順序對象模型由被動對象組成,單執行緒,消息發送即過程調用(同步阻塞)。並發模型中,可並發執行基本單位為並發對象,擁有自身控制線索與獨立地址空間,多對象並發運行,透過方法(消息傳遞)互動。兩大典型構造方案:
- 異步消息發送:發送者不等待接收者處理即繼續執行,接收者緩存消息。產生新執行緒引發並發,需提供未來獲取返回值機制。缺點:程式行為難把握,不利推理。
- 對象擁有體:對象創建時體即開始執行,可同時接收/發送消息,消息發送可同步,但需允許對象內部並發否則易死鎖。
並發對象同步控制
並發環境下對象面臨方法並發調用,必須同步控制以保證狀態一致性與完整性。同步控制雖可由發送者執行,但接收者必須自身提供同步控制,防止發送者疏忽導致內部狀態損壞。同步控制分兩類:
- 條件同步:對象特定狀態下僅接受特定消息。
- 互斥:對象特定狀態可處理多消息,但這些消息處理可能共享成員變量,必須互斥使用以保證狀態完整一致。
同步控制描述方式:集中 vs 分散
- 集中控制:同步控制集中描述於對象(類)一處。要求設計者整體掌握並發行為,易導致繼承異常(定義子類時須重定義父類同步控制以納入新方法)。
- 分散控制:並發控制描述分布於各方法。方案一:在方法實現中同步,對象無條件接收消息,處理時根據狀態決定等待或執行。缺點:被掛起方法使對象處於不穩定狀態,不宜處理其他消息;子類改變父類方法同步控制需整個方法重定義。方案二(優):在類中給每個方法加激勵條件,接收消息時根據條件決定是否處理,不滿足者等待。子類定義時可分開繼承父類方法的激勵條件與實現,避免不必要重定義。