《軟件工程與開發(fā)技術(shù)(西電第二版)第13章構(gòu)件模型和部署模型》由會(huì)員分享,可在線閱讀,更多相關(guān)《軟件工程與開發(fā)技術(shù)(西電第二版)第13章構(gòu)件模型和部署模型(16頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第13章 構(gòu)件模型和部署模型,,13.1 代碼實(shí)現(xiàn)與構(gòu)件模型 13.2 部署圖(deploy diagram) 13.3 小結(jié),13.1 代碼實(shí)現(xiàn)與構(gòu)件模型 13.1.1 概述 系統(tǒng)模型的大部分內(nèi)容反映了系統(tǒng)的邏輯和物理設(shè)計(jì)方面的信息,并且獨(dú)立于系統(tǒng)的最終實(shí)現(xiàn)單元。然而,為了可重用性和可操作性的目的,系統(tǒng)實(shí)現(xiàn)方面的信息也很重要。 UML使用兩種視圖來表示實(shí)現(xiàn)單元:構(gòu)件視圖和部署視圖。 構(gòu)件視圖將系統(tǒng)中可重用的代碼塊包裝成具有可替代性的物理單元,這些單元被稱為構(gòu)件。構(gòu)件視圖也稱為實(shí)現(xiàn)視圖。構(gòu)件視圖用構(gòu)件及構(gòu)件間的接口和依賴關(guān)系來表示設(shè)計(jì)元素(例如類)的具體實(shí)現(xiàn)。構(gòu)件是系統(tǒng)高層的可重用的組成部件。
2、圖13.1表達(dá)了構(gòu)件和接口之間的實(shí)現(xiàn)關(guān)系。,圖13.1 構(gòu)件與接口之間的實(shí)現(xiàn)關(guān)系,構(gòu)件是定義了良好接口的物理實(shí)現(xiàn)單元,它是系統(tǒng)中可替換的部分。每個(gè)構(gòu)件體現(xiàn)了系統(tǒng)設(shè)計(jì)中特定類的實(shí)現(xiàn)。良好定義的構(gòu)件不直接依賴于其他構(gòu)件而依賴于構(gòu)件所支持的接口。在這種情況下,系統(tǒng)中的一個(gè)構(gòu)件可以被支持正確接口的其他構(gòu)件所替代。 構(gòu)件具有它們支持的接口和需要從其他構(gòu)件得到的接口。接口是被軟件或硬件所支持的一個(gè)操作集。通過使用命名的接口,可以避免在系統(tǒng)中各個(gè)構(gòu)件之間直接發(fā)生依賴關(guān)系,有利于新構(gòu)件的替換。構(gòu)件視圖展示了構(gòu)件間相互依賴的網(wǎng)絡(luò)結(jié)構(gòu)。構(gòu)件視圖可以表示成兩種形式,一種是含有依賴關(guān)系的可用構(gòu)件(構(gòu)件庫)的集合,它是
3、構(gòu)造系統(tǒng)的物理組織單元。另一種表示為一個(gè)配置好的系統(tǒng),用來建造它的構(gòu)件已被選出。在這種形式中,每個(gè)構(gòu)件與給它提供服務(wù)的其他構(gòu)件連接,這些連接必須與構(gòu)件的接口要求相符合。構(gòu)件用一邊有兩個(gè)小矩形的一個(gè)長方形表示,它可以用實(shí)線與代表構(gòu)件接口的圓圈相連,如圖13.2所示。,13.1.2 構(gòu)件(Component)和構(gòu)件圖(Component Diagram)在UML中,構(gòu)件代表一個(gè)具有良好定義接口的軟件模塊,包括源代碼、二進(jìn)制代碼、可執(zhí)行代碼、動(dòng)態(tài)鏈接庫等。構(gòu)件的接口由其所提供的一個(gè)或多個(gè)接口元素表示。構(gòu)件之間的關(guān)系用來表示軟件模塊之間的編譯、運(yùn)行、調(diào)用、接口的依賴關(guān)系,也可以表達(dá)構(gòu)件和類之間的實(shí)現(xiàn)關(guān)
4、系,在Rational Rose中是通過在類和構(gòu)件之間建立指派(Assigned)關(guān)系實(shí)現(xiàn)的。,,圖13.2 帶接口的構(gòu)件,構(gòu)件圖表示了構(gòu)件之間的依賴關(guān)系,如圖13.3所示。每個(gè)構(gòu)件實(shí)現(xiàn)(支持)一些接口,并使用另一些接口。如果構(gòu)件間的依賴關(guān)系與接口有關(guān),那么構(gòu)件可以被具有同樣接口的其他構(gòu)件替代。,,圖13.3 構(gòu)件圖,一個(gè)系統(tǒng)可能由多種軟件模塊組成,如可執(zhí)行文件(exe)、動(dòng)態(tài)鏈接庫文件(dll)、圖片文件、網(wǎng)頁文件、文本文件等。每種軟件模塊由模型中的一個(gè)組件代表。為區(qū)別不同種類的構(gòu)件,可以使用版型(Stereotype)機(jī)制,如圖13.4所示。,,圖13.4 用版型表示不同種類的構(gòu)件,13.
5、1.3 構(gòu)件(Component)圖的作用構(gòu)件模型在軟件開發(fā)過程中的實(shí)現(xiàn)階段創(chuàng)建,是最終軟件產(chǎn)品的物理模型或者叫做物理構(gòu)件,直接對(duì)應(yīng)最終的各種程序和數(shù)據(jù)文件。構(gòu)件模型是軟件系統(tǒng)最終發(fā)布和部署的基礎(chǔ)。在某些語言中,程序的邏輯構(gòu)件,例如類和構(gòu)件之間的對(duì)應(yīng)關(guān)系是比較復(fù)雜的,有可能是多對(duì)多的關(guān)系,例如C++中,一個(gè)類的完整定義應(yīng)該放在兩個(gè)文件中,接口定義(.h)和實(shí)現(xiàn)文件(.cpp)中,即一個(gè)類可能會(huì)對(duì)應(yīng)多個(gè)實(shí)現(xiàn)文件,而一個(gè)源代碼文件中也可以定義多個(gè)類,這說明類和構(gòu)件之間是多對(duì)多的關(guān)系。另一些語言中,這種對(duì)應(yīng)關(guān)系比較簡單,例如,Java中的一個(gè)類只能對(duì)應(yīng)一個(gè)類構(gòu)件(.class)文件,反之亦然,是一對(duì)
6、一的關(guān)系;類和源程序之間的對(duì)應(yīng)關(guān)系是多對(duì)一的關(guān)系。,,在類與構(gòu)件之間是多對(duì)多關(guān)系時(shí),從類跟蹤到構(gòu)件或者從構(gòu)件跟蹤到類是比較繁瑣的事情,這可以通過構(gòu)件模型很容易地達(dá)到此目的。在某些建模工具,例如Rational Rose中,選擇類或者構(gòu)件,通過建立類和構(gòu)件的指派關(guān)系,可以很方便地顯示出其對(duì)應(yīng)的構(gòu)件或者類列表,為軟件開發(fā)過程中的產(chǎn)品可跟蹤性奠定基礎(chǔ)。另外,構(gòu)件模型也是建立產(chǎn)品基線和發(fā)布以及產(chǎn)品生產(chǎn)線的基礎(chǔ)。,,,13.2 部署圖(Deploy Diagram),圖13.5 B/S三層模型系統(tǒng)的部署模型,部署是將開發(fā)出的軟件產(chǎn)品安裝在運(yùn)行環(huán)境中,使之正確運(yùn)行的軟件開發(fā)活動(dòng)。目前的運(yùn)行環(huán)境多為基于網(wǎng)絡(luò)
7、的分布式環(huán)境,部署過程較為復(fù)雜,因此部署過程也需要建模。將開發(fā)出的物理構(gòu)件和處理器結(jié)點(diǎn)對(duì)應(yīng)起來,以利于正確的部署和運(yùn)行。部署圖表示了構(gòu)件和處理器物理結(jié)點(diǎn)之間的這種對(duì)應(yīng)關(guān)系。在UML中,部署圖表示了處理器、設(shè)備及其連接關(guān)系,也可以表示軟件構(gòu)件和處理器之間的關(guān)系。每個(gè)系統(tǒng)模型中只包含一個(gè)部署圖,表示該系統(tǒng)中處理器、設(shè)備之間的連接以及進(jìn)程對(duì)處理器的分配。,,部署視圖表示運(yùn)行時(shí)的計(jì)算資源(如處理器及它們之間的連接)的物理布置拓?fù)浣Y(jié)構(gòu),這些運(yùn)行資源被稱作計(jì)算節(jié)點(diǎn)。在運(yùn)行時(shí),節(jié)點(diǎn)包含構(gòu)件和對(duì)象的動(dòng)態(tài)映射進(jìn)程和線程。構(gòu)件和對(duì)象在計(jì)算節(jié)點(diǎn)上的分配可以是靜態(tài)的,它們也可以在節(jié)點(diǎn)間遷移。如果含有依賴關(guān)系的構(gòu)件實(shí)例放置在不同節(jié)點(diǎn)上,則部署視圖可以展示出執(zhí)行過程中的瓶頸。圖13.5是一個(gè)基于B/S模式的三層模型。,,,13.3 小 結(jié)在UML中,構(gòu)件代表源程序文件或者二進(jìn)制文件,是軟件開發(fā)的最終產(chǎn)品。從軟件產(chǎn)品的最初需求到系統(tǒng)的概念模型,從系統(tǒng)的邏輯模型到最終的物理文件,構(gòu)成了軟件系統(tǒng)完整的開發(fā)生命周期。一般來說,生命周期的開始與問題或者業(yè)務(wù)領(lǐng)域比較接近,后期則和計(jì)算機(jī)系統(tǒng)更為接近。這種從問題域到程序域的映射過程中,可跟蹤性顯得非常重要,因?yàn)樽罱K的解決方案可能和最初的問題形式相距甚遠(yuǎn),構(gòu)件模型則給出了從邏輯模型到物理模型的跟蹤性,也給出了軟件構(gòu)件之間的依賴性,是軟件測試、發(fā)布和維護(hù)的基礎(chǔ)。,,,