




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、軟件組件技術復習內容軟件組件技術作為軟件發展中的一個重要階段和當前主流軟件實現技術,涵蓋了軟件開發的各個層次和各個方面,學習時需要區分問題的層次和范圍,以達到學以致用的目的。1. 組件要了解學習軟件組件技術,首先要了解三個問題:什么是組件、為什么組件和組件的效果。什么是組件,反過來就是組件是什么。組件是一種軟件、一種為了實現軟件的跨平臺、跨語言、跨機器,具有獨立接口和實現模型的、以可執行形態存在的軟件模塊。為什么組件,即組件出現的原因,從軟件發展角度看有三種決定性因素,即:平臺、人員和問題。問題是驅動、平臺是支撐、人員是關鍵。組件技術要解決的是分布式開發和執行環境下的跨平臺、跨機器、跨語言問題
2、,硬件的發展特別是網絡技術的發展提供了組件的平臺基礎,用戶的普遍化和開發的領域化從人員角度對軟件提出了新的要求。組件效果怎么樣,解決了跨平臺、跨機器、跨語言的問題,在多態、繼承、綁定、封裝和存在形態等方面都有不同于前期軟件的特征。具體如下表:特征對象組件多態函數多態(同名的方法可以根據參數類型和個數調用不同的函數體)和類多態(同一類型的變量可以根據實例化對象的不同調用不同的類里面的方法)接口多態(同一接口指針可以調用不同的實現這一接口的組件、同一組件的接口指針可以通過類型轉換調用組件上不同的接口內的方法)繼承類繼承或代碼繼承(通過繼承重用父類的方法或屬性)接口繼承或功能繼承(通過轉發調用或接口
3、重用另一組件的功能)綁定編譯時綁定或早綁定(除類多態是遲綁定外)運行時綁定或遲綁定(執行時才確定調用的組件實例)封裝類封裝,通過public、protected和private等權限標識符確定方法和屬性的使用范圍接口封裝,接口指定了可以訪問的內容和范圍形態以人可以閱讀改寫的代碼形式存在以機器可理解執行的編碼存在2. COM組件COM是Component Object Model首字符,即組件對象模型,它是建立在二進制層次上的標準,定義了大量的標準接口用于各種用途,具有平臺無關性;但COM實現是平臺相關的,由Windows實現了規范要求以及許多輔助功能。3. COM接口4. COM模型模型是組件
4、技術的5. 接口繼承與類或對象不同,組件的二進制形態或可執行代碼形態導致組件重用不能基于代碼,而要重用功能,為此采用了基于功能轉發的重用方式。根據轉發的方式不同,分為包容和聚合兩類。(a)包容(b)聚合包容時外部組件包含指向內部組件接口的指針.外部組件相對來說是內部組件的一個客戶,它將使用內部組件的接口來實現它自己的接口.:對被包容對象沒有特殊要求,任何組件都能夠通過包容被繼承,包容對象要具有和被包容對象的相同接口,通過接口內的方法調用來使用內部對象的接口功能。聚合時:對被聚合對象必須經過處理,把Iunkown接口進行分割,一個保持原來的名字,但實現功能的轉發,另一個采用新名字,內容采用原來的
5、實現;外部對象不要求具有和內部對象同名的接口,外部對象的QueryInterface實現中要實現對被聚合接口的查詢。相同點:包容和聚合都是實現接口繼承的,客戶程序不受所用實現方法的影響,外部對象的生命周期都包含內部對象的生命周期,客戶程序能夠訪問到內部對象的接口。不同部分:總之,包容和聚合都實現了一個接口對另一個接口的重用,但包容是通過方法調用的間接調用,可以更改被重用的功能;聚合是直接把客戶調用轉發給被聚合對象,不能更改功能。6. 可連接對象客戶程序和組件程序的連接是通過組件接口的指針調用組件的方法,而組件的遠程化和大型化為組件執行帶來了執行和通信的不確定性。如何使客戶程序及時獲取組件信息成
6、為客戶下一步行為的依據。存在兩種解決策略,一是客戶主動采用輪詢的方式獲取組件信息,缺點是占用組件執行時間,而且由于輪詢有周期,存在延遲;二是實現組件到客戶程序的連接,以便組件及時發消息給客戶程序。COM技術采用后一種策略,通過創建可連接組件實現客戶程序和組件之間的連接,而且由于一個組件同時可能供多個客戶調用,兩個或兩個以上客戶程序需要組件信息時需要多個連接,進一步引入了連接點容器實現對多個連接點的管理。連接點組件需要實現IConnectionPoint接口,連接點容器需要實現IConnectionPointContainer接口。這兩個接口的內容如下:7. 自動化對象自動化對象解決了不支持指針
7、語言對組件的調用(跨語言問題)。它是采用Idispatch接口和其實現對象來解決的。它是采用統一函數調用的方式來實現對所有組件的統一調用,先定義了一個union類型的變量Variant來統一不同類型的參數,然后定義了一個結構體數組統一不同個數的參數,最后把方法名也作為函數參數,定義了Invoke方法。通過自動化對象可以支持不支持指針的語言對組件的調用,但效率較低。8. 線程和套間組件程序的跨平臺、跨語言、跨進程和跨機器等特性決定了組件程序內各個模塊的耦合更低,并發性更好。為了解決組件程序的執行問題,借鑒了Win32操作系統的方法,通過劃分線程提高程序的執行效率。線程的引入提高了組件的并發性,但
8、也把程序執行方式從串行改為并行,需要開發人員寫并發安全的代碼,提高了程序編寫的復雜度。為了在執行效率和開發效率間尋找平衡,com引入了套間來管理線程。套間分為兩類:單線程套間和多線程套間,其中起作用的是單線程套間。單線程套間如圖(a)所示,每個套間有一個線程、一個消息隊列和其管理的多個組件,組件的創建、執行都有線程負責,所有對線程的調用都必須通過消息隊列,經getmessage獲取后進入消息隊列,按消息隊列的存放次序逐個執行組件,同步了對套間內不同組件的調用。多線程套間如圖(b)所示,每個套間可以有一個或多個線程、管理一個或多個組件,沒有消息隊列,對線程沒有進入限制,線程的執行由其自身負責,模
9、型不考慮不同線程之間的關系。(a)單線程套間(b)多線程套間套間的特征也決定了套間的性質,應用中需要考慮同步、列集和代理等問題,具體內容如下表所示。特征同步列集代理同一線程不需要,線程內是串行執行不需要,可以直接指針訪問不需要,不同部分相互可見到單套間線程不需要,套間內線程的消息隊列決定了執行次序需要,由消息隊列處理需要自由線程間需要,線程之間的同步由線程管理,寫程序時需要考慮同步問題進程內不需要,相互之間共享存儲空間不需要套間到自由線程不需要需要,跨越了單線程套間需要進程間需要需要需要總的來看,單線程套間和多線程套間各有優缺點,前者開發簡單、而且在每個套間都只擁有單個或需要串行的組件時,也能
10、得到好的執行效率。多線程套間則在開發時需要考慮線程間或組件間的并發問題,不需要考慮套間內不同線程的列集和代理問題,執行效率明顯高于前者。9. 結構化存儲組件程序包含多個組件,多個組件都要訪問同一個文件;每個組件可能訪問文件里的不同部分,需要不斷調整文件句柄的位置;當文件比較大時,一次讀入內存耗費空間和時間都較大。為了解決了多個組件同時訪問單個數據文件時需要傳遞文件句柄,多個組件訪問同一文件不同位置時需要不斷改變文件句柄位置和訪問大的(內存裝載不下)的文件時無法裝載、裝載慢的問題。結構化存儲借鑒操作系統中文件系統把硬件資源分為文件的方法,把單個文件劃分為多個對象。結構化存儲的對象分為兩類:存儲對
11、象和流對象。存儲對象,即IStorage對象,模擬目錄的作用,借鑒目錄的操作方法實現對文件的分層和管理,它的操作內容涵蓋了目錄的操作方法,還提供了事務支持。流對象,即IStream(流)對象,模擬文件的作用,借鑒文件的操作方法實現具體數據的存儲,它的操作內容涵蓋了文件的操作方法。通過結構化存儲的層次劃分,每個組件可以訪問其中不同的流對象或存儲對象;特別是訪問位置不同時,相互訪問的存儲對象和流對象就不同,可以并發訪問;對每個組件只需要讀取所需要的對象,不需要考慮文件的其它部分。結構化存儲還實現了對具體介質的存儲,通過ILockBytes接口及其對象實現。10. 統一數據傳輸要實現兩個實體之間的數
12、據傳輸,需要確定兩個問題:傳輸什么數據和采用什么傳輸方式。組件程序的跨平臺、跨語言和跨機器特征使得不同部分可能需要不同類型的數據,但對傳輸方式沒有新的要求。為此,要解決組件程序的數據傳輸問題,只需要在已有的傳輸協議上改善數據。異構數據的交換和跨語言問題類似,存在兩兩轉換機制和統一機制兩種方法,顯然,統一數據方法在實現上和擴充性上都有優勢,為此,組件技術采用統一數據方案。不同程序間轉遞的數據存在數據格式、存儲方式和訪問方式的不同。首先要統一數據。針對數據格式的問題,定義了FORMATETC來擴充數據格式,第一個CLIPFORMAT表示數據格式,存取不同格式的數據時可以取不同值,除支持標準格式外,
13、還可以自定義數據格式;第二個DVTARGETDEVICE表示設備信息,指向一個描述了設備名、端口名、設備驅動名等信息的結構體;第三個指定圖形數據的顯示方式;第四個是對第三個的補充;第五個指定存儲介質類型;第五個。針對存儲介質的不同,定義了STGMEDIUM來統一存儲介質,第一個數據項表示介質類型,第二個指向數據存儲位置,第三個是管理數據項的指針,由于存儲位置不同介質不同,采用定義共同體來統一描述。typedef WORD CLIPFORMAT; typedef struct tagFORMATETC CLIPFORMAT cfFormat;/ 剪貼板數據格式 DVTARGETDEVICE *p
14、td;/ 設備有關的信息 DWORD dwAspect;/ 圖形數據的表現方式 LONG lindex;/ dwAspect成員的補充 DWORD tymed;/ 數據的存儲介質 FORMATETC;typedef struct tagSTGMEDIUM DWORD tymed;/ 存儲介質的類型 union HBITMAP hBitmap; HMETAFILEPICT hMetaFilePict; HENHMETAFILE hEnhMetaFile; HGLOBAL hGlobal; LPOLESTR lpszFileName; IStream *pstm; IStorage *pstg;
15、u;/ 數據真正的位置 IUnknown *pUnkForRelease;/ 控制介質資源的釋放 STGMEDIUM;統一數據后,還需要統一數據存取方式,通過定義IDataObject接口實現。包含了數據的存取和查詢、數據格式的查詢和轉換、連接的創建、刪除和枚舉等功能。其中, GetData 接受程序通過傳輸協議得到數據對象的接口指針后,按pFormatetc中指定格式提取數據,并把數據放在pmedium 指針指定的位置,如果數據對象沒有所指定的格式,出錯返回。GetDataHere同GetData功能相同,但是由接受方負責預先分配存儲空間。QueryGetData詢問數據對象是否支持pFormatetc數據格式。GetCanonicalFormatEtc提供一個標準的等價的FORMATETC結構,據此判斷不同的FORMATETC結構能否得到同樣的數據,以免重復調用GetData。SetData用于接收方客戶程序為數據對象提供數據。EnumFormatEtc返回一個數據格式枚舉器,可以枚舉該數據對象所支持的數據格式。DAdvise在客戶的通報接收器(advisory sink)和數據對象之間建立一個通報連接(a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業智能化與人力資源的變革
- 工業安全與智能制造的關系
- 工業污染源監測的新技術動態
- 工業物聯網在生產車間的應用實踐
- 工業自動化中機器視覺算法優化探討
- 工業能源管理與節能減排技術應用
- 工業綠色化與節能減排技術
- 工業級智能硬件產品的設計要求與標準
- 工業火災防控策略與方法
- 工業設計在制造業的未來應用
- 聯合排水試驗報告
- 2023江西管理職業學院教師招聘考試真題匯總
- 自動焊錫機方案
- 銀行固定資產自查報告
- 最完整工資條模板-工資條模版
- 精通五年級下冊英語教材解讀課件
- 23秋國家開放大學《小學語文教學研究》形考任務1-5參考答案
- 《化妝品監督管理條例》解讀
- 易導致患者跌倒的藥品目錄
- XXX垃圾填埋場初步設計
- 普外科科室規章制度模板
評論
0/150
提交評論