面向對象技術在軟件重用和體系結構中的應用
發表于:2008-02-20來源:作者:點擊數:
標簽:面向對象技術
面向對象 技術提供了一種新的認知和表示世界的思想和方法,它對計算機工業的影響是深遠的。計算機從業人士利用它提出了面向對象的計算機程序設計語言、面向對象的軟件設計方法、面向對象的 數據庫 等等。同時面向對象技術為軟件工業實現工程化提供了強有力的
面向對象技術提供了一種新的認知和表示世界的思想和方法,它對計算機工業的影響是深遠的。計算機從業人士利用它提出了面向對象的計算機程序設計語言、面向對象的軟件設計方法、面向對象的
數據庫等等。同時面向對象技術為軟件工業實現工程化提供了強有力的支持,正是面向對象技術造就了組件、構件、
中間件等概念。
1 可重用軟件組件
計算機的不斷發展為計算機及
網絡應用提供了大量技術先進、功能強大的應用軟件系統,同時也給軟件
開發者和用戶帶來了相應的問題:
· 軟件系統規模龐大,研制周期長,維護費用高;
· 軟件系統過于復雜,在一個系統中集成了各種功能,大多數功能不能靈活地裝卸、單獨升級或重復利用;
· 應用軟件不易集成,即使各應用程序是用相同的編程語言編寫的,并且運行在相同的計算機上,特定應用程序的數據和功能也不能提供給其他應用程序使用。
為克服上述困難,實現全行業范圍內的軟件"即插即用",關鍵是解決軟件系統的可操作性、可擴展性、語言獨立性和跨平臺的操作能力。
作為解決這類問題的一種方案,
面向對象的程序設計思想20多年來得到很大發展。孤立的面向對象思想雖然功能強大,但目前其發展已接近極限,結果是產生了大量的"對象孤島"。將面向對象思想與組件編程思想相接合發展起來的基于對象的組件軟件結構為這一領域開辟了新的道路。
從廣義上說,軟件組件是一種定義良好的獨立、可重用的二進制代碼,包括功能模塊、被封裝的對象類、軟件框架和軟件系統模型等。
本世紀60年代末到80年代初,結構化的模塊式軟件開發思想占主導地位,當時的組件的含義是指一些定義良好的方法包或功能模塊。
80年代起,面向對象的軟件開發思想迅速發展起來,這時的軟件組件的含義就是類庫。類雖然提供了封裝性、多態性和繼承性,但需要依賴于具體的編程語言,耦合度高,且需要用戶對類庫的結構和宿主語言有較深入的了解,因此,不能完全達到軟件重用的可移植性和互操作性要求。 90年代后,組件的內涵進一步加強,聚合性、獨立性和重用性進一步提高。目前,基于對象的組件軟件體系結構中的組件是指可方便地插入到語言、工具、操作系統、網絡系統中的二進制代碼和數據。
這種軟件組件可以看作是一種軟件集成電路元件,具有以下特點:
· 軟件IC沒有硬件IC的天然聚合性,構成粒度大小自由,便于擴展;
· 通過規定一個統一的二進制標準,建立起機構之間的智能互操作機制和語言獨立性;
· 外界僅通過接口訪問組件;
· 多側面性,即組件表達的語義層次高,可以從不同側面進行連接,外部特性不唯一;
· 支持封裝、繼承、多態性。
基于經典面向對象技術的組件模型為軟件體系結構設計和大型應用軟件開發給予了強有力的支持,目前已經為軟件行業所廣泛接受。Microsoft的OLE/COM和SunSoft的JavaBeans都是典型的軟件組件規范。
1.1 JavaBeans
Java Bean是基于Java環境的,可視的、可操縱的、可重用的組件;JavaBeans組件模型是SunSoft制定的關于Bean的軟件組件標準,規定設計所有Bean所依據的框架,確保Bean在具備特定功能的同時,還能被可視化軟件構造工具所識別、操縱,并能將這些設計信息保存下來,指導運行時的行為。
作為可視化組件,所有JavaBean都具備如下特征:
Java Bean是基于Java環境的,可視的、可操縱的、可重用的組件;JavaBeans組件模型是SunSoft制定的關于Bean的軟件組件標準,規定設計所有Bean所依據的框架,確保Bean在具備特定功能的同時,還能被可視化軟件構造工具所識別、操縱,并能將這些設計信息保存下來,指導運行時的行為。
· 內省(introspection)機制,能夠告訴軟件構造工具其所能完成的功能,從而允許軟件構造工具在設計時對其加以操縱;
· 用戶定制(customization)機制,允許
程序員在軟件開發階段利用軟件構造工具改變Bean的外觀和行為方式。
· 事件(event)機制,能捕捉事件、引發事件,并將其所能產生和處理的事件告知軟件構造工具。
· 特性(properties)機制,除在軟件開發階段支持用戶定制外,還使得軟件系統能夠在運行時刻對Bean進行加工和控制;
· 保持(persistence)機制,保存程序員開發時利用構造工具對Bean所做的修改,并在運行時予以恢復。
· 設計時刻功能和運行時刻功能分離。
JavaBean主要用于可視化環境,為軟件構造工具所利用,但也能通過程序接口直接操縱,Java類庫中提供了相應的控制類。
1.2 OMA/CORBA
對象管理集團OMG (Object Management Group)是一個國際性的軟件行業協會,主要宗旨是促進面向對象的方法在
軟件工程中的應用,以及在面向對象的軟件工程方法學的基礎上,為大規模并行系統(開放式并行計算)軟件的開發與應用制定軟件體系結構模型和通用接口規范。
OMG 于1990年末提出了一個對象管理結構的基準結構OMA (Object Management Architecture)。OMA主要涉及用于面向對象語言、系統、數據庫及應用程序框架的統一術語體系,面向對象軟件系統的抽象框架和基于面向對象技術的分布式軟件系統參考模型等。為了構造上述參考模型,OMA規定了四個方面的標準:
1. 對象請求代理ORB (Object Request Broker),即關鍵通訊單元,在不同的應用程序對象之間以高度協同的方式發送消息;
2. 對象模型,即獨立設計的、可移植的抽象模型,可以與其他符合OMA規范的面向對象系統進行通訊;
3. 對象服務,利用ORB實現基本對象功能,確定對象的邏輯模型和物理存儲方式;
4. 通用組件,包含了適用于很多應用領域的基本功能,這些功能可以通過符合OMA規范的類接口獲得。
OMG 于1991年末提出的CORBA (Common Object Request Broker Architecture),是OMA參考模型中的ORB接口技術規范。這一標準規定了如何定義、創建、調度、引用對象,以及對象之間如何通訊。符合CORBA規范的ORB是典型的中間件,允許Client對象向Service對象發出請求。
CORBA規范的基本組成如圖所示

主要包括:
· 對象請求代理ORB (Object Request Broker),是CORBA的核心。作為一個軟件組件,對象可以通過ORB發出請求并接收響應。在CORBA中,所有的通訊都通過ORB進行,因而無論一個對象是本地的還是遠程的,對于與之進行通訊的其他對象來說都是等價的。CORBA并沒有規定如何具體實現一個ORB,幾乎每一個不同的產品都有其具體的ORB實現。
· 接口定義語言IDL (Interface Definition Language),是用于描述對象接口的一種高級符號語言。IDL不涉及任何接口的實現細節,所有COBRA系統都根據IDL用某種特定語言來實現接口。CORBA為C、C++、Smalltalk和JAVA制定了規范,ADA95和COBOL的映射規范也正在制定中。IDL描述通常以接口庫(Interface Repository)的方式進行存貯。
· 接口庫(Interface Repository),其中包括了所有描述服務對象屬性、操作、自定義數據類型及異常處理的IDL定義。
· 基本對象適配器BOA (Basic Object Adapter),描述了ORB和服務器端應用程序之間的接口。BOA負責調度服務器端應用程序維護的對象,并與服務對象交換消息。
· 靜態請求接口SII (Static Invocation Interface)。SII假設在編譯時刻客戶對象能夠明確了解服務對象的接口,即客戶與服務器之間的關系應當是可知的、固定的,服務接口的任何改變都會導致軟件系統的重新編譯。SII是由IDL描述的。
· 動態請求接口DII (Dynamic Invocation Interface)是一組與服務器無關的通用接口。與新服務對象及其行為相關的信息可以通過接口庫獲得,客戶程序根據這些信息可以在運行時刻動態構造請求。DII使得開發智能化即插即用的軟件系統成為可能,但需要涉及大量CORBA API調用,增加了軟件的復雜度。
總之,CORBA提供了一個集成框架,應用程序只要給出用接口定義語言IDL (Interface Definition Language)書寫的界面,就可插入框架,與其他對象協同工作,為在分布式環境下實現不同應用程序即插即用的集成提供了有力支持。
1.3 OLE/COM
與CORBA一樣,Microsoft的OLE/COM是基于分布式對象模型的開放標準,得到多系統軟件開發商、獨立軟件開發(ISV)商和用戶的支持。
OLE實際上是建立在組件對象模型(COM)基礎上的一組高層次技術。從基本中間件功能視圖的角度來說,COM與CORBA非常相似,同樣支持對象的定義、創建、調度、引用及對象之間的通訊,同樣提供了接口定義語言(IDL)。
但是兩者之間也存在顯著的差異。例如,COM支持由不同程序設計語言或不同編譯器實現的對象之間的二進制兼容,以及OLE Automation等。
服務控件管理SCM (Service Control Manager)集中負責搜索服務對象和在客戶與服務器之間建立信道。當客戶向某個特定的對象發出初始化請求時,SCM判斷包含該對象的服務程序是否已經運行,如否,則通過注冊表查找服務程序所在的位置。隨后,客戶端SCM建立起與服務器端SCM連接的RPC信道;服務器端SCM也進行同樣的處理,并在必要的情況下起動服務程序。最后,信道兩端的SCM分別將代理程序(proxy stub)載入到客戶進程和服務器進程中。
OLE/COM提供了與CORBA IDL類似的高級描述語言,用于定義COM概念上的接口,即一組邏輯相關的操作或方法。
OLE/COM結構的另一要素是Automation,允許客戶程序動態構造請求(包括方法名、相關參數的類型和取值等),并將請求發送到遠端對象。在CORBA中,客戶程序能夠通過接口庫(repository)獲取對象接口的相關信息;而OLE/COM則更進一步,任何符合OLE/COM規范的對象都能自動提供其所能支持的接口信息。
原文轉自:http://www.anti-gravitydesign.com