Component Object Model 組件對象模型

Component Object Model  組件對象模型

DLL和COM 的基本概念- -                                     

我在學習過程中對DLL和COM 的概念很模糊,我上網整理了一下相關的資料,貼出來,供大家學習參考。

一般來說,DLL是一種磁盤文件,以.DLL、.DRV、.FON、.SYS和許多以.EXE爲擴展名的系統文件都可以是DLL。它由全局數據、服 務函數和資源組成,在運行時被系統加載到進程的虛擬空間中,成爲調用進程的一部分。如果與其它DLL之間沒有衝突,該文件通常映射到進程虛擬空間的同一地 址上。DLL模塊中包含各種導出函數,用於向外界提供服務。DLL可以有自己的數據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個 DLL在內存中只有一個實例;DLL實現了代碼封裝性;DLL的編制與具體的編程語言及編譯器無關。

至於作用,先說說沒有dll的後果:比較大的應用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能,它們彼此協作來完成整個軟件系統的工作。 可能存在一些模塊的功能較爲通用,在構造其它軟件系統時仍會被使用。在構造軟件系統時,如果將所有模塊的源代碼都靜態編譯到整個應用程序EXE文件中,會 產生一些問題:一個缺點是增加了應用程序的大小,它會佔用更多的磁盤空間,程序運行時也會消耗較大的內存空間,造成系統資源的浪費;另一個缺點是,在編寫 大的EXE程序時,在每次修改重建時都必須調整編譯所有源代碼,增加了編譯過程的複雜性,也不利於階段性的單元測試。

  有了dll的好處:在Windows系統平臺上提供了一種完全不同的較有效的編程和運行環境,你可以將獨立的程序模塊創建爲較小的DLL (Dynamic Linkable Library)文件,並可對它們單獨編譯和測試。在運行時,只有當EXE程序確實要調用這些DLL模塊的情況下,系統纔會將它們裝載到內存空間中。這種 方式不僅減少了EXE文件的大小和對內存空間的需求,而且使這些DLL模塊可以同時被多個應用程序使用。Windows自己就將一些主要的系統功能以 DLL模塊的形式實現。

什麼是COM和COM+?

Components Object Model (COM) 是軟件組件互相通訊的一種方式。它是一種二進制和網絡標準,允許任意兩個組件互相通訊,而不管它們是在什麼計算機上運行(只要計算機是相連的),不管各計 算機運行的是什麼*作系統(只要該*作系統支持 COM),也不管該組件是用什麼語言編寫的。COM 還提供了位置透明性:當您編寫組件時,其他組件是進程內 DLL、本地 EXE 還是位於其他計算機上的組件,對您而言都無所謂。(當然會有性能區別,但是,即使改變了其他組件的位置,您也不必重新編寫什麼,這是關鍵所在。)

COM 是基於對象的??但是這種對象概念與您熟悉的 C++ 或 Visual Basic 中的對象不太一樣。(順便說一下,“對象”和“組件”幾乎是同一個東西。GUI 醫生在談論應用程序的結構時願意說成“組件”,而在談論實現時願意說成是“對象”)

首先,COM 對象被很好地封裝起來。您無法訪問對象的內部實現細節;您無法知道對象使用了什麼數據結構。實際上,對象的封裝是如此的嚴密,以致於 COM 對象通常被描繪爲盒子。圖 1 描繪了一個完全封裝的對象。請注意,實現細節是如何向您隱藏的。

Windows 2000中的Component Services是企業級應用中的非常重要的一部分,它爲那些基於web的、分佈式的應用程序提供了幾乎所有需要的功能。儘管COM+服務起初只是被設計 用來爲COM組件提供服務的,但是如果.NET組件也能夠使用COM+服務的話,那將會是一件很好的事。因爲COM+能夠爲組件提供很多服務如對象緩衝, 資源共享,給予角色的安全機制和分佈式事務處理等。

    概括地說,COM具有如下一些優越性:

編程技術難度和工作量降低,開發週期變短,開發成本降低。一般編程人員只須根據應用功能要求選用合適的組件,而不必事無鉅細都自己動手去完成。組件模塊將編程的技術難度和工作量在人員個體和時間上進行了分攤。

可以實現分層次的編程,從而促進了軟件的專業化生產。專業人員可以開發出具有很強專業性的軟件組件,這樣既保證了普通的編程應用人員能夠完成所需要的應用開發,又不至於降低使用的性能。應用人員不便實現的組件模塊可以讓專業人員定做。

    促進組件市場的豐富,最大限度地滿足了各種應用需求,定製特定的軟件模塊變得相當容易。

    軟件的複用率提高,使軟件的使用效率得到提高並延長了使用壽命。組件編程體系使大量的編程問題局部化了,使軟件的更新和維護變得快速和容易,軟件的成本大大降低。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章