網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。 三、COM中的幾個重要概念 1、組件: 其實只要你仔細閱讀了前面的部分,組件的概念應該已經很清楚了。這里所說的組件,就是前面反復在討論的所謂“模塊”。現在我只想強調一下組件需要滿足的一些條件。首先是封裝性,組件必須向外部隱藏其內部的實現細節,使從外部所能看到的只是接口。然后是組件必須能動態鏈接到一起,而不必像面向對象中的class一樣必須重新編譯。 2、接口: 由于組件向外部隱藏了其內部的細節,因此客戶要使用組件時就必須通過一定的機制,也就是說要通過一定的方法來實現客戶與組件之間的通信,這就需要接口。所謂接口就是組件對外暴露的、向外部客戶提供服務的“連接點”。外部的客戶見不到組件內部的細節,它所能看到的只是接口,客戶也是通過接口來獲取組件提供的服務。這有點像OSI網絡協議分層模型,每一層就像一個組件,它內部的實現細節對于其他層是不可見的;而每一層通過“服務接入點”向其上層提供服務,這就像這里所說的接口。一般來說,接口總是固定的,也是公開的。組件的開發人員要實現這些接口,而客戶則通過接口獲得服務。正是接口的這種固定和公開,才使得組件和客戶能夠在不了解對方的情況下達成一致。 3、客戶: 這里所說的客戶不是指使用軟件的用戶,而是指要使用某一個組件的程序或模塊。也就是說,這里的客戶是相對組件來說的。 四、COM的實現原理與雛形模擬 COM編程的一個重要特點就是要模塊化,說得具體一些,就是要將客戶和組件分隔開來,而客戶和組件之間又是通過接口來通信的。下面,我就介紹一下COM是怎樣將客戶與組件分隔開來,又是怎樣利用接口來實現客戶與組件間的通信的。 首先我要講講接口。COM中的接口實際上是一個函數地址表,當組件實現了這個接口后,這個函數地址表中就填滿了組件所實現的那些接口函數的地址。而客戶也就是通過這個函數地址表獲得組件中那些接口函數的指針,從而獲得組件所提供的服務的。從某種意義上說,我們可以把接口理解為c++中的虛擬基類;或者說,在c++中可以用虛擬基類來實現接口!這是因為COM中規定的接口的存儲結構,和c++中的虛擬基類在內存中的結構是一致的。其存儲結構如下圖: 接口有了,那么組件又是怎樣實現接口的呢?實際上,如果用虛擬基類來實現接口,那么組件就是對這個虛擬基類的繼承。大家知道,當某個類繼承于一個虛擬基類的時候,它就要實現這個虛擬基類里聲明的虛函數,這就正好與組件實現接口這一點相吻合。舉一個例子來說明,有一個接口InterfaceA,組件ComponentB要實現這個接口,那么就可以這樣用c++語言來描述: //接口: 而客戶只需要得到一個指向ComponentB實體的InterfaceA指針就可以獲得ComponentB組件的服務了: //使用了組件ComponentB的客戶: 但是我們注意到,這樣做組件ComponentB和客戶還是沒有被完全分隔開。因為在客戶代碼里需要創建ComponentB實體,這對于只能看到接口而對組件一無所知的客戶來說,是不可以接受的(比如客戶不會知道組件的類名叫ComponentB)。解決這個問題的方法是在實現組件的動態鏈接文件(比如dll文件)里創建組件的實體,而不是在客戶代碼里創建組件實體。通常組件都是以dll的形式出現的,而在實現組件的dll里都會實現一個叫CreateInstance的函數,這個函數可以被外部的客戶調用。它返回一個接口的指針,當客戶調用這個函數后就能夠獲得指向組件實體的接口指針了。它的實現也很簡單: //在實現組件ComponentB的dll里: 當然,真正的CreateInstance函數沒有這么簡單,我上面的代碼只是一個簡單的模擬。有個CreateInstance函數之后,客戶代碼就變成了: //使用了組件ComponentB的客戶: 網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。 |
溫馨提示:喜歡本站的話,請收藏一下本站!