天天看點

元件模型:COM/DCOM、CORBA、KCOM

從第一台計算機産生開始,硬體技術和軟體技術幾乎同時開始它們的發展曆程。但是半個世紀以來硬體技術的發展速度要遠遠高于軟體技術的發展,從電子管到半導體,從內建電路到超大規模內建電路,運算速度從每秒幾千次到每秒上萬億次。相比之下軟體技術就遠遠跟不上硬體技術的發展,其中的根源應該是很長時間内沒有找到有效軟體構造方法。可喜的是七十年代開始出現的面向對象的認知方法和程式設計語言,經過二十多年的發展,于九十年代結出累累碩果,在二十世紀末出現了由面向對象發展而來的元件技術,它正是軟體業期待多年的這樣一種有效的軟體構造方法。

元件模型定義元件的制作方法,運作方式,以及互相作用機制。本文介紹目前流行的兩種元件模型:COM(以及建立在COM基礎之上的DCOM)元件模型、CORBA元件模型,最後引入一種便于提高元件構造效率的、更真實地反映現實世界的源碼級元件模型——KCOM元件模型。 1.COM/DCOM元件模型 COM(the Component Object Model)是一種平台獨立的、分布式、面向對象的系統,用于建立可互操作的二進制軟體元件。COM 是微軟的OLE(複合文檔),ActiveX(可用于Internet的元件),以及許多其它技術的基礎。COM最初是由微軟公司提出并獨立發展,現在,它已交給一個獨立的組織管理。 為了了解COM以及所有建立COM基礎之上的技術,有一點必須銘記在心,那就是COM不是一種面向對象語言,而是一種标準。COM 也不指定一個應用程式應該如何建構。語言,結構,以及實作細節都留給應用開發人員。COM指定一種元件模型以及COM元件(或對象)之間互相作用所需具備的程式設計要求。COM元件可以分布在同一個程序内,或者在不同的程序間,甚至是遠端的機器上。COM元件可以是用不同的語言編寫,結構也可以有很大的不同。COM被認為是一種二進制标準,因為它是一種當程式被編譯成二進制機器碼後才起作用的标準。 COM對語言的唯一要求就是必須能建立結構指針,并且能顯式地或隐式地通過指針調用函數。面向對象語言,如C++、Smalltalk等,都提供簡化COM元件實作的程式設計機制。其它語言環境,如C、Pascal、Ada、Java、BASIC等也都能建立和使用COM元件。 COM定義了COM元件的本質特征。一般來說,軟體是由一組資料以及操縱這些資料的函數構成的。COM元件通過一個或多個相關函數集來存取元件的資料,這些函數集稱為接口,而接口的函數稱為方法。COM元件通過接口指針調用接口的方法。 除了指定二進制元件标準,COM還定義一些基本的接口以提供一些所有基于COM元件的技術所公有的函數。此外,COM還提供一些所有元件所需要的API函數。 DCOM(the Distributed Component Object Model)擴充COM,以支援不同計算機之間的對象間通信,這些計算機可以是位于區域網路,廣域網,甚至是互連網。 DCOM是COM這一世界流行的元件技術的自然發展,是以可以在充分利用已有的基于COM的應用程式、元件、工具、知識等的基礎之上轉向分布式計算。DCOM使使用者能将重點放在真正的商業應用上,而不必關心太多的網絡協定細節。 DCOM位于應用程式的元件之間,将元件以不可見的方式膠合在一起組成具有完整功能的應用程式。 DCOM的特性使得編寫分布式應用程式變得容易: l          适合從最小的單機環境到最大的叢集伺服器 l          提供元件間的豐富的、均衡的通訊 l          可以強有力地擴充以适應功能需求 l          可充分利用已有元件,比如說COM元件 l          精通不同程式設計語言和開發工具的小組可以協同工作 l          為終端使用者提供最快的響應,同時又有效地節省網絡帶寬 l          固有的安全性 l          負載平衡和容錯特征 l          分發、配置和管理的高效性 l          可以同任何網絡協定相結合并內建到任何硬體平台 l          可以充分利用其它Internet标準和協定 DCOM規定了網絡上元件之間的通信協定,是以DCOM可以說是元件之間的TCP/IP協定。 COM/DCOM元件目前廣泛地用于Windows平台,由于Windows平台的極大的市場占有率,是以COM/DCOM事實上已經成為一種元件标準。COM/DCOM的流行還得益于衆多優秀的開發工具的支援,Visual C++、Visual Basic、Delphi等語言工具都支援COM元件的制作。 2.CORBA元件模型

CORBA(the Common Object Request Broker Architecture)是OMG(the Object Management Group)制定的開放的、獨立于開發商的體系結構和基礎構造,通過CORBA,計算機應用程式可以通過網絡協同運作。因為使用标準的IIOP(the Internet Inter-ORB Protocol)協定,兩個基于CORBA的程式,不管是來自任何開發商、運作在何種機器、采用哪種作業系統和程式設計語言、通過不同的網絡,都可以互相操作。 OMG,成立于1989年,是開發商,開發人員,以及最終使用者的聯盟。OMG的目标是鼓勵一種對象管理體系結構(OMA)的發展和标準化,這種對象管理體系結構提供在異種網絡上面向對象的分布式元件的廣泛互操作性。CORBA規範構成OMA體系結構的核心。 CORBA的體系結構是基于面向對象技術的,并且是圍繞着三個關鍵成份建構的:OMG的接口定義語言(IDL)、對象請求代理(ORB)、标準協定(IIOP)。 在對一個分布式系統進行初始的分析和設計之後,緊接着就是定義對象的接口。對象接口表達用戶端和伺服器端應用程式之間的協定。在CORBA系統中,使用IDL(the Interfaces Definition Language)來描述接口。IDL是獨立于語言的,它的文法和C++相似,包括子產品結構、接口、操作、屬性、使用者自定義類型、異常,等等。IDL并不指明接口的實作方式。不同的CORBA産品有不同的處理實作描述的方法。所有的CORBA産品都生成基于IDL定義的指定語言的綁定。C語言是第一個由CORBA指定的映射語言,此外,OMG還認可C++、Java、Smalltalk等語言綁定。IDL定義可以儲存在一個接口倉庫中,用戶端可以使用接口倉庫進行類型檢查以及執行動态接口操作。 ORB(the Object Request Broker) 是CORBA系統的核心。一個ORB将用戶端應用程式的請求遞送到伺服器端應用程式。用戶端的接口完全獨立于對象的實作。對分布式系統開發人員來說,底層的ORB實作方式是不重要的。重要的是ORB的接口和對象的接口是否有足夠好的定義以提供跨整個分布式環境的統一的架構,以及通過ORB建立起來的應用程式在不同平台之間是否能很好地溝通。ORB提供一種将用戶端請求傳達到目标對象實作的機制。ORB通過減低用戶端對方法調用細節的了解程度而簡化分布式開發,它使得用戶端的請求看上去象是本地過程調用。當用戶端調用一個方法,ORB負責找到對象的實作,必要時激活對象,将請求遞送給對象,并将任何響應結果傳回給調用者。

IIOP定義一整套資料格式化規則,這些規則稱為CDR,并且是按CORBA的接口定義語言所支援的類型來制定的。IIOP規範還通過使用CDR資料格式化規則定義了一套消息類型,這些消息類型支援CORBA核心規範中所有的ORB語義。CDR格式化規則和消息類型共同構成一個抽象的協定——GIOP(General Inter-ORB Protocol),GIOP消息可以通過任何傳輸協定發送,如:TCP/IP協定,SPX協定,SNA協定,等等。但是,為了確定ORB産品之間的互操作性,IIOP規範要求ORBs發送GIOP消息時要通過TCP/IP協定,因為TCP/IP是Internet上的面向連接配接的标準傳輸協定。簡單來說,GIOP加上TCP/IP就是IIOP。 CORBA引人注目的特征包括: l          極廣泛的平台和程式設計語言支援 l          與面向對象方法完全相容,以保持分布式應用程式的靈活性和可更新性 l          具有廣泛的開發商、開發人員、和使用者支援 l          開放的、可互操作的體系結構 l          包含一種靈活的對象間通訊的網際網路協定标準 l          支援面向對象的分布式應用程式 l          成熟的對象概念 l          接口和實作之間的良好分隔 CORBA 元件能運作于任何一種平台之上,特别是在Unix平台上,它已經成為編寫分布式應用程式以及中間件的标準元件模型。CORBA從一開始就是為了成為一種跨平台的分布式元件标準,經過多年的發展,已經成為一種成熟、完備的元件模型。CORBA和COM/DCOM之間一直是一種競争關系,因為微軟隻極力推崇自己定義的COM/DCOM,是以在微軟所提供的流行的開發工具,如:Visual C++、Visual Basic等,都不支援CORBA元件的程式設計,這對CORBA在Windows這一最主要的作業系統平台上的普及造成了極大的障礙。 2 .KCOM元件模型

無論是COM/DCOM,還是CORBA,它們都烙有很深的計算機軟硬體系統的印記。我們建構元件模型的目的是提供描述、反映、模拟現實世界的方法和工具。雖然計算機是我們的實作工具,但是我們的元件模型應該盡量避免受到計算機軟硬體系統的影響,想辦法建構最接近現實世界的元件模型。此外,一個好的元件模型應該成為普通人的日常工具,而不應該隻是計算機專家的專有工具。下面介紹一種全新的元件模型——KCOM元件模型。 KCOM Space是一種元件開發及運作平台,KCOM元件模型是KCOM Space的最重要的組成部分。

KCOM這個名稱由K和COM組成。K是Knowledge的首字母,代表知識和智能;COM是Component的縮寫,也是Commerce的縮寫,代表元件以及商務。KCOM既代表KCOM元件模型,也表示它是一種用于實作和運作電子商務的知識化、智能化的工具平台。

KCOM元件模型建立在這樣的觀念之上:元件可以層層包裹,同一層次的元件互相之間不直接作用,而是通過父(外層)元件間接作用,父元件相對子(内層)元件而言起了膠合作用。父元件和子元件之間通過消息通訊:父元件通過子元件的名稱向子元件發送消息;子元件因為無法知道父元件的名稱而隻能向外廣播消息,隐含的接受者就是父元件。一個元件接收到的消息來自兩方面:父元件和子元件。元件的事件與方法本質上是一樣的,從父元件發給子元件的消息叫做方法,從子元件發給父元件的消息叫做事件。 KCOM元件的子元件的實體位置可以分布在網絡的不同地方,隻要能通過某種方式傳遞消息,父元件和子元件就可以看成一個統一的整體。KCOM元件的這一特性表現為分布式元件計算。 KCOM元件所包含的子元件可以是動态的,每時每刻,都可以有新的子元件加入進來,也可以有子元件離開。一個最明顯的例子可以很好地說明動态元件的概念:如果将商店看成一個父元件,而顧客視為子元件,那麼顧客和商店之間就構成這樣一種動态關系。 由于KCOM元件之間是包含的關系,子元件相對父元件是一種局部的關系,是以KCOM元件的命名規則就很簡單了,隻要在同一層元件之間名稱不重複就可以了,而每一個KCOM元件所包含的子元件的數目是有限的,這樣對KCOM元件來說,就不必要有象GUID這樣的全局的辨別。對于位于網絡不同位置的KCOM元件,可以通過網絡位址加上元件名稱來辨別。 KCOM元件模型的目标就是最真實地反映現實世界。現實世界就是由大大小小的元件構成:大到宇宙,小到原子,元件層層包裹;物質世界如此,人類社會的組成也是這樣,從作為個體的人,到集體,到整個社會,都可以用元件加以描述。 COM/DCOM是目前業内流行的元件标準,将KCOM與COM/DCOM做比較,将有助于更好地了解KCOM的内涵。 COM/DCOM元件模型  l          COM/DCOM元件模型是一種平台獨立、分布式、面向對象的系統,用于建立可互相作用的二進制軟體元件。COM/DCOM是微軟的OLE(複合文檔)和ActiveX(可用于Internet的元件)以及許多其它技術的基礎技術。 l          COM/DCOM之是以被認為是一種二進制标準,是因為它是一種在應用程式被編譯成二進制機器碼之後才起作用的标準。 l          COM/DCOM不是一種面向對象語言,它也不指定一個應用程式如何構造,它是一種标準,它指明一種元件模型和使元件之間能夠互相操作的程式設計需求。COM/DCOM元件可以運作在單一程序、不同程序、甚至是遠端機器。 l          COM/DCOM元件可以通過許多程式設計語言來建立。許多面向對象語言,諸如C++,都提供可簡化COM/DCOM元件實作的程式設計機制。 l          COM/DCOM定義了一個COM/DCOM元件的核心實質。一般來說,一個軟體元件由一組資料以及管理這些資料的函數構成。一個COM/DCOM元件是這樣的一種軟體元件,它專門通過一組或多組相關的函數存取元件資料。這些函數集合稱為接口,而接口的函數稱為方法。對COM/DCOM來說,它需要的唯一的調用接口方法的途徑就是指向接口的指針。 l          編譯好的COM/DCOM元件是不能修改的,要增加新的功能隻能由開發商對元件源碼進行修改、更新,然後重新編譯生成新的COM/DCOM元件。 KCOM元件模型 l          KCOM是KCOM Space定義的一種元件模型,用于建立可互相組合作用的軟體元件。KCOM元件模型是KCOM Space平台及其應用程式的基礎。 l          KCOM不是一種二進制元件模型,KCOM元件不直接面向機器代碼,KCOM有自己的虛拟機運作KCOM元件。KCOM是一種源碼級的元件模型,它直接對結構化存儲在HKB檔案内的KCOM元件起作用。KCOM虛拟機屏蔽了計算機實作的細節。 l          KCOM直接指明一個KCOM元件應該包括的成份:元件外觀(KCOM Aspect),用于元件與外界互動的界面;元件方法(KCOM Method),用于指導元件如何操作運作;元件屬性(KCOM Property),用于存放元件的狀态值;元件事件(KCOM Event),用于定義在特定的運作過程中将會觸發的事件。KCOM有自己的語言,通過語言元件化,KCOM語言可以表現為多種形态,目前實作的是KCOM Basic語言。KCOM對程式設計語言加以改造和擴充,引入元件運算的功能。 l          在KCOM Space内,可以相同的使用方法編輯KCOM元件和普通元件,此外,還提供一些操作便于KCOM元件的使用,如裝載、導入、導出KCOM元件,就地制作、檢入、檢出KCOM元件。 l          KCOM元件的運作方式不同于運作COM元件:COM元件運作前必須先将整個OCX、DLL檔案下載下傳到用戶端作業系統注冊;而KCOM元件的運作則不必将整個HKB檔案下載下傳到用戶端浏覽器,而隻下載下傳目前用到的資料、代碼。實際過程是這樣的:先下載下傳KCOM元件首頁;使用者滑鼠、鍵盤操作産生事件,将響應事件的相應的KCOM方法下載下傳運作;連結到分頁面,将相應的頁面資料下載下傳,重複這些過程。KCOM Stage Control将下載下傳過的KCOM頁面、方法存放在本地硬碟,當下次運作該KCOM元件時,KCOM Stage能準确地知道哪些頁面和方法已經下載下傳過,哪些頁面和方法已經更新需要重新下載下傳,對于下載下傳過的還未更新的頁面和方法就從本地硬碟調入。KCOM元件的這一特性是使元件空間應用軟體能有效地運作于Web環境的重要因素之一,因為它使KCOM元件運作時需要通過Web傳輸的資料量減少到能充分适應Web環境的有限帶寬。 l          對KCOM應用程式來說,它的意義不僅僅是在于它是由元件組合而成,還有一個很重要的意義在于它自身又可以作為元件應用在其它應用環境之中。 l          制作好的KCOM元件除了能運作以完成特定的功能外,使用者還可以對它直接進行修改、更新,以提供定制的功能。 l          定義KCOM元件模型的目的在于以更加簡便、直覺、高效的方法将應用軟體元件化。  

繼續閱讀