第1章 元件 ===================================================================================
未經許可,也可轉載,但請注明出處!希望能夠與各位初學COM的網友共勉:-) =======================================================================本節要點:本章重點讨論了元件的優點以及軟體工業技術對元件的需求。為了解決軟體的頻繁更新問題,最有效的方法就是将應用程式分成一些小的元件,然後這些元件在運作時組裝起來形成所需要的應用程式,并且保證每一個元件在不影響其它元件的情況下被更新。為此,COM提供了編寫元件的一個标準方法。遵循COM标準的元件可以被組合起來以形成應用程式。至于這些元件是誰編寫的、如何實作的,都是無關緊要的。每一個COM元件均可同其它元件一起使用。實作這種可動态改變元件的關鍵問題是資訊的封裝。對于封裝,COM是通過元件和客戶之間的接口來實作的。
1、什麼是COM?
COM: Componet Object Model(元件對象模型),是開發軟體元件的方法之一。它也是一個如何建立可動态互變元件的規範,它提供了為保證能夠互操作,客戶群組件都必須遵循的一些标準。(P6 $1.3,也說明了元件并不就是COM)
2、什麼是元件?
元件實際上是一些小的二進制可執行的程式,它可以給應用程式、作業系統以及其它元件提供一些服務。元件可以在運作時、在不重新連結或編譯應用程式的情況下被解除安裝或替換掉。多個COM對象可以連接配接起來以形成應用程式或元件系統。
3、由元件構成的應用程式有何好處?

将單個應用程式分割為多個元件組成的程式(如上圖所示),其帶來的好處就是,随着技術的發展可以用新的元件取代原有的元件,進而逐漸使軟體日臻完善。這樣無需對整個程式進行更改編譯,進而更有利于軟體的維護和更新(如下圖所示)。另外還可以動态的從程式中插入和解除安裝。再次元件的使用可以做到與語言的無關性。
4、什麼是分布式元件?它們如何工作?
分布元件就是分布在網絡上的遠地元件(暫且本人這樣認為)。由分布在網絡上的多個元件構成分布式應用程式。
下圖是一個使用了遠端元件的分布式應用程式工作示意圖。
其本地上的兩個元件C群組件D被放在網絡上的遠端機上,取而代之的是兩個新的元件:遠端C和遠端D(實際上就是代理/存根DLL),這兩個元件的作用是将其他元件發來的請求通過網絡發給元件C群組件D。本地機器上的應用程式并不需要知道實際所應用的元件到底在何處。類似地,遠地元件也不需要知道他們是否位于遠地。這樣,通過加入合适的遠地元件,應用程式完全不需要知道實際的元件到底在哪裡,具體情況可參考本書P219 $10.4遠端通路能力。
5、對元件有何要求?
為了實作元件可以友善的從程式中動态插入和解除安裝,所有元件必須滿足下面兩個條件:
1、元件必須能夠動态連結。
2、必須能夠封裝其内部實作細節,對客戶做到完全透明。
6、如何将客戶群組件的實作很好的隔離開來?
1、元件必須将其實作所用的程式設計語言封裝起來。任一客戶都應能使用任一元件,不論它們是用什麼程式設計語言實作的。将實作用的程式設計語言暴露出來隻會在元件及客戶間引入新的依賴。
2、元件必須以二進制的形式釋出。如果想将實作元件的程式設計語言隐藏起來,那麼在釋出時,它們必須是已被編譯、連結好并且馬上就可以投入使用的。
3、元件必須可以在不妨礙已有使用者的情況下被更新。一個元件的新版本必須既能夠同老版本的客戶一起使用,也可以同心版本的客戶一起使用。
4、元件在網絡上的位置必須可以被透明的重新配置設定。元件及使用它的程式應能夠在同一程序中、不同的程序中或不同的機器上運作。否則,當将某個本地元件移動到網絡上的另外某個地方時,客戶程式必須被重新編譯。
7、什麼是COM規範?
COM規範就是一套為元件架構設定的标準文檔。遵循COM規範編寫的元件将能滿足對元件架構的所有要求。本書所開發的所有元件都遵守此标準。 8、COM是…?
1、COM元件是以Win32動态連結庫(DLL)或者可執行檔案(EXE)的形式釋出的可執行二進制代碼所組成的。
2、COM元件是動态連結的。
3、COM元件是完全與語言無關的。
4、COM元件是可以在網絡上透明的被重新配置設定位置的。
5、COM元件是在相容老客戶的情況下悄然更新的。
6、COM元件是一種給其它應用程式提供面向對象的API或服務的極好方法。
7、COM是組織軟體的一種方法。 9、COM不是…?
1、COM不是一種計算機語言。
2、COM不是DLL。
3、COM不是函數集。
4、COM不是類庫。
10、使用COM有那些好處?
1、提供了一個所有元件都應遵循的标準。
2、允許使用元件的多個不同的版本,而這一點對于使用者而言幾乎是透明的。
3、使得可以按相同的方式來處理類似的元件。
4、定義了一個與語言無關的架構。
5、支援對遠端元件的透明連接配接。
** 什麼是客戶?
對如一個應用程式或者元件,如果它使用了其它元件,相對于被使用的元件而言,我們将它稱之為客戶。(P5)
BENKONG2008-12-15