組件技術(shù)復習內(nèi)容_第1頁
組件技術(shù)復習內(nèi)容_第2頁
組件技術(shù)復習內(nèi)容_第3頁
組件技術(shù)復習內(nèi)容_第4頁
組件技術(shù)復習內(nèi)容_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、軟件組件技術(shù)復習內(nèi)容軟件組件技術(shù)作為軟件發(fā)展中的一個重要階段和當前主流軟件實現(xiàn)技術(shù),涵蓋了軟件開發(fā)的各個層次和各個方面,學習時需要區(qū)分問題的層次和范圍,以達到學以致用的目的。1. 組件要了解學習軟件組件技術(shù),首先要了解三個問題:什么是組件、為什么組件和組件的效果。什么是組件,反過來就是組件是什么。組件是一種軟件、一種為了實現(xiàn)軟件的跨平臺、跨語言、跨機器,具有獨立接口和實現(xiàn)模型的、以可執(zhí)行形態(tài)存在的軟件模塊。為什么組件,即組件出現(xiàn)的原因,從軟件發(fā)展角度看有三種決定性因素,即:平臺、人員和問題。問題是驅(qū)動、平臺是支撐、人員是關(guān)鍵。組件技術(shù)要解決的是分布式開發(fā)和執(zhí)行環(huán)境下的跨平臺、跨機器、跨語言問題

2、,硬件的發(fā)展特別是網(wǎng)絡(luò)技術(shù)的發(fā)展提供了組件的平臺基礎(chǔ),用戶的普遍化和開發(fā)的領(lǐng)域化從人員角度對軟件提出了新的要求。組件效果怎么樣,解決了跨平臺、跨機器、跨語言的問題,在多態(tài)、繼承、綁定、封裝和存在形態(tài)等方面都有不同于前期軟件的特征。具體如下表:特征對象組件多態(tài)函數(shù)多態(tài)(同名的方法可以根據(jù)參數(shù)類型和個數(shù)調(diào)用不同的函數(shù)體)和類多態(tài)(同一類型的變量可以根據(jù)實例化對象的不同調(diào)用不同的類里面的方法)接口多態(tài)(同一接口指針可以調(diào)用不同的實現(xiàn)這一接口的組件、同一組件的接口指針可以通過類型轉(zhuǎn)換調(diào)用組件上不同的接口內(nèi)的方法)繼承類繼承或代碼繼承(通過繼承重用父類的方法或?qū)傩裕┙涌诶^承或功能繼承(通過轉(zhuǎn)發(fā)調(diào)用或接口

3、重用另一組件的功能)綁定編譯時綁定或早綁定(除類多態(tài)是遲綁定外)運行時綁定或遲綁定(執(zhí)行時才確定調(diào)用的組件實例)封裝類封裝,通過public、protected和private等權(quán)限標識符確定方法和屬性的使用范圍接口封裝,接口指定了可以訪問的內(nèi)容和范圍形態(tài)以人可以閱讀改寫的代碼形式存在以機器可理解執(zhí)行的編碼存在2. COM組件COM是Component Object Model首字符,即組件對象模型,它是建立在二進制層次上的標準,定義了大量的標準接口用于各種用途,具有平臺無關(guān)性;但COM實現(xiàn)是平臺相關(guān)的,由Windows實現(xiàn)了規(guī)范要求以及許多輔助功能。3. COM接口4. COM模型模型是組件

4、技術(shù)的5. 接口繼承與類或?qū)ο蟛煌M件的二進制形態(tài)或可執(zhí)行代碼形態(tài)導致組件重用不能基于代碼,而要重用功能,為此采用了基于功能轉(zhuǎn)發(fā)的重用方式。根據(jù)轉(zhuǎn)發(fā)的方式不同,分為包容和聚合兩類。(a)包容(b)聚合包容時外部組件包含指向內(nèi)部組件接口的指針.外部組件相對來說是內(nèi)部組件的一個客戶,它將使用內(nèi)部組件的接口來實現(xiàn)它自己的接口.:對被包容對象沒有特殊要求,任何組件都能夠通過包容被繼承,包容對象要具有和被包容對象的相同接口,通過接口內(nèi)的方法調(diào)用來使用內(nèi)部對象的接口功能。聚合時:對被聚合對象必須經(jīng)過處理,把Iunkown接口進行分割,一個保持原來的名字,但實現(xiàn)功能的轉(zhuǎn)發(fā),另一個采用新名字,內(nèi)容采用原來的

5、實現(xiàn);外部對象不要求具有和內(nèi)部對象同名的接口,外部對象的QueryInterface實現(xiàn)中要實現(xiàn)對被聚合接口的查詢。相同點:包容和聚合都是實現(xiàn)接口繼承的,客戶程序不受所用實現(xiàn)方法的影響,外部對象的生命周期都包含內(nèi)部對象的生命周期,客戶程序能夠訪問到內(nèi)部對象的接口。不同部分:總之,包容和聚合都實現(xiàn)了一個接口對另一個接口的重用,但包容是通過方法調(diào)用的間接調(diào)用,可以更改被重用的功能;聚合是直接把客戶調(diào)用轉(zhuǎn)發(fā)給被聚合對象,不能更改功能。6. 可連接對象客戶程序和組件程序的連接是通過組件接口的指針調(diào)用組件的方法,而組件的遠程化和大型化為組件執(zhí)行帶來了執(zhí)行和通信的不確定性。如何使客戶程序及時獲取組件信息成

6、為客戶下一步行為的依據(jù)。存在兩種解決策略,一是客戶主動采用輪詢的方式獲取組件信息,缺點是占用組件執(zhí)行時間,而且由于輪詢有周期,存在延遲;二是實現(xiàn)組件到客戶程序的連接,以便組件及時發(fā)消息給客戶程序。COM技術(shù)采用后一種策略,通過創(chuàng)建可連接組件實現(xiàn)客戶程序和組件之間的連接,而且由于一個組件同時可能供多個客戶調(diào)用,兩個或兩個以上客戶程序需要組件信息時需要多個連接,進一步引入了連接點容器實現(xiàn)對多個連接點的管理。連接點組件需要實現(xiàn)IConnectionPoint接口,連接點容器需要實現(xiàn)IConnectionPointContainer接口。這兩個接口的內(nèi)容如下:7. 自動化對象自動化對象解決了不支持指針

7、語言對組件的調(diào)用(跨語言問題)。它是采用Idispatch接口和其實現(xiàn)對象來解決的。它是采用統(tǒng)一函數(shù)調(diào)用的方式來實現(xiàn)對所有組件的統(tǒng)一調(diào)用,先定義了一個union類型的變量Variant來統(tǒng)一不同類型的參數(shù),然后定義了一個結(jié)構(gòu)體數(shù)組統(tǒng)一不同個數(shù)的參數(shù),最后把方法名也作為函數(shù)參數(shù),定義了Invoke方法。通過自動化對象可以支持不支持指針的語言對組件的調(diào)用,但效率較低。8. 線程和套間組件程序的跨平臺、跨語言、跨進程和跨機器等特性決定了組件程序內(nèi)各個模塊的耦合更低,并發(fā)性更好。為了解決組件程序的執(zhí)行問題,借鑒了Win32操作系統(tǒng)的方法,通過劃分線程提高程序的執(zhí)行效率。線程的引入提高了組件的并發(fā)性,但

8、也把程序執(zhí)行方式從串行改為并行,需要開發(fā)人員寫并發(fā)安全的代碼,提高了程序編寫的復雜度。為了在執(zhí)行效率和開發(fā)效率間尋找平衡,com引入了套間來管理線程。套間分為兩類:單線程套間和多線程套間,其中起作用的是單線程套間。單線程套間如圖(a)所示,每個套間有一個線程、一個消息隊列和其管理的多個組件,組件的創(chuàng)建、執(zhí)行都有線程負責,所有對線程的調(diào)用都必須通過消息隊列,經(jīng)getmessage獲取后進入消息隊列,按消息隊列的存放次序逐個執(zhí)行組件,同步了對套間內(nèi)不同組件的調(diào)用。多線程套間如圖(b)所示,每個套間可以有一個或多個線程、管理一個或多個組件,沒有消息隊列,對線程沒有進入限制,線程的執(zhí)行由其自身負責,模

9、型不考慮不同線程之間的關(guān)系。(a)單線程套間(b)多線程套間套間的特征也決定了套間的性質(zhì),應(yīng)用中需要考慮同步、列集和代理等問題,具體內(nèi)容如下表所示。特征同步列集代理同一線程不需要,線程內(nèi)是串行執(zhí)行不需要,可以直接指針訪問不需要,不同部分相互可見到單套間線程不需要,套間內(nèi)線程的消息隊列決定了執(zhí)行次序需要,由消息隊列處理需要自由線程間需要,線程之間的同步由線程管理,寫程序時需要考慮同步問題進程內(nèi)不需要,相互之間共享存儲空間不需要套間到自由線程不需要需要,跨越了單線程套間需要進程間需要需要需要總的來看,單線程套間和多線程套間各有優(yōu)缺點,前者開發(fā)簡單、而且在每個套間都只擁有單個或需要串行的組件時,也能

10、得到好的執(zhí)行效率。多線程套間則在開發(fā)時需要考慮線程間或組件間的并發(fā)問題,不需要考慮套間內(nèi)不同線程的列集和代理問題,執(zhí)行效率明顯高于前者。9. 結(jié)構(gòu)化存儲組件程序包含多個組件,多個組件都要訪問同一個文件;每個組件可能訪問文件里的不同部分,需要不斷調(diào)整文件句柄的位置;當文件比較大時,一次讀入內(nèi)存耗費空間和時間都較大。為了解決了多個組件同時訪問單個數(shù)據(jù)文件時需要傳遞文件句柄,多個組件訪問同一文件不同位置時需要不斷改變文件句柄位置和訪問大的(內(nèi)存裝載不下)的文件時無法裝載、裝載慢的問題。結(jié)構(gòu)化存儲借鑒操作系統(tǒng)中文件系統(tǒng)把硬件資源分為文件的方法,把單個文件劃分為多個對象。結(jié)構(gòu)化存儲的對象分為兩類:存儲對

11、象和流對象。存儲對象,即IStorage對象,模擬目錄的作用,借鑒目錄的操作方法實現(xiàn)對文件的分層和管理,它的操作內(nèi)容涵蓋了目錄的操作方法,還提供了事務(wù)支持。流對象,即IStream(流)對象,模擬文件的作用,借鑒文件的操作方法實現(xiàn)具體數(shù)據(jù)的存儲,它的操作內(nèi)容涵蓋了文件的操作方法。通過結(jié)構(gòu)化存儲的層次劃分,每個組件可以訪問其中不同的流對象或存儲對象;特別是訪問位置不同時,相互訪問的存儲對象和流對象就不同,可以并發(fā)訪問;對每個組件只需要讀取所需要的對象,不需要考慮文件的其它部分。結(jié)構(gòu)化存儲還實現(xiàn)了對具體介質(zhì)的存儲,通過ILockBytes接口及其對象實現(xiàn)。10. 統(tǒng)一數(shù)據(jù)傳輸要實現(xiàn)兩個實體之間的數(shù)

12、據(jù)傳輸,需要確定兩個問題:傳輸什么數(shù)據(jù)和采用什么傳輸方式。組件程序的跨平臺、跨語言和跨機器特征使得不同部分可能需要不同類型的數(shù)據(jù),但對傳輸方式?jīng)]有新的要求。為此,要解決組件程序的數(shù)據(jù)傳輸問題,只需要在已有的傳輸協(xié)議上改善數(shù)據(jù)。異構(gòu)數(shù)據(jù)的交換和跨語言問題類似,存在兩兩轉(zhuǎn)換機制和統(tǒng)一機制兩種方法,顯然,統(tǒng)一數(shù)據(jù)方法在實現(xiàn)上和擴充性上都有優(yōu)勢,為此,組件技術(shù)采用統(tǒng)一數(shù)據(jù)方案。不同程序間轉(zhuǎn)遞的數(shù)據(jù)存在數(shù)據(jù)格式、存儲方式和訪問方式的不同。首先要統(tǒng)一數(shù)據(jù)。針對數(shù)據(jù)格式的問題,定義了FORMATETC來擴充數(shù)據(jù)格式,第一個CLIPFORMAT表示數(shù)據(jù)格式,存取不同格式的數(shù)據(jù)時可以取不同值,除支持標準格式外,

13、還可以自定義數(shù)據(jù)格式;第二個DVTARGETDEVICE表示設(shè)備信息,指向一個描述了設(shè)備名、端口名、設(shè)備驅(qū)動名等信息的結(jié)構(gòu)體;第三個指定圖形數(shù)據(jù)的顯示方式;第四個是對第三個的補充;第五個指定存儲介質(zhì)類型;第五個。針對存儲介質(zhì)的不同,定義了STGMEDIUM來統(tǒng)一存儲介質(zhì),第一個數(shù)據(jù)項表示介質(zhì)類型,第二個指向數(shù)據(jù)存儲位置,第三個是管理數(shù)據(jù)項的指針,由于存儲位置不同介質(zhì)不同,采用定義共同體來統(tǒng)一描述。typedef WORD CLIPFORMAT; typedef struct tagFORMATETC CLIPFORMAT cfFormat;/ 剪貼板數(shù)據(jù)格式 DVTARGETDEVICE *p

14、td;/ 設(shè)備有關(guān)的信息 DWORD dwAspect;/ 圖形數(shù)據(jù)的表現(xiàn)方式 LONG lindex;/ dwAspect成員的補充 DWORD tymed;/ 數(shù)據(jù)的存儲介質(zhì) FORMATETC;typedef struct tagSTGMEDIUM DWORD tymed;/ 存儲介質(zhì)的類型 union HBITMAP hBitmap; HMETAFILEPICT hMetaFilePict; HENHMETAFILE hEnhMetaFile; HGLOBAL hGlobal; LPOLESTR lpszFileName; IStream *pstm; IStorage *pstg;

15、u;/ 數(shù)據(jù)真正的位置 IUnknown *pUnkForRelease;/ 控制介質(zhì)資源的釋放 STGMEDIUM;統(tǒng)一數(shù)據(jù)后,還需要統(tǒng)一數(shù)據(jù)存取方式,通過定義IDataObject接口實現(xiàn)。包含了數(shù)據(jù)的存取和查詢、數(shù)據(jù)格式的查詢和轉(zhuǎn)換、連接的創(chuàng)建、刪除和枚舉等功能。其中, GetData 接受程序通過傳輸協(xié)議得到數(shù)據(jù)對象的接口指針后,按pFormatetc中指定格式提取數(shù)據(jù),并把數(shù)據(jù)放在pmedium 指針指定的位置,如果數(shù)據(jù)對象沒有所指定的格式,出錯返回。GetDataHere同GetData功能相同,但是由接受方負責預先分配存儲空間。QueryGetData詢問數(shù)據(jù)對象是否支持pFormatetc數(shù)據(jù)格式。GetCanonicalFormatEtc提供一個標準的等價的FORMATETC結(jié)構(gòu),據(jù)此判斷不同的FORMATETC結(jié)構(gòu)能否得到同樣的數(shù)據(jù),以免重復調(diào)用GetData。SetData用于接收方客戶程序為數(shù)據(jù)對象提供數(shù)據(jù)。EnumFormatEtc返回一個數(shù)據(jù)格式枚舉器,可以枚舉該數(shù)據(jù)對象所支持的數(shù)據(jù)格式。DAdvise在客戶的通報接收器(advisory sink)和數(shù)據(jù)對象之間建立一個通報連接(a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論