《軟件體系結(jié)構(gòu)》PPT課件.ppt
《《軟件體系結(jié)構(gòu)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《軟件體系結(jié)構(gòu)》PPT課件.ppt(256頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、軟 件 體 系 結(jié) 構(gòu) 第一部分,天津大學(xué)計算機(jī)學(xué)院 饒國政,課 程 內(nèi) 容, 軟件危機(jī) 軟件體系結(jié)構(gòu)概念 軟件體系結(jié)構(gòu)模式 體系結(jié)構(gòu)的設(shè)計模式 基礎(chǔ)結(jié)構(gòu)模式 軟件體系結(jié)構(gòu)的其它研究領(lǐng)域,,,第一章 軟件危機(jī),軟件 軟件的發(fā)展階段 軟件危機(jī) 軟件生命周期,軟件,軟件程序、數(shù)據(jù)和相關(guān)文檔的完整集合 軟件的特點(diǎn): 軟件是一個邏輯實(shí)體,而非物理實(shí)體; 軟件是人類抽象思維的產(chǎn)物; 開發(fā)過程沒有明顯的制作過程; 生產(chǎn)成本隨著軟件的復(fù)雜程度急劇增加(指數(shù)級); 容易復(fù)制、傳播; 維護(hù)工作復(fù)雜。,軟件的發(fā)展階段,三個發(fā)展階段 程序設(shè)計階段(5060年代中期) 程序系統(tǒng)階段(60中期70年代中期) 軟件工程階
2、段(70年代中期以來),軟件危機(jī), 軟件危機(jī)的表現(xiàn) 軟件成本估計不準(zhǔn)確 隨著軟件規(guī)模增長,軟件開發(fā)成本往往成指數(shù)級增長。, 開發(fā)進(jìn)度難以控制 由于軟件是邏輯、智力產(chǎn)品,軟件的開發(fā)需建立龐大的邏輯體系,這是與其他產(chǎn)品的生產(chǎn)不一樣的。 在軟件開發(fā)過程中,用戶需求變化等各種意想不到的情況層出不窮,令軟件開發(fā)過程很難保證按預(yù)定的計劃實(shí)現(xiàn),給項(xiàng)目計劃和論證工作帶來了很大的困難。 盲目增加軟件開發(fā)人員并不能成比例地提高軟件開發(fā)能力。相反,隨著人員數(shù)量的增加,人員的組織、協(xié)調(diào)、通信、培訓(xùn)和管理等方面的問題將更為嚴(yán)重。, 軟件質(zhì)量差 軟件項(xiàng)目即使能按預(yù)定日期完成,結(jié)果卻不盡人意。1965年至1970年,
3、美國范登堡基地發(fā)射火箭多次失敗,絕大部分故障是由應(yīng)用程序錯誤造成的。 在“軟件作坊”里,由于缺乏工程化思想的指導(dǎo),程序員幾乎總是習(xí)慣性地以自己的想法去代替用戶對軟件的需求,軟件設(shè)計帶有隨意性,很多功能只是程序員的“一廂情愿”而已,這是造成軟件不能令人滿意的重要因素。, 軟件開發(fā)缺乏適當(dāng)?shù)奈臋n資料 文檔資料對于軟件開發(fā)和軟件維護(hù)是至關(guān)重要的。, 軟件維護(hù)困難 由于在軟件設(shè)計和開發(fā)過程中,沒有嚴(yán)格遵循軟件開發(fā)標(biāo)準(zhǔn),各種隨意性很大,沒有完整的真實(shí)反映系統(tǒng)狀況的記錄文檔,給軟件維護(hù)造成了巨大的困難。 特別是在軟件使用過程中,原來的開發(fā)人員可能因各種原因已經(jīng)離開原來的開發(fā)組織,使得軟件幾乎不可維
4、護(hù)。 有資料表明,工業(yè)界為維護(hù)軟件支付的費(fèi)用占全部硬件和軟件費(fèi)用的40%-75%。, 如何克服軟件危機(jī),人們面臨的不光是技術(shù)問題,更重要的是管理問題。管理不善必然導(dǎo)致失敗 。 要提高軟件開發(fā)效率,提高軟件產(chǎn)品質(zhì)量,必須采用工程化的開發(fā)方法與工業(yè)化的生產(chǎn)技術(shù)。 軟件工程,軟件生命周期,軟件從孕育、誕生、成長、衰亡的生存過程,稱為軟件的生命周期。 六個步驟: 制定計劃:問題分析、可行性研究 需求分析 軟件系統(tǒng)設(shè)計:總體設(shè)計、詳細(xì)設(shè)計 軟件編碼 軟件測試 軟件維護(hù),第二章 軟件體系結(jié)構(gòu),基本概念 重要性 組件與連接器 風(fēng)格與模式 非功能屬性,,第一節(jié) 基本概念,定義還沒有達(dá)到共識。 以下幾個有
5、助于我們的理解 軟件體系結(jié)構(gòu)是一組具有一定形式的結(jié)構(gòu)化元素(設(shè)計元素)組成。 軟件體系結(jié)構(gòu)超越了計算過程中的算法設(shè)計和數(shù)據(jù)結(jié)構(gòu)。 四視圖觀點(diǎn):概念上的體系結(jié)構(gòu)、模塊體系結(jié)構(gòu)、代碼體系結(jié)構(gòu)和運(yùn)行體系結(jié)構(gòu)。 四模式觀點(diǎn):概念模式、框架模式、動態(tài)模式、進(jìn)程模式,,,,所以: 軟件體系結(jié)構(gòu)對軟件系統(tǒng)的構(gòu)造起著指導(dǎo)性作用。 它回避了軟件系統(tǒng)的功能細(xì)節(jié),著重于討論軟件系統(tǒng)的總體構(gòu)架。 它關(guān)注的是系統(tǒng)結(jié)構(gòu)及其組成組件。,,修正后的軟件生命周期: 需求分析 體系結(jié)構(gòu)設(shè)計:選擇模式,選擇組件,組件之間的關(guān)系以及它們之間的約束。以此為框架,為詳細(xì)設(shè)計奠定基礎(chǔ)。原為“總體設(shè)計” 詳細(xì)設(shè)計 實(shí)現(xiàn) 維護(hù),第二節(jié) 重要性
6、,良好的體系結(jié)構(gòu)設(shè)計是決定軟件系統(tǒng)成功的重要因素。 早期的教訓(xùn):IBM OS/360(1963-1966),軟件體系結(jié)構(gòu)的指導(dǎo)意義,,作為軟件開發(fā)的基本指導(dǎo)方針 整個軟件設(shè)計的開端,決定著開發(fā)工作的整體結(jié)構(gòu),具有更大的決策性和約束性。 體系結(jié)構(gòu)給予后繼開發(fā)人員一個可實(shí)現(xiàn)的指導(dǎo)和約束。,軟件體系結(jié)構(gòu)的指導(dǎo)意義,,對軟件質(zhì)量保證具有重大的影響 支配了從開發(fā)到維護(hù)項(xiàng)目的團(tuán)隊(duì)組織結(jié)構(gòu) 對軟件的修改、變動提供了保證和約束。 提供了軟件的可重用性,為什么體系結(jié)構(gòu)沒能早日引進(jìn)來呢?,,早期軟件開發(fā)被認(rèn)為是個人創(chuàng)造力的產(chǎn)物,靈活性很高,從而導(dǎo)致開發(fā)者無規(guī)可循。 早期軟件開發(fā)的規(guī)模較小,開發(fā)通常由個人或者小的團(tuán)
7、隊(duì)來完成,團(tuán)隊(duì)易于溝通交流,體系結(jié)構(gòu)的要求不迫切。 軟件產(chǎn)品提交給用戶的為編譯后的軟件,不能看到源代碼,其他人難以分析其結(jié)構(gòu),阻礙了技術(shù)的傳播。,,第三節(jié) 組件和連接器,現(xiàn)代軟件系統(tǒng)通常采用組件(構(gòu)件)的開發(fā)方法 組件:系統(tǒng)中的結(jié)構(gòu)塊,是軟件功能設(shè)計和實(shí)現(xiàn)的承載體。 連接器:組件之間進(jìn)行連接的組件。 軟件體系結(jié)構(gòu)的兩大構(gòu)成:組件、連接器,,組件,組件:系統(tǒng)中的結(jié)構(gòu)塊,是軟件功能設(shè)計和實(shí)現(xiàn)的承載體。 組件的表達(dá)形式: 組件是由封裝的內(nèi)部數(shù)據(jù)結(jié)構(gòu)及其操作,以及對外提供的操作方法集合組成。例:公安局,,,,,,,,組件,接口,組件的特性(略),連接器,連接:組件之間建立和維護(hù)行為關(guān)聯(lián)及信息傳遞的途徑
8、。 連接包含兩方面: 物質(zhì)基礎(chǔ):連接發(fā)生和維持的機(jī)制; 規(guī)約協(xié)議:連接能夠正確地、無二義、無沖突地進(jìn)行信息交換的保證。 例:電源轉(zhuǎn)接板,簡單連接:兩個組件直接連接,復(fù)雜連接:專門的連接組件(連接器),,,,,,連接器,,,,A組件,A組件,B組件,,B組件,連接的特性(略):方向性、激發(fā)、響應(yīng)特性 連接的匹配(連接器如何工作的呢): 修改組件:有源代碼 進(jìn)行包裝:常用方法 加入中介:比較復(fù)雜或要求靈活性的 握手:經(jīng)常變動的系統(tǒng),第四節(jié) 風(fēng)格和模式,軟件設(shè)計人員在長期開發(fā)某種類型軟件過程中摸索到該類軟件的一些規(guī)律性的東西,經(jīng)過提煉總結(jié),得到了具有普遍性的構(gòu)建模式或稱為構(gòu)建風(fēng)格。 本課程將討論學(xué)習(xí)
9、應(yīng)用較廣泛的體系結(jié)構(gòu)風(fēng)格或模式。,使用軟件體系結(jié)構(gòu)的風(fēng)格和模式的意義: 便于設(shè)計開發(fā)者之間互相交流 促進(jìn)了設(shè)計的復(fù)用 也促進(jìn)了代碼的復(fù)用 使用標(biāo)準(zhǔn)的風(fēng)格和模式有利于支持互操作 所以:有利于交流和理解; 有利于提高軟件設(shè)計實(shí)施的效率和質(zhì)量; 風(fēng)格和模式的完善和系統(tǒng)化,也標(biāo)志軟件體系結(jié)構(gòu)的成熟。,,我們對風(fēng)格、模式和框架不加區(qū)分。 我們講解側(cè)重于模式。 模式分為三個層次: 系統(tǒng)體系結(jié)構(gòu)模式(第三章) 體系結(jié)構(gòu)的設(shè)計模式(第四章) 基礎(chǔ)結(jié)構(gòu)模式(第五章),系統(tǒng)體系結(jié)構(gòu)模式,體系結(jié)構(gòu)的設(shè)計模式,基礎(chǔ)結(jié)構(gòu)模式,范圍最大,層次最高,中等規(guī)模,獨(dú)立于特定語言,最低層、最基礎(chǔ)的模式,和特定語言有關(guān),系
10、統(tǒng)體系結(jié)構(gòu)模式,體系結(jié)構(gòu)的設(shè)計模式,基礎(chǔ)結(jié)構(gòu)模式,卷一、卷二、卷三,參考書,Robert C. Martin 清華大學(xué)出版社,第五節(jié) 非功能屬性,功能屬性 非功能屬性: 易修改性: 可維護(hù)性 可擴(kuò)展性 結(jié)構(gòu)重組,可移植性: 硬件平臺、 操作系統(tǒng)、 用戶界面、 編程語言 互操作性: 軟件需要經(jīng)常與其它系統(tǒng)和周圍的硬軟件軟件入口,可靠性 容錯能力 健壯性 效率 響應(yīng)時間、吞吐率、存儲空間,可重用性 重用現(xiàn)有的組件和重用以前的項(xiàng)目、商業(yè)庫、設(shè)計分析、設(shè)計說明。 為重用進(jìn)行軟件開發(fā) 可測試性 軟件系統(tǒng)變的越來越大,越來越復(fù)雜,軟件測試工作也變得越來越困難和昂貴。,第三章 系統(tǒng)體系結(jié)構(gòu)模式,十種模式:
11、管道過濾器、 分層、 知識庫(黑板)、 MVC、 PAC、,客戶與服務(wù)器、 COM/DCOM/COM+、 代理者、 微核、 映像、 異構(gòu),,每種體系結(jié)構(gòu)的講解內(nèi)容,概述 結(jié)構(gòu):靜態(tài) 動態(tài)特性 實(shí)現(xiàn) 特性 變體 優(yōu)缺點(diǎn),Google八周歲了!,第1節(jié) 管道過濾器,概述 結(jié)構(gòu) 動態(tài)特性 實(shí)現(xiàn) 特性 變體 優(yōu)缺點(diǎn),,1 概述,數(shù)據(jù)流處理系統(tǒng) 示例:UNIX操作系統(tǒng)的管道過濾器 示例:語言編譯器,,掃描器,語法分析,編譯器,語義分析,調(diào)用,輸入,代碼生成,,,,,,2 靜態(tài)結(jié)構(gòu),過濾器組件,過濾器組件,,,管道,過濾器組件,,,管道,輸入,輸入,輸出,輸出,數(shù)據(jù)源,輸出,數(shù)據(jù)池,過濾器組件,3種激活方
12、式 (1)后續(xù)的組件從過濾器中拉出數(shù)據(jù); (2)前面的組件向過濾器推入新數(shù)據(jù); (3)過濾器處于活躍狀態(tài),以循環(huán)的方式,不斷地從前面的組件中拉出數(shù)據(jù),并向后續(xù)的組件推入數(shù)據(jù)。 前兩種稱為被動過濾器;后一種稱為主動過濾器,,數(shù)據(jù)源,(1)主動:將數(shù)據(jù)推入過濾器 (2)被動:在過濾器需要時被動提供數(shù)據(jù),,數(shù)據(jù)池,(1)主動:從過濾器拉出來數(shù)據(jù) (2)被動:在過濾器把結(jié)果推入或?qū)懭?,管道組件,管道是過濾器之間的連接。 管道:(1)對被動過濾器的直接調(diào)用。 (2)兩個主動過濾器進(jìn)行同步,,一般結(jié)構(gòu),過濾器,過濾器,,管道過濾器結(jié)構(gòu),過濾器,管道,數(shù)據(jù)流,數(shù)據(jù)源,數(shù)據(jù)池,過濾器,,,,,,,,,
13、,,,,3 動態(tài)特性,,,4 實(shí)現(xiàn),(1)把系統(tǒng)任務(wù)分成幾個獨(dú)立的處理階段。 (2)定義沿著每個管道傳輸?shù)臄?shù)據(jù)格式。 (3)決定管道的連接。 (4)設(shè)計和實(shí)現(xiàn)過濾器。 (5)設(shè)計出錯處理。 (6)建立處理流水線。,應(yīng)用舉例,搜索引擎 快速全面的原因 抓取、分詞、索引、頁面等級評定、查詢,,,,,5 特 性,(1)每個過濾器都是獨(dú)立的整體,相互之間的狀態(tài)互不影響。 (2)過濾器并不知道它的上游和下游連接的過濾器的特性。 (3)運(yùn)行結(jié)果的正確性不依賴于各個過濾器運(yùn)行的次序。,6 變 體,(1)限制過濾器為單輸入、單輸出:從拓?fù)浣Y(jié)構(gòu)上看,為線性,過濾器組件,過濾器組件,,,管道,過濾器組件,,,管道
14、,輸入,輸入,輸出,輸出,輸出,(2)如果允許過濾器的輸入或輸出多于一個:造成反饋回路(拓?fù)浣Y(jié)構(gòu):有向圖)。需要保證系統(tǒng)可終止。 (3)有名管道(文件),過濾器,過濾器,,管道過濾器結(jié)構(gòu),過濾器,管道,數(shù)據(jù)流,數(shù)據(jù)源,數(shù)據(jù)池,過濾器,,,,,,,,,,,,7 優(yōu)缺點(diǎn),1、優(yōu)點(diǎn) 易于重組,增加了系統(tǒng)的靈活性。 易于更新、升級和維護(hù) 易于重用。 并行處理提高了系統(tǒng)的效率。? 快速原型系統(tǒng)的設(shè)計實(shí)現(xiàn) 拓?fù)浣Y(jié)構(gòu)清晰,方便性能分析。,優(yōu)缺點(diǎn),2、缺點(diǎn) 會導(dǎo)致數(shù)據(jù)的批處理方式。 不適合處理交互式應(yīng)用要求。 增加了系統(tǒng)的開銷和復(fù)雜性。 共享狀態(tài)信息代價高且不靈活。 用并行處理來獲得高效率是不可行的。? 難
15、以進(jìn)行錯誤處理。,第2節(jié) 分層結(jié)構(gòu),1、概述 復(fù)雜系統(tǒng)的解決方法之一:層次化 軟件系統(tǒng)的發(fā)展過程就是不斷分層的過程 層次系統(tǒng)組織成一個層次結(jié)構(gòu),每一層為上層服務(wù),并作為下層客戶。,網(wǎng)絡(luò),,操作系統(tǒng)(Windows為例),,數(shù)據(jù)庫,,2 分層的靜態(tài)結(jié)構(gòu),系統(tǒng)的每一層向它的上一層提供服務(wù),同時又作為下一層的客戶,調(diào)用下層提供的功能函數(shù)。 簡單分層的結(jié)構(gòu)(3層) 核心層 功能層 應(yīng)用層,,,3 分層的方案,簡單、直觀 最主要特征:N層的服務(wù)只能被N+1層調(diào)用,各層之間沒有更多的依賴性。,,,組件3,組件3,,,組件2,組件2,,,組件1,組件1,組件1,,,,,,,4 分層的動態(tài)特性,一、自頂
16、向下:請求,,二、自底向上:通知,,三、部分請求,,四、部分通知,,五:協(xié)議堆棧,5 分層結(jié)構(gòu)的實(shí)現(xiàn),(1)為便于分層,定義抽象準(zhǔn)則 (2)根據(jù)抽象準(zhǔn)則定義抽象層數(shù) (3)給每一層命名并指定它們的任務(wù) (4)指定服務(wù),,,(5)為每個層定義接口:黑盒 (6)構(gòu)建獨(dú)立的層 (7)確定相鄰層間的通信:推/拉模式 (8)降低相鄰層的耦合程度 (9)設(shè)計錯誤處理策略:近可能在低層,6 分層的應(yīng)用實(shí)例,通信協(xié)議TCP/IP,虛擬機(jī),API棧,,J2EE的結(jié)構(gòu)圖(.NET結(jié)構(gòu)類似),J2EE Blueprints,Sun公司的J2EE開發(fā)技術(shù)的演示 網(wǎng)上寵物商店:不斷更新展示最新的Java開發(fā)技術(shù) 三層結(jié)
17、構(gòu) 表示層 業(yè)務(wù)邏輯層 數(shù)據(jù)層(持久層),,使用界面和功能介紹 寵物展示 購物車 用戶登錄 配貨處理 Ajax支持,,,Google Map,,,,,,,,表示層組件,,,,,業(yè)務(wù)層組件,,,,,數(shù)據(jù)層組件,數(shù)據(jù)層組件,,,表示層,業(yè)務(wù)層,數(shù)據(jù)層,,,,,JSP、HTML,,,,,Session Bean,,,,,Entity Bean,Entity Bean,,,表示層,業(yè)務(wù)層,數(shù)據(jù)層,7 分層結(jié)構(gòu)的變體,(1)松弛(寬松)分層結(jié)構(gòu) 定義:有些層可以直接使用下面幾層的服務(wù),而不僅是相鄰層的服務(wù)。 特點(diǎn):增加了靈活性和效率,但卻犧牲了可維護(hù)性。 應(yīng)用:常用于系統(tǒng)軟件,較少用于應(yīng)用軟件。,(2)
18、通過繼承的分層結(jié)構(gòu) 定義:低層作為基類,較高的層通過繼承來使用低層的服務(wù)。 優(yōu)點(diǎn):高層可以根據(jù)需要修改低層的服務(wù)。 缺點(diǎn):繼承關(guān)系把高層和低層緊密聯(lián)系在一起。 (違反了“合成/聚合復(fù)用原則“),8 分層結(jié)構(gòu)的優(yōu)缺點(diǎn),優(yōu)點(diǎn): (1)層的重用 (2)對軟件標(biāo)準(zhǔn)化的支持 (3)局部依賴性 (4)可替換性,缺點(diǎn): (1)更改行為的連鎖性 (2)運(yùn)行效率低 (3)可能增加許多不必要的工作:(可能低層執(zhí)行了許多高層不需要的重復(fù)性工作) (4)很難確定分層的準(zhǔn)確程度,第三節(jié) 知識庫(黑板)結(jié)構(gòu),1 概述,,(1)適合無確定性求解策略的問題 難以用數(shù)學(xué)精確處理的問題:醫(yī)療、地震、天氣 人工智能:專家系統(tǒng)、模式
19、識別、智能機(jī)器人 (2)黑板系統(tǒng)是知識庫系統(tǒng)的一種。 (3)示例: HEARSAY-II語音識別系統(tǒng) HASP潛艇探測系統(tǒng) CRYSALIS蛋白質(zhì)分子的三維結(jié)構(gòu),2 結(jié)構(gòu),,組成部分 (1)表示當(dāng)前狀態(tài)的中心公共數(shù)據(jù)結(jié)構(gòu):黑板 (2)知識庫:是一些獨(dú)立的、分離的與應(yīng)用程序有關(guān)的知識庫 (3)一組對公共數(shù)據(jù)結(jié)構(gòu)進(jìn)行協(xié)同操作的獨(dú)立程序集合 (4)推理機(jī):中心控制組件,對黑板的信息進(jìn)行評估,并協(xié)調(diào)各專用程序進(jìn)行工作。, 倉庫系統(tǒng)及知識庫,,,,初始狀態(tài),目標(biāo)狀態(tài),,中間狀態(tài),,中間狀態(tài),,推理,知識庫,知識庫,知識庫,知識庫,3 動態(tài)特性,,(1)描述初始數(shù)據(jù)到黑板中 (2)啟動控制組件的主循環(huán) (
20、3)控制組件調(diào)用nextsource()過程,選擇下一條知識 (4)nextsource()通過檢測黑板確定哪些知識是可匹配的知識用知識的條件部分匹配黑板上的數(shù)據(jù),(續(xù)),(5)根據(jù)預(yù)先確定的控制策略進(jìn)行評估,在所有匹配的知識中選擇一條知識進(jìn)行操作 (6)根據(jù)該條知識的操作部分,更新黑板上數(shù)據(jù)的內(nèi)容 (7)控制策略判斷是否已達(dá)到系統(tǒng)終止條件,如果未達(dá)到,轉(zhuǎn)向步驟3 (8)終止,,,4 實(shí)現(xiàn),,(1)定義問題 (2)定義問題的解空間 (3)將求解過程分成幾個步驟 (1)定義如何將低級中間解轉(zhuǎn)換成更高等級解 (2 )定義如何進(jìn)行啟發(fā)性搜索 (3 )詳細(xì)指出修剪部分解空間的知識類型 (4 )將知識分
21、解成與一定子任務(wù)相關(guān)聯(lián)的專門知識 (5 )定義黑板上的詞匯集,,(6 )設(shè)計系統(tǒng)的控制 (7 )實(shí)現(xiàn)知識庫,,5 應(yīng)用實(shí)例,HEARSAYII 語音查詢,數(shù)據(jù)庫 類似于Google的語音搜索,6 優(yōu)缺點(diǎn),,優(yōu)點(diǎn): (1)可應(yīng)用于許多沒有確定解方法的問題 (2)支持可更改性和可維護(hù)性 (3)知識可重用 (4)支持容錯性和健壯性,,,缺點(diǎn): (1)測試?yán)щy (2)不能保證最優(yōu)的求解方案 (3)效率低 (4)開發(fā)工作昂貴 (5)缺少對并行機(jī)制的支持,第四節(jié) MVC結(jié)構(gòu),1、概述,圖形用戶界面增強(qiáng)和用戶的交互性 用戶界面的問題: 用戶界面經(jīng)常需要變動 不同的用戶對用戶界面的要求不同:熟練用戶和初級用戶
22、 同樣的數(shù)據(jù)需要不同的用戶界面 用戶界面和功能核心的關(guān)系,解決之道,不可取的方式:用戶界面和功能核心緊密結(jié)合 目標(biāo):用戶界面的易改動性、功能核心的相對穩(wěn)定性 解決方案:MVC(模型視圖控制)結(jié)構(gòu),,MVC結(jié)構(gòu)首先應(yīng)用在Smalltalk環(huán)境。 目前廣泛應(yīng)用于圖形用戶界面和交互式系統(tǒng)。 比如:MFC、ET++、Java類庫、Spring、Struts等,2、MVC靜態(tài)結(jié)構(gòu),3個組成部分:模型、視圖、控制 模型:系統(tǒng)處理問題邏輯的內(nèi)在抽象。它封裝了問題的核心數(shù)據(jù),以及邏輯和功能的計算關(guān)系。內(nèi)在 視圖:把表示模型的數(shù)據(jù)和邏輯關(guān)系以及系統(tǒng)的狀態(tài)等信息以特定的方式顯示給用戶。外表 控制:處理用戶和應(yīng)用系
23、統(tǒng)的交互操作。,模型、視圖、控制的分離,使得一個模型可以具有多個顯示視圖。 模型變化的傳播機(jī)制:模型、視圖、控制保證一致性。,,,,MVC的幾個部分,,3 MVC的動態(tài)特性,,4 MVC的設(shè)計實(shí)現(xiàn),1、分析應(yīng)用問題,將交互界面與核心功能分離 2、實(shí)現(xiàn)觀察器、模型;并實(shí)現(xiàn)它們之間的變更傳播機(jī)制(注冊)。 class observer public: virtual void update() ;,,class Model public: Void attach(observer *s); Void detach(observer *s); Virtual void notify(); Priva
24、te: Collection registry; ;,,,Void Model::notify() Iterator iter(registry); While( iter.next() ) iter.curr()-update(); ,3、實(shí)現(xiàn)視圖,Class View : public observer Public: view (Model *m):myModel(m),myController(0) myModel -attach(this); virtual view() myModel -detach(this); virtual void update
25、() this-draw(); virtual void initialize() virtual void draw(); Void setModel(Model *m) myModel = m; Model *getModel() return myModel; Void setController(Controller *c)myController = c; Controller *getController() return myController; protected: Model *myModel; Controller *myController; ;
26、,,,,,4、實(shí)現(xiàn)控制器,Class Controller : public observer Public: Virtual void handleEvent(event *) Controller(view *v):myView(v) myModel = myView-getModel(); myModel -attach(this); virtual Controller() myModel -detach(this); virtual void update() Void setModel(Model *m) myModel = m; Model *getMod
27、el() return myModel; Void setView(View *c) myView = c; Controller *getView() return myView; protected: Model *myModel; Controller *myView; ;,,,,,,實(shí)例,,5 MVC的變體,1、將視圖和控制器合并在一個組件中(文檔視圖):典型案例為MFC,觀察者模式(Observer模式),,實(shí)例,,,,,,6 MVC的優(yōu)缺點(diǎn),優(yōu)點(diǎn): :同一模型可有多個視圖 :視圖同步化 :視圖與控制器可接插性 :模型的可移植性 :潛在的框架結(jié)構(gòu),缺點(diǎn): :
28、增加了系統(tǒng)結(jié)構(gòu)的復(fù)雜性 :視圖與控制器間的連接過于緊密 :數(shù)據(jù)訪問的效率 :使用現(xiàn)代用戶界面工具的困難,,第五節(jié) PAC結(jié)構(gòu),1、PAC結(jié)構(gòu)概述,表示抽象控制體系結(jié)構(gòu)是以相互協(xié)作的代理程序組成的層次形式來定義的交互式軟件體系結(jié)構(gòu)。 每個代理程序負(fù)責(zé)應(yīng)用程序的某一個特定功能方面,而且每個代理程序均由表示、抽象和控制3個組件。 PAC結(jié)構(gòu)把代理程序的人機(jī)交互部分與其功能內(nèi)核及其通信部分分隔開來。,,所以:在這種結(jié)構(gòu)中,是將系統(tǒng)功能進(jìn)行橫向分解。 分解為多個代理程序。 這些代理程序互相交互來完成軟件的功能。,2、PAC結(jié)構(gòu)的方案,樹狀的代理程序集合來建立交互式應(yīng)用程序 樹根部分頂層的代理程序 樹干部
29、分中層的代理程序 樹葉部分低層的代理程序 整個樹型圖反映了代理程序之間的傳遞關(guān)系。 每個代理程序依賴于它上面的代理程序,直至樹根部的頂層代理程序。依賴倒轉(zhuǎn)原則,,,PAC到哪兒去了呢?,在每個代理程序內(nèi)部,都包括了PAC三個組件: 表示組件(P):提供PAC代理程序的可視行為。 抽象組件(A):基礎(chǔ)的數(shù)據(jù)模型。 控制組件(C):連接表示組件和抽象組件,并與其他組件通信。,以此為例,說明樹根、樹葉、樹干部分的代理程序的功能。,,3、PAC結(jié)構(gòu),PAC結(jié)構(gòu)中的各部分的功能分析 (1)樹根部的代理程序 抽象組件:反映的軟件的整體數(shù)據(jù)模型 表示組件:一般很少有職責(zé) 控制組件:協(xié)調(diào)各級代理程序之間的關(guān)系
30、,(2)樹葉代理程序:具體語義概念 抽象組件:維護(hù)本代理的數(shù)據(jù)。 表示組件:語義視圖,對用戶的交互。 控制組件:與上層代理的通信、交換事件與數(shù)據(jù)。,(3)樹干代理程序:合成與協(xié)作 抽象組件:維護(hù)本代理特殊的數(shù)據(jù)。 表示組件:實(shí)現(xiàn)自己的視圖。 控制組件:與上下層代理的通信、交換事件與數(shù)據(jù)。,,,4、動態(tài)特性,,5、PAC結(jié)構(gòu)的設(shè)計實(shí)現(xiàn),共分九步。 關(guān)鍵的部分:根部PAC代理程序、葉部PAC代理程序、樹干部PAC代理程序,6、應(yīng)用實(shí)例,7、優(yōu)缺點(diǎn),優(yōu)點(diǎn): (1)事物分離單一職責(zé)原則 (2)易于變化和擴(kuò)展易于變化(迪米特法則)、擴(kuò)展(依賴倒轉(zhuǎn)原則) (3)支持多任務(wù)代理程序可分配到不同的線程、進(jìn)程或
31、機(jī)器上。,,缺點(diǎn): (1)系統(tǒng)的復(fù)雜性提高 (2)控制組件復(fù)雜 (3)代理程序間的通信會影響系統(tǒng)效率 (4)分解粒度越小,則用戶界面相似性越多,但可用性就越差。,第六節(jié) 客戶/服務(wù)器結(jié)構(gòu),1、概述,MVC、PAC解決:同一程序內(nèi)的不同部分的交互問題。 那么 不同程序之間 的交互如何處理呢? 為什么會出現(xiàn)“不同程序之間的交互”呢?,,1)一個程序不可能完成所有的工作;這些非核心的工作需要交給其他的程序。 如數(shù)據(jù)庫服務(wù)器程序 2)地理位置的分隔,也必然會使得兩個程序需要交互。 網(wǎng)絡(luò)應(yīng)用程序,,客戶/服務(wù)器 結(jié)構(gòu) 一個應(yīng)用系統(tǒng)被分成了兩個邏輯上分離的部分:客戶、服務(wù)器。 它們完成不同的功能。 客戶:
32、發(fā)出請求 服務(wù)器:接受請求,完成服務(wù)功能。,發(fā)展演變過程,1、基本客戶/服務(wù)器系統(tǒng) 客戶負(fù)責(zé)與用戶的交互,向服務(wù)器請求 服務(wù)器負(fù)責(zé)操作數(shù)據(jù)庫,并把查詢結(jié)果發(fā)送給客戶,,2、把客戶和服務(wù)器中的應(yīng)用操作部分抽取出來形成應(yīng)用邏輯服務(wù)器。 客戶與用戶的交互 應(yīng)用邏輯服務(wù)器復(fù)雜處理,,3、減輕客戶端的開發(fā),統(tǒng)一客戶端應(yīng)用,引入瀏覽器和WWW服務(wù)器,,,2、客戶/服務(wù)器的結(jié)構(gòu),1)系統(tǒng)組成 客戶:根據(jù)需要向服務(wù)器發(fā)出請求,得到結(jié)果后將信息顯示給用戶 服務(wù)器:等待接收客戶的請求,向客戶提供服務(wù),2、客戶/服務(wù)器的結(jié)構(gòu),2)兩組件之間的關(guān)系 客戶:數(shù)量不定,請求的時間不定 服務(wù)器:首先啟動,隨時提供服務(wù)。 服
33、務(wù)器需要公開自己能夠提供的服務(wù)接口,便于客戶端根據(jù)服務(wù)接口來請求。接口。,2、客戶/服務(wù)器的結(jié)構(gòu),3)客戶/服務(wù)器的連接 分成兩種: 兩個程序在同一臺機(jī)器:信號、消息、共享存儲區(qū)、網(wǎng)絡(luò)連接 兩個程序在不同的機(jī)器:網(wǎng)絡(luò)連接,2、客戶/服務(wù)器的結(jié)構(gòu),網(wǎng)絡(luò)連接 進(jìn)程標(biāo)識:操作系統(tǒng)使用的進(jìn)程號,但不能用在網(wǎng)絡(luò)上。端口號 在網(wǎng)絡(luò)上需要還標(biāo)識機(jī)器:IP地址 半相關(guān)(三元組)、全相關(guān)(五元組) 如何在程序中調(diào)用網(wǎng)絡(luò)功能呢?,直接處理每一位?如何和對方連接? 如何處理差錯? 如何解決流量等問題? 這些工作不可能我們來一一解決。 需要借助于操作系統(tǒng)提供的系統(tǒng)服務(wù)。 Socket API(網(wǎng)絡(luò)套接字):可以把So
34、cket簡單想像成一個文件,,,3、客戶/服務(wù)器的連接,1)連接的要求 (1)雙方的交互必須通過定義好的接口來實(shí)現(xiàn) (2)雙方交互的信息必須滿足規(guī)定的語法形式:協(xié)議 (3)信息傳送的方向:客戶到服務(wù)器是請求信息,從服務(wù)器到客戶為返回結(jié)果和狀態(tài)信息 (4)傳送的信息可能需要打包、解包、加密等處理,3、客戶/服務(wù)器的連接,2)連接的檢測:服務(wù)器 不可取的方式:循環(huán)檢測 常用的方式:中斷的方式 服務(wù)器的守護(hù)進(jìn)程首先啟動,處于等待狀態(tài); 有客戶請求到達(dá)會立即響應(yīng), 然后又回到等待狀態(tài)準(zhǔn)備接受下一個請求。,,3)連接方式:信號、消息、共享存儲區(qū)、網(wǎng)絡(luò)連接 4)連接的協(xié)議 調(diào)用的名稱、參數(shù)的個數(shù)、順序、類
35、型,執(zhí)行的方式、返回值的類型等。,4、服務(wù)器的調(diào)度,挑戰(zhàn):服務(wù)器需要時刻準(zhǔn)備著,處理來自不同客戶的請求,而且要同時接受和處理多個不同的請求。 如何解決?,,(1)進(jìn)程調(diào)度,主進(jìn)程,從進(jìn)程,從進(jìn)程,從進(jìn)程,,,,,客戶,客戶,,客戶,,,(2)線程調(diào)度,主進(jìn)程,從線程,從線程,從線程,,,,,客戶,客戶,,客戶,,,(3)線程池調(diào)度,5、客戶/服務(wù)器的變體,前述的客戶/服務(wù)器結(jié)構(gòu)中, 客戶和服務(wù)器是強(qiáng)耦合的:客戶需要知道服務(wù)器的準(zhǔn)確位置。 帶來的問題: 1)當(dāng)服務(wù)器改變位置時,客戶程序不再能夠訪問服務(wù)器。 2)當(dāng)有多個服務(wù)器時,無法給客戶提供更優(yōu)的服務(wù)。負(fù)載平衡,,變體:客戶/分配器/服務(wù)器,,
36、,客戶/服務(wù)器模式作業(yè),1、線程相對于進(jìn)程來說,執(zhí)行效率高于進(jìn)程,同時節(jié)省了資源。請問Java中對于線程提供了哪些輔助類? 2、原示例程序中服務(wù)器(Server)的調(diào)度采用的是線程調(diào)度方式(p71),請將其修改為線程池的調(diào)度方式。給出Server類的新源代碼。,第七節(jié) COM/DCOM/COM+結(jié)構(gòu),潘愛民譯COM本質(zhì)論 北京大學(xué)計算機(jī)技術(shù)研究所 教學(xué)資料 com組件技術(shù) ,,,軟件環(huán)境的變化,單任務(wù),,多任務(wù),文字界面,,圖形界面,單線程,,多線程,平臺相關(guān),,跨平臺,單機(jī)(本地),,網(wǎng)絡(luò)(分布式),單一語言,,多種語言,1、概述,如何在IE中打開word文件、Excel文件;如何在CAD中
37、插入圖片;如何在PPT文件中編輯公式和音頻? OLE(Object Linking and Embedding)多種資源和復(fù)合文檔,,應(yīng)用程序之間需要交互和組合功能。 例:數(shù)據(jù)庫服務(wù)器、網(wǎng)頁服務(wù)器IIS 問題:文檔編輯服務(wù)器、電子表格服務(wù)器、聲音處理服務(wù)器、公式服務(wù)器? 怎么辦? 能否利用 Word、Excel、Media player、公式編輯器?,COM,Word、Excel、公式編輯器等等程序需要采用標(biāo)準(zhǔn)的方式來提供。 COM組件對象模型,1993年發(fā)布 是一種基于面向?qū)ο蟾拍畹慕M件之間互聯(lián)和通信的二進(jìn)制代碼模型。 是一種支持可組裝的可執(zhí)行代碼的結(jié)構(gòu)標(biāo)準(zhǔn)。 按照COM標(biāo)準(zhǔn)建立的可執(zhí)行組件
38、均具有標(biāo)準(zhǔn)的接口,通過這些接口實(shí)現(xiàn)組件間透明的連接和互操作。,,計算機(jī)網(wǎng)絡(luò)的發(fā)展 分布式系統(tǒng)的發(fā)展 軟件系統(tǒng)從集中式(單機(jī))向分布和協(xié)作式發(fā)展。 組件分布在多臺機(jī)器上,通過網(wǎng)絡(luò)實(shí)行透明的通信和互操作。,DCOM,DCOM分布式組件對象模型 是COM在網(wǎng)絡(luò)環(huán)境下的擴(kuò)展。 COMLPC(本地過程調(diào)用) DCOMRPC(遠(yuǎn)程過程調(diào)用),COM,COM+是一種依賴于松散耦合LCE的消息機(jī)制 COM/DCOM依賴于緊耦合TCE,小結(jié): COM組件技術(shù)是一種基于本地過程調(diào)用LPC、遠(yuǎn)程過程調(diào)用RPC和標(biāo)準(zhǔn)操作接口的系統(tǒng)互聯(lián)的工業(yè)標(biāo)準(zhǔn)。 并且成為在因特網(wǎng)上實(shí)現(xiàn)多層體系結(jié)構(gòu)的支持技術(shù)。,新發(fā)展,J2EE平臺
39、.NET框架,2、COM組件結(jié)構(gòu)(靜態(tài)),面向?qū)ο竽P徒M件對象模型 相同點(diǎn): 組件內(nèi)部數(shù)據(jù)成員(狀態(tài))操作方法 組件必須通過將類實(shí)例化后才能運(yùn)行。 DLL:組件實(shí)例 EXE:實(shí)例代理,不同點(diǎn): COM組件的調(diào)用是通過接口實(shí)現(xiàn)的。 接口:提供給外界的函數(shù)的集合。(公安局) 一個組件角色多個,可以定義多個接口(不提倡一個組件一個總接口,接口隔離原則) COM組件的運(yùn)行功能和一般對象不同。 COM組件是一個獨(dú)立運(yùn)行的操作系統(tǒng)任務(wù)或進(jìn)程。 比如word.exe:文檔編輯應(yīng)用文檔操作服務(wù),COM中的組成,COM整體為一個客戶/服務(wù)器結(jié)構(gòu)。 服務(wù)器:COM組件,專門為用戶提供邏輯操作服務(wù)的(類似數(shù)據(jù)庫服務(wù)
40、器)。 服務(wù)器應(yīng)該提供 多線程:多個用戶同時請求 異步操作請求:不需用戶長時間等待,,客戶: 調(diào)用接口函數(shù) 調(diào)用方式:同步調(diào)用和異步調(diào)用,客戶,組件,,,,,,解決程序之間的通信問題組件基本問題,3、接口,客戶和組件是通過接口交互的:要求跨語言、跨編譯器、跨平臺 1、接口采用何種語言定義? C、C++、Java等? 語言無關(guān)的:IDL! 示例: Interface IAlarmer HRESULT initialize(); HRESULT Connect(in string,instring); HRESULT Disconnect(instring); HRESULT UpdateMsg(
41、instring); HRESULT DeleteMSG(instring); ,,對此種接口,C++、VB、Java怎么使用呢? 需要把IDL描述的接口轉(zhuǎn)換到具體的語言形式 C++中的MIDL Java中的IDLJ,,2、工作模式,,3、默認(rèn)接口:IUnKnown接口 Interface IUnKnown HRESULT QueryInterface(in REFIID iid,outvoid **ppv); ULONG AddRef(void); ULONG Release(void); ,,4、COM組件生存期 引用計數(shù) AddRef() Release() 注意:在整個生存期內(nèi),Add
42、Ref與Release一定要配對,否則: 漏掉AddRef,程序出錯 漏掉Release,對象永不釋放,,5、COM組件接口查詢及其設(shè)計原則 HRESULT QueryInterface(in REFIID iid,outvoid **ppv); COM接口的標(biāo)識IID,是一個128位的長整數(shù),,接口查詢中: 默認(rèn)接口是唯一的; 接口自反性 接口對稱性 接口傳遞性,,COM中IUnknown接口解決了兩個重要的問題 動態(tài)接口發(fā)現(xiàn),允許對象支持多個接口、允許在運(yùn)行時刻確定對象是否支持某些接口 生命周期管理,,COM接口 IID:128位整數(shù) 接口定義語言COM IDL 對應(yīng)于C++中由純虛函數(shù)組
43、成的類 單繼承,基接口:IUnknown,,6、接口的特性 接口的二進(jìn)制特性 接口不變性:接口是對外界的承諾 接口的動態(tài)多變性:接口的實(shí)現(xiàn)可以變化,4、COM組件的不同類型,1、進(jìn)程內(nèi)組件 客戶和啟動的組件在客戶的同一進(jìn)程中運(yùn)行。 Windows中,DLL(動態(tài)鏈接庫) 本地啟動:進(jìn)程內(nèi)組件 外地啟動:組件代理,,,,2、進(jìn)程外組件 COM組件被啟動后,在自身獨(dú)立的進(jìn)程中運(yùn)行 兩種形式: 可執(zhí)行程序的EXE形式,不管本地外地,均為進(jìn)程外 DLL形式,遠(yuǎn)程啟動時為進(jìn)程外,,,,DLL和EXE兩種代碼形式是在編譯時確定的。 區(qū)別: EXE可執(zhí)行程序式的組件:無論激活方式,只對應(yīng)同一個組件 DLL動
44、態(tài)鏈接庫:每一個應(yīng)用將擁有不同的組件個體 DLL運(yùn)行效率高于EXE:進(jìn)程間通信 EXE穩(wěn)定性高于DLL:獨(dú)立進(jìn)程,5、COM組件的運(yùn)行,1、注冊 應(yīng)用程序如何找到組件呢? 注冊機(jī)構(gòu):唯一、確定的。如注冊表,TreeView組件的注冊信息,,,,2、COM庫 系統(tǒng)級的核心代碼支持 COM庫:提供組件創(chuàng)建和組件操作的API函數(shù),通過注冊表查找組件代碼,實(shí)現(xiàn)組件名與組件代碼的全路徑文件名的轉(zhuǎn)換,以及為組件運(yùn)行 提供組件之間通信的LPC和RPC代碼。,對象的創(chuàng)建過程,COM對象創(chuàng)建過程,,,,3、COM組件代碼的重用 二進(jìn)制的重用:不同于代碼的重用 兩種: 包容:接口的轉(zhuǎn)換 聚合:接口的查詢,,,,,
45、6、COM組件的變體和擴(kuò)展,1、連接點(diǎn)組件:雙向COM,,,,,2、DCOM 表面上看,單機(jī)到網(wǎng)絡(luò),LPC到RPC即可 實(shí)際,安全、可靠性、性能等問題需要考慮:調(diào)用阻塞、中斷、信息丟失、異步調(diào)用、異常處理 例:檢測客戶是否正常,ping周期,,,,3、COM組件 COM/DCOM為LPC和RPC過程調(diào)用 緊耦合消息 COM:松耦合消息,,,COM+是什么?,面向企業(yè)應(yīng)用 提供了企業(yè)應(yīng)用所需要的通用基礎(chǔ)設(shè)施 設(shè)計企業(yè)應(yīng)用要求有思想上的根本變化 COM+對COM的增強(qiáng)和改進(jìn) 增強(qiáng)了COM runtime library 增強(qiáng)了MTS(Microsoft Transaction Server) 事務(wù)
46、服務(wù)、安全服務(wù) 提供了新的runtime服務(wù) 隊(duì)列服務(wù)、事件服務(wù)、負(fù)載平衡、(內(nèi)存數(shù)據(jù)庫) COM+兼容COM,只是提供了更多的功能,,COM+:interception技術(shù),機(jī)器、進(jìn)程或者套間邊界,,RPC通道,,,Stub,COM之前的應(yīng)用,,,,,,,,,,在COM之前, 應(yīng)用程序是完全分開的實(shí)體,它們之間只有很少或沒有任何集成關(guān)系,應(yīng)用,代碼和數(shù)據(jù)結(jié)構(gòu),小結(jié),,,,,,,,,,COM組件模型,,,,,,,,,,,,,COM提供了組件集成的方法. 但是, 每個組件必須提供細(xì)節(jié)復(fù)雜的通訊接口,對象不能直接交互,,,,COM的優(yōu)缺點(diǎn),COM的優(yōu)點(diǎn): 在構(gòu)建組件軟件方面,COM優(yōu)于簡單的DLL
47、模型 許多公司都使用COM構(gòu)建了他們自己的核心系統(tǒng)。如:N的后端使用COM COM成功的關(guān)鍵之一:強(qiáng)調(diào)接口,COM的缺點(diǎn): COM DLLs的名字和配置信息都進(jìn)入注冊表,將導(dǎo)致注冊表過重的負(fù)擔(dān) 因?yàn)镃OM使用注冊表(每個使用者都可以看到),所以不可能隔離私有的組件 注冊表為應(yīng)用程序的安裝和卸載過程增加了復(fù)雜性 接口一旦發(fā)布決不能變化,發(fā)布后變化接口將破壞可靠性和可預(yù)測性??蛻羰褂媒涌诒仨氉裱瓏?yán)格的規(guī)則 COM組件的數(shù)據(jù)類型一致性問題:使用各自的類型系統(tǒng),比如VB組件使用VARIANT類型,,走向.NET,,,,,,,,,,,使用 .NET Framework的公共語言運(yùn)行時(CLR), 所有的
48、組件都建立在一個共同的底層基礎(chǔ)上。不再需要通訊的繁瑣細(xì)節(jié),對象可以直接交互,,,,Microsoft .NET,把系統(tǒng)平臺從Windows桌面轉(zhuǎn)移到Internet上來 Internet作為.NET的平臺 Web Services 新觀念:軟件作為服務(wù) 核心技術(shù) XML:把各種數(shù)據(jù)和服務(wù)連接起來 Web Service .NET Framework,第八節(jié) 代理者(Broker),1、概述,公共信息系統(tǒng)網(wǎng)絡(luò) 訂票服務(wù) 賓館預(yù)定 導(dǎo)游服務(wù)等等,,公共信息不斷增加、不斷擴(kuò)展和更新的。要求: 系統(tǒng)不斷改變和增長 每個服務(wù)之間互相隔離,以減少變動的影響。 客戶端不必知道服務(wù)器端的具體地址而獲得服務(wù)。,
49、,解決方法:代理者(Broker) 用于構(gòu)建中間有隔離組件的分布式系統(tǒng)。,2、問題分析與方案,構(gòu)建復(fù)雜的分布式的軟件系統(tǒng),遇到的問題: 系統(tǒng)功能需要分割系統(tǒng)是由獨(dú)立但相互之間可以互相操作的組件組合 分布式組件需要相互通信時,需要組件間的通信手段 組件的添加、移動、激活、定位客戶不應(yīng)該過多地依賴系統(tǒng)的各種具體細(xì)節(jié),解決問題: 地址透明 在運(yùn)行期間更換、添加或移動各組件(開閉原則) 系統(tǒng)對用戶隱藏特定系統(tǒng)和特定實(shí)現(xiàn)的細(xì)節(jié) 解決方案代理者,客戶,代理者,服務(wù)器,,,2、問題分析與方案,提供代理者之后的結(jié)果 地址透明,客戶開發(fā)簡單 消息調(diào)用(不必把重點(diǎn)放在低級的進(jìn)程間通信) 體系結(jié)構(gòu)靈活,很容易做到對
50、組件動態(tài)改變、添加、刪除和重定位,靜態(tài)結(jié)構(gòu),六種成分: 客戶、 服務(wù)器、 代理者、 客戶端代理、 服務(wù)器代理、 橋接(網(wǎng)橋),服務(wù)器 功能:實(shí)現(xiàn)多種服務(wù),一個或多個對象 服務(wù)的展示:接口 例子:WWW服務(wù)器,,客戶程序: 請求服務(wù)的程序 發(fā)送給代理者,由代理者轉(zhuǎn)發(fā),,代理者:中介者 客戶到服務(wù)器的請求 服務(wù)器返回給客戶的應(yīng)答或狀態(tài)信息 為服務(wù)器提供服務(wù)注冊 負(fù)責(zé)激活服務(wù)器 定位服務(wù)器 例子:信息系統(tǒng)URL,,基本組成部分,,客戶端代理:客戶代理者之間,附加層 效果:對客戶隱藏了代理者,客戶好像使用本地服務(wù)一樣 例如:隱藏了 客戶和代理者之間的進(jìn)程通信機(jī)制、參數(shù)和結(jié)果的列集等等,,服務(wù)器端代理:
51、代理者和服務(wù)器之間 功能:負(fù)責(zé)接收請求,解析收到的消息,散集參數(shù),調(diào)用適當(dāng)?shù)姆?wù)。 返回的信息,進(jìn)行數(shù)據(jù)的列集傳送給客戶,,,橋接(網(wǎng)橋): 功能:代理者運(yùn)行在異構(gòu)系統(tǒng)上,采用橋接來隱藏兩個代理者互相操作時的實(shí)現(xiàn)細(xì)節(jié)。,,,,,,直接通信,通信方式,客戶,代理者,服務(wù)器,,,,間接通信,通信方式,客戶,代理者,服務(wù)器,,,客戶,分配器,服務(wù)器,,,,動態(tài)特性,客戶,代理者,服務(wù)器,,,客戶端代理,服務(wù)端代理,,,,,,客戶,代理者,服務(wù)器,,,客戶端代理,服務(wù)端代理,,,代理者,網(wǎng)橋,,,,,5、設(shè)計與實(shí)現(xiàn),1、對象模型 2、組件互操作性 IDL接口定義語言 3、代理者與客戶和服務(wù)器的API函
52、數(shù) 客戶側(cè):構(gòu)建客戶請求、請求發(fā)送、接受回應(yīng) 服務(wù)器側(cè):代理者注冊,客戶,代理者,服務(wù)器,,,4、客戶和服務(wù)器代理對象 客戶端代理 服務(wù)器代理,客戶,代理者,服務(wù)器,,,客戶端代理,服務(wù)端代理,,,,5、設(shè)計代理者組件 客戶與服務(wù)器之間傳遞消息的信使 功能:1)請求發(fā)送、狀態(tài)返回 2)兩端代理未提供參數(shù)的列集和散集代理提供 3)客戶服務(wù)器的異步通信消息緩沖區(qū) 4)目錄服務(wù) 5)名字服務(wù) 6)動態(tài)方法調(diào)用 7)系統(tǒng)失效的處理,6、開發(fā)IDL編譯器,,6、變體與擴(kuò)展,1、直接通信 2、消息傳遞:以數(shù)據(jù)傳輸為重點(diǎn) 3、交易器代理者系統(tǒng) 客戶請求目標(biāo)為服務(wù),而非服務(wù)器 4、適配器代理者系統(tǒng) 5、回調(diào)代理者系統(tǒng) 消費(fèi)者產(chǎn)生需求,7、代理者結(jié)構(gòu)的應(yīng)用,城市信息系統(tǒng)賓館預(yù)定系統(tǒng) 萬維網(wǎng) COBRA公共對象請求代理體系結(jié)構(gòu) OLE對象連接與嵌入,8、代理者結(jié)構(gòu)的優(yōu)缺點(diǎn),優(yōu)點(diǎn): 定位的透明性:唯一的標(biāo)識符定位服務(wù)器 組件的可變更和可擴(kuò)展性 系統(tǒng)的移植性 不同代理者系統(tǒng)間的互操作性 可重用性,缺點(diǎn): 效率較低:中間層,引入靈活性、可移植性、可變更性,而降低了效率 容錯性較差 測試和調(diào)試較困難。,,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。