COM原理筆記之二——COM對象與接口
一、 COM對象與C++對象的比較:
1、 封裝性:
COM對象的數(shù)據(jù)成員的封裝以組件模塊為最終邊界,對于對象用戶完全是透明的??蛻糁荒芡ㄟ^接口成員函數(shù)訪問對象的屬性。
雖然《COM原理》指出C++對象的封裝特性只是語義上的封裝,對于對象用戶是可見的。但是從封裝性必須滿足以下條件(有一個清晰的邊界,有確定的接口,受保護的內(nèi)部實現(xiàn))來考慮,我個人認為兩者之間并沒有太多的區(qū)別,只是表現(xiàn)形式上的不同而已。
2、 可重用性:
COM對象的可重用必表現(xiàn)在COM對象的包容與聚合,一個對象可以完全使用另一個對象的所有功能;
C++對象的可重用性主要體現(xiàn)在繼承性機制上,繼承性機制使得C++子類不僅可以重用其父類的數(shù)據(jù)結構與程序代碼,而且可在父類代碼的基礎方便地上進行修改與擴充,同時并不影響其對原有類的使用。
3、 多態(tài)性:
COM對象的多態(tài)性通過其所具有的接口才能體現(xiàn)出來。
C++對象通過虛函數(shù)與重載來體現(xiàn)。
二、 COM接口具有的一些特性:
1、 二進制特性:
接口規(guī)范并不建立在任何編程語言的基礎上,而是規(guī)定了二進制一級的標準。任何語言只要有足夠的數(shù)據(jù)表達能力,就可以對接口進行描述,從而可以用于與組件程序有關的應用開發(fā)。
2、 接口不變性:
接口是組件客戶程序和組件對象之間的橋梁,接口如果經(jīng)常發(fā)生變化,則客戶程序和組件程序也要跟著變化,這對應用系統(tǒng)的開發(fā)非常不利,也不符合組件化程序設計的思想。
3、 繼承性(擴展性)
根據(jù)COM規(guī)范,所有接口都必須從IUnknown派生,可以是直接派生,也可以是間接派生。COM不提倡接口繼承,同時接口與接口之間的繼承也只能是單繼承。
4、 多態(tài)性:
運行過程中的多態(tài)性。前面說COM對象的多態(tài)性通過COM接口來體現(xiàn),我們常常可以注意到多個不同的COM對象實現(xiàn)了同一個接口,客戶程序通過代碼便可以調用COM對象。
三、 COM對象的接口原則:
1、 對于同一個對象的不同接口指針,查詢得到的Iunknow接口必須完全相同。
2、 接口對稱性:對一個接口查詢其自身總應該成功。
3、 接口自反性:如果從一個接口指針查詢到另一個接口指針,則從第二個接口指針再回到第一個接口指針必定成功。
4、 接口傳遞性:如果從第一個接口指針查詢到第二個接口指針,從第二個接口指針可以查詢到第三個接口指針,則從第一個接口指針一定可以查詢到第三個接口指針。
5、 接口查詢時間無關性:如果在某一個時刻可以查詢到某一個接口指針,則以后任何時候查詢同樣的接口指針,一定可以查詢成功。
聯(lián)系客服