軟件建模技術(shù)4_第1頁
軟件建模技術(shù)4_第2頁
軟件建模技術(shù)4_第3頁
軟件建模技術(shù)4_第4頁
軟件建模技術(shù)4_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

包圖5.1

概述5.2包間關(guān)系5.3設(shè)計(jì)包的原則第5章●包圖(PackageDiagram)●包圖(PackageDiagram)也是一種結(jié)構(gòu)型UML圖,它用于顯示包與包之間的依賴關(guān)系,可以放入包圖中的元素和關(guān)系有:包(package)、所有可打包元素(packageableelement)、依賴(dependency)、元素導(dǎo)入(elementimport)、包導(dǎo)入(packageimport)、包合并(packagemerge)?!褚粋€(gè)包表示一個(gè)命名空間,用于將語義相關(guān)的元素組織在一起。包可以包含其它的包,以及其它的可打包元素,如:類、用例、組件等。5.1

概述5.1

概述javautilDatejava::utilDatejava::util::Date5.1

概述●包圖其他嵌套表示可見性含義前綴符號(hào)公有的Public此元素可以被任何引用該包的包中的元素訪問。+受保護(hù)的Protected此元素可被繼承該包的包中的元素訪問。#私有的private此元素只能被同一個(gè)包中的元素訪問。-5.1

概述●包的可見性包內(nèi)元素的可見性控制了包外部元素訪問包內(nèi)部元素的權(quán)限。●元素導(dǎo)入關(guān)系:元素導(dǎo)入關(guān)系是一種有向關(guān)系,用帶開放箭頭的虛線表示。它從一個(gè)要導(dǎo)入元素的包指向一個(gè)要被導(dǎo)入的具體元素,如所示。如果被導(dǎo)入的元素在命名空間中的可見性為public,則在關(guān)系中用關(guān)鍵字“?import?”來說明,如果它的可見性是private的則用關(guān)鍵字“?access?”來表示。元素導(dǎo)入的含義為將某些元素引入到新的命名空間中作為其成員,但和包中自身所擁有的元素相比,被導(dǎo)入的元素只是一種引用,也就是說如果要對這些導(dǎo)入的元素作修改的話,只能在它們的源包中進(jìn)行修改。5.2

包間關(guān)系●包導(dǎo)入關(guān)系:包導(dǎo)入關(guān)系的表示法與元素導(dǎo)入關(guān)系類似,不同的是它指向的是一個(gè)要被導(dǎo)入包。包導(dǎo)入的含義是:一旦某個(gè)包某導(dǎo)入到新的命名空間后,那么這個(gè)包中的元素就可以被該命名空間中的元素直接訪問,而不再需要通過限定名的方式來訪問它們。5.2

包間關(guān)系usersUsersecurity+Credentials+IdentityVerifier-MD5Crypt《access》5.2

包間關(guān)系該例中,users被稱為源包(SourcePackage),security被稱為目標(biāo)包(TargetPackage)這個(gè)例子表示包users要用到包security中的元素由于可見性的原因,users中的元素User只能使用security中的元素Credentials和IdentityVerifier,而不能使用MD5Crypt5.2

包間關(guān)系userssecurity+Credentials+IdentityVerifier-MD5Crypt《import》User這個(gè)例子表示包users中的元素可以訪問包security中的元素Credentials和IdentityVerifier包的access關(guān)系和import關(guān)系的區(qū)別:如果包users被導(dǎo)入到另一個(gè)包Z中,如果users和security是access的關(guān)系,則Z中的元素是看不到包security中的元素Credentials和IdentityVerifier的,即包security中的元素Credentials和IdentityVerifier對包Z中的元素來說,其可見性是private如果包users和包security是import的關(guān)系,那么,包Z中的元素是可以見到包security中的元素Credentials和IdentityVerifier的,也就是說,包security中的元素Credentials和IdentityVerifier對包Z中的元素來說,其可見性是public5.2

包間關(guān)系●包合并關(guān)系:包合并關(guān)系是一種包與包之間的有向關(guān)系,用帶開放箭頭的虛線表示,它從源包指向目標(biāo)包,再加上一個(gè)關(guān)鍵字“?merge?”,用于表示目標(biāo)包中的內(nèi)容被源包中的內(nèi)容擴(kuò)展。它類似于類圖中的泛化關(guān)系,從概念上表示源元素將目標(biāo)元素的特性添加到自己身上,從而得到一個(gè)由兩組特性組合之后的新元素。5.2

包間關(guān)系包的合并關(guān)系有一些規(guī)則:包中的私有成員能被任何其他包合并如果合并的包中的類與被合并包中的類重名或具有相同的類型,那么在合并后的包中將存在一個(gè)泛化關(guān)系來建模合并的包與被合并包中的這些類也可以仍然使用被合并包的名字加類名的方式引用被合并包中的類合并包和被合并包中的類都會(huì)保持原樣不變的被添加到合并包中即使被合并包還不存在子包,子包也將被添加到合并包中如果被合并的包中有一個(gè)子包與合并包中的子包同名,那么這兩個(gè)子包之間還會(huì)合并一次任何與被合并包具有導(dǎo)入關(guān)系的包都將作為合并包的導(dǎo)入包,與合并后的包建模為導(dǎo)入關(guān)系,就是說,不會(huì)產(chǎn)生規(guī)則(2)所說的泛化關(guān)系,被導(dǎo)入的元素不被合并。如果導(dǎo)入的元素與合并后的包中的元素有沖突,那么,導(dǎo)入包中的同名元素具有優(yōu)先權(quán),被導(dǎo)入的元素必須被重新命名5.2

包間關(guān)系在考慮如何對類進(jìn)行分組并放入不同的包時(shí),主要依據(jù)類之間的依賴關(guān)系進(jìn)行分組。包中的類應(yīng)該是功能相關(guān)的,在建包時(shí),應(yīng)把概念上和語義上相近的模型元素納入一個(gè)包。依賴關(guān)系其實(shí)是耦合的一種體現(xiàn),如果兩個(gè)包中的類之間存在依賴關(guān)系,那么這兩個(gè)包之間就有了依賴關(guān)系,也就存在耦合關(guān)系。好的設(shè)計(jì)要求體現(xiàn)高內(nèi)聚、低耦合的特性。5.2

設(shè)計(jì)包的原則重用等價(jià)原則

——把類放入包中時(shí),應(yīng)考慮把包作為可重用的單元。共同閉包原則

——把那些需要同時(shí)改變的類放在同一個(gè)包中。若一個(gè)類的行為或結(jié)構(gòu)的改變要求另一個(gè)類做相應(yīng)的改變;刪除了一個(gè)類后,另一個(gè)類成多余的;兩個(gè)類之間有大量的消息發(fā)送。共同重用原則

——把不會(huì)一起使用的類不要放在同一個(gè)包中。非循環(huán)依賴原則

——包之間的依賴關(guān)系不要形成循環(huán)。5.3

設(shè)計(jì)包的原則繪制包圖的基本步驟如下:①分析系統(tǒng)的模型元素(通常是對象類),把概念上或語義上相近的模型元素歸入同一個(gè)包。②對于每一個(gè)包,標(biāo)出其模型元素的可視性,確定包內(nèi)每個(gè)元素的訪問屬性,是公共、保護(hù)或私有。③確定包與包之間的依賴關(guān)系,特別是“引入”關(guān)系。④確定包與包之間的泛化關(guān)系。⑤繪制包圖。⑥對結(jié)果進(jìn)行精化和細(xì)化。5.3

設(shè)計(jì)包的原則組件圖和部署圖6.1

組件圖概述6.2組件圖的應(yīng)用6.3UML2.0中的相關(guān)變化6.4復(fù)合結(jié)構(gòu)6.5部署圖概述6.6部署圖的應(yīng)用6.7UML2.0中的相關(guān)變化6.8對象約束語言第6章為了構(gòu)造一個(gè)面向?qū)ο蟮能浖到y(tǒng)必須考慮系統(tǒng)的邏輯和物理兩個(gè)方面。邏輯方面需要發(fā)現(xiàn)和描述對象類、接口、協(xié)同、交互和狀態(tài)機(jī)等事物,物理方面需要找出組件和節(jié)點(diǎn)。

UML提供了兩種物理表示圖形:組件圖和部署圖。

組件圖表示系統(tǒng)中的不同物理組件及其關(guān)系,它表達(dá)的是系統(tǒng)代碼本身的結(jié)構(gòu)。部署圖由節(jié)點(diǎn)構(gòu)成,節(jié)點(diǎn)代表系統(tǒng)的硬件,組件在節(jié)點(diǎn)上駐留并執(zhí)行。部署圖表示系統(tǒng)的軟件組件與硬件之間的關(guān)系,它表達(dá)的是運(yùn)行系統(tǒng)的結(jié)構(gòu)。

組件圖和部署圖用于建立系統(tǒng)的實(shí)現(xiàn)模型。

對象約束語言(OCL)是用于表示對模型元素的約束的語言,是UML的重要組成部分。

件圖和部署圖第6章組件圖和部署圖6.1.1

組件6.1.2

組件的種類6.1.3

組件的關(guān)系第6章6.1組件圖概述組件(Component)是系統(tǒng)的物理的可替換的單位,它把系統(tǒng)的實(shí)現(xiàn)打包,并提供一組接口的實(shí)現(xiàn)(Realization)。

組件代表系統(tǒng)的一個(gè)物理實(shí)現(xiàn)塊,代表邏輯模型元素如類、接口、協(xié)同等的物理打包。組件本身遵從和提供一組接口的實(shí)現(xiàn),它們代表了由駐留在組件內(nèi)部的模型元素所實(shí)現(xiàn)的服務(wù)。組件用于對系統(tǒng)配置節(jié)點(diǎn)上的物理事物建立模型。

常見的組件有系統(tǒng)的配置組件,如COM+組件、JavaBeans等。組件也可以是軟件開發(fā)過程中的產(chǎn)物,如軟件代碼(源碼、二進(jìn)制碼和可執(zhí)行碼)等。

6.1.1

組件組件的圖標(biāo)是一個(gè)大矩形的左邊嵌二個(gè)小矩形。組件必須有名字。

簡單組件:只標(biāo)出組件名。在組件名之后或之下,可以用括在花括號(hào)中的文字(即標(biāo)記值)說明組件的性質(zhì),如“{version=2.0}”等。

擴(kuò)充組件:當(dāng)需要了解組件所包含的模型元素時(shí),則需要把每個(gè)模型元素的名字在組件的大矩形框里列出,這稱為擴(kuò)充的組件。

例:簡單組件與擴(kuò)充組件示例,如圖6.1所示。圖6.1簡單組件與擴(kuò)充組件示例

6.1.1

組件組件在很多方面與對象類相似,如都有名字,都有實(shí)例,都能實(shí)現(xiàn)接口,都存在著關(guān)系等。組件的實(shí)例代表運(yùn)行期間的可執(zhí)行軟件模塊。例如,圖6.1中的組件“mymailer:Mailer”就是組件“Mailer”的一個(gè)實(shí)例,它存在于運(yùn)行期間。組件的實(shí)例只用于部署圖中。

組件的性質(zhì)的表示法與類相同。組件所包含的模型元素的可視性同樣有“公共”、“保護(hù)”、“私用”等。

但是組件和類有實(shí)質(zhì)性的區(qū)別。組件代表物理事物,而類代表事物的邏輯抽象,因此組件可以用于部署圖的節(jié)點(diǎn)中,而類不能。一般組件只有操作,外界只能通過接口接觸它們,而類可以直接有屬性和操作。

6.1.1

組件組件是一組邏輯元素(如類、協(xié)同等)的物理實(shí)現(xiàn)。一個(gè)類可以由一個(gè)或多個(gè)組件實(shí)現(xiàn)。

組件和類的關(guān)系是一種依賴關(guān)系,組件擁有類,類不存在了,包含它的組件也就不存在了。通常,組件與類的依賴關(guān)系不必用圖形顯式表示,可以在說明文檔中予以說明。

例:圖6.2中的組件“Mailer”依賴于類“Mailbox”、“RoutingList”和“MailQueue”

。圖6.2組件與類的關(guān)系示例

6.1.1

組件組件提供接口的實(shí)現(xiàn),一個(gè)組件可以實(shí)現(xiàn)一個(gè)或多個(gè)接口。

例:在圖6.3中的組件“字典”實(shí)現(xiàn)兩個(gè)接口:“拼寫檢查”和“同義詞”。

圖6.3組件與接口示例

6.1.1

組件按照組件的作用可以把組件分為以下3種:

1.配置組件(DeploymentComponent)

配置組件是構(gòu)成一個(gè)可執(zhí)行的系統(tǒng)的必需的組件,如動(dòng)態(tài)連接庫(DLL)、執(zhí)行程序(EXE)等。

UML的組件可以表達(dá)典型的對象模型,如COM+、

CORBA、JAVABeans、Web頁、數(shù)據(jù)庫表等內(nèi)容。

2.工作產(chǎn)品組件(WorkProductComponent)

工作產(chǎn)品組件是在軟件開發(fā)階段使用的組件,它們包括源程序文件、數(shù)據(jù)文件等。

配置組件是根據(jù)工作產(chǎn)品組件建立的。

3.執(zhí)行組件(ExecutionComponent)

執(zhí)行組件是執(zhí)行系統(tǒng)的部件,如COM+的一個(gè)對象,它是一個(gè)動(dòng)態(tài)連接庫(DLL)的實(shí)例。

6.1.2

組件的種類UML的所有擴(kuò)展機(jī)制都可以用于組件。例如,可以在組件上加上標(biāo)記值描述組件的性質(zhì),使用構(gòu)造型規(guī)定組件的種類。

UML定義了以下5個(gè)用于組件的標(biāo)準(zhǔn)構(gòu)造型:

1.<<executable>>

構(gòu)造型<<executable>>說明一個(gè)組件可以在系統(tǒng)的節(jié)點(diǎn)上執(zhí)行。

2.<<library>>

構(gòu)造型<<library>>說明一個(gè)組件是一個(gè)靜態(tài)的或動(dòng)態(tài)的對象庫。

3.<<table>>

構(gòu)造型<<table>>說明一個(gè)組件代表的是一個(gè)數(shù)據(jù)庫表。

4.<<file>>

構(gòu)造型<<file>>說明一個(gè)組件代表的是一個(gè)文檔,它包含的是源代碼或數(shù)據(jù)。

5.<<document>>

構(gòu)造型<<document>>說明一個(gè)組件代表的是一個(gè)文檔。6.1.2

組件的種類組件之間可以有依賴關(guān)系。組件之間的依賴是指,一個(gè)組件的模型元素使用另一個(gè)組件的模型元素。

組件也可以通過接口實(shí)現(xiàn)依賴關(guān)系。

組件通過接口依賴的圖形表示方式有兩種,一種是簡單的表示法,另一種通過擴(kuò)充的接口來表達(dá),如圖6.4所示。

由一個(gè)組件實(shí)現(xiàn)的接口稱為輸出接口(ExportInterface),意指該接口是組件提供給其他組件的服務(wù)。一個(gè)組件可以提供多個(gè)輸出接口。為一個(gè)組件所使用的接口稱為輸入接口(ImportInterface),意指該組件遵從該接口,建立在該接口上。

一個(gè)組件可以遵從多個(gè)輸入接口。一個(gè)組件可以既有輸入接口,又有輸出接口。通過輸入接口和輸出接口所實(shí)現(xiàn)的組件之間的依賴稱為輸入依賴(ImportDependency)。

6.1.3

組件的關(guān)系例:組件的依賴接口示例,如圖6.4所示。

圖6.4組件的依賴接口示例

6.1.3

組件的關(guān)系根據(jù)組件的種類的不同,組件之間的依賴可以分為兩種:開發(fā)期間的依賴和調(diào)用依賴。

開發(fā)期間的依賴是指在編譯階段和連接階段的組件之間的依賴。例如,在圖6.5中,客戶組件依賴于供應(yīng)者組件。供應(yīng)者組件在開發(fā)期間存在,但并不需要在運(yùn)行期間存在。

圖6.5組件的開發(fā)期間的依賴

6.1.3

組件的關(guān)系調(diào)用依賴(CallDependency)是指一個(gè)組件調(diào)用或使用另一個(gè)組件的服務(wù),如圖6.6所示??蛻艚M件調(diào)用或使用供應(yīng)者組件的服務(wù),調(diào)用可以直接進(jìn)行,或通過接口進(jìn)行。供應(yīng)者組件的元素可以是組件的型或?qū)ο蟆?/p>

調(diào)用依賴可以發(fā)生在開發(fā)期間的組件的型之間,用組件圖表示;調(diào)用依賴也可以發(fā)生在運(yùn)行期間的組件的實(shí)例之間,可在部署圖中表示。

圖6.6組件的調(diào)用依賴

6.1.3

組件的關(guān)系組件圖由組件、接口和組件之間的關(guān)系構(gòu)成,其中的組件可以是源碼、二進(jìn)制碼或可執(zhí)行程序。

組件圖表示系統(tǒng)中的不同物理部件及其關(guān)系,它表達(dá)的是系統(tǒng)代碼本身的結(jié)構(gòu)。組件圖只有型(Type)的形式,沒有實(shí)例形式。為了顯示組件的實(shí)例需要使用部署圖。

組件圖用于下列事物建立模型:系統(tǒng)的源代碼、系統(tǒng)的發(fā)布版本、物理數(shù)據(jù)庫、自適應(yīng)系統(tǒng)等。組件圖也可以用于建立業(yè)務(wù)模型,此時(shí)的組件是業(yè)務(wù)的過程和文檔。組件圖還可以用于建立開發(fā)期間的軟件產(chǎn)物的依賴關(guān)系,用于系統(tǒng)開發(fā)的管理。

6.2

組件的應(yīng)用例:一個(gè)組件圖的示例,如圖6.7所示。它由組件“調(diào)度程序”、“計(jì)劃程序”、“GUI”(圖形界面),接口“注冊登記”、“更新”,以及它們的關(guān)系構(gòu)成。

圖6.7組件圖示例

6.2

組件的應(yīng)用建立一個(gè)可執(zhí)行系統(tǒng)的組件圖可按以下步驟進(jìn)行:(1)確定組件。(2)對組件加上必要的構(gòu)造型。如標(biāo)準(zhǔn)構(gòu)造型<<executable>>、<<library>>、<<table>>、<<file>>、<<document>>,或自定義新的構(gòu)造型。(3)確定組件之間的關(guān)系。最常見的組件之間的關(guān)系是通過接口依賴。一個(gè)組件使用(輸入)某個(gè)接口,另一個(gè)組件實(shí)現(xiàn)(輸出)該接口。(4)必要時(shí)把組件組織成包。(5)繪制組件圖。6.2

組件的應(yīng)用例:一個(gè)軟件產(chǎn)品的系統(tǒng)構(gòu)成模型,如圖6.8所示。它由可執(zhí)行程序和動(dòng)態(tài)連接庫構(gòu)成。圖6.8可執(zhí)行程序和動(dòng)態(tài)連接庫建模示例

6.2

組件的應(yīng)用采用同樣的方法可以為報(bào)表、文件與文檔建模。例如,圖6.9是在圖6.8的基礎(chǔ)上增加了程序的初始化文件“animator.ini”、數(shù)據(jù)庫表“shapes.tbl”和幫助文件“animator.hlp”,它們都用注釋節(jié)點(diǎn)表示。

圖6.9報(bào)表、文件與文檔建模

6.2

組件的應(yīng)用例:項(xiàng)目與資源管理系統(tǒng)PRMS的一個(gè)系統(tǒng)組件圖,如圖6.10所示,它表示了開發(fā)期間和運(yùn)行期間的實(shí)現(xiàn)系統(tǒng)的對象。圖6.10項(xiàng)目與資源管理系統(tǒng)PRMS的組件圖

6.2

組件的應(yīng)用在UML2.0中規(guī)定的組件圖標(biāo),如圖6.11所示。在UML1.x中,組件用于代表物理結(jié)構(gòu),特別是運(yùn)行時(shí)的系統(tǒng)物理塊,如動(dòng)態(tài)連接庫(DLL)等。在UML2.0中,組件代表系統(tǒng)的一個(gè)模塊化部分,可以是指邏輯的,也可以是指物理的。按照基于組件的開發(fā)方法,一個(gè)系統(tǒng)可以看作是由若干個(gè)組件通過接口連接而成的。

圖6.11UML2.0的組件圖標(biāo)

6.3

組件圖-UML2.0中的相關(guān)變化組件通過供給接口和需要接口定義其行為。組件的服務(wù)是一種型(Type)。組件在其環(huán)境中是一個(gè)可替換的單元。不論是在系統(tǒng)的分析設(shè)計(jì)階段或運(yùn)行時(shí),只要型相合(TypeConformant),即接口的功能等價(jià),一個(gè)組件可以重用,也可以被另一個(gè)組件完全代替。在組件中,供給接口和需要接口可以組織成端口(port),它們常在運(yùn)行時(shí)被訪問。對于包含復(fù)雜內(nèi)容的組件,常使用復(fù)合結(jié)構(gòu)把組件的內(nèi)容進(jìn)行劃分和聚集,使得結(jié)構(gòu)關(guān)系更為清晰。

6.3

組件圖-UML2.0中的相關(guān)變化例:一個(gè)按照UML2.0規(guī)定圖標(biāo)繪制的簡單的組件圖,如圖6.12所示。圖6.12組件圖示例

6.3

組件圖-UML2.0中的相關(guān)變化復(fù)合結(jié)構(gòu)(CpmpositeStructure)和復(fù)合結(jié)構(gòu)圖是UML2.0中的新成分。復(fù)合結(jié)構(gòu)描述系統(tǒng)中某一部分(復(fù)合結(jié)構(gòu))的內(nèi)部結(jié)構(gòu),包括該部分與系統(tǒng)的其它部分的交互。復(fù)合結(jié)構(gòu)圖能夠展示這些部分的“內(nèi)部”參與者的配置情況。通過復(fù)合結(jié)構(gòu)可以把一個(gè)復(fù)雜類或組件等分解成若干部分,便于清晰地描述它們(系統(tǒng))的內(nèi)部組織構(gòu)造情況,明確地說明了支持該復(fù)合結(jié)構(gòu)所包含的分類符(類、組件等)的結(jié)構(gòu)特性(Property)。這里說的分類符可以是類、對象、組件等。6.4

組件圖-復(fù)合結(jié)構(gòu)復(fù)合結(jié)構(gòu)與包都是一種聚組機(jī)制。復(fù)合結(jié)構(gòu)是模型元素在運(yùn)行時(shí)刻的聚組,包是編譯時(shí)刻的聚組。

復(fù)合結(jié)構(gòu)圖常用于組件圖,適宜表示組件,以及如何把組件分解為不同的部件。復(fù)合結(jié)構(gòu)圖類似于類圖,但它所表示的是內(nèi)部結(jié)構(gòu)所包含的部件和連接符。部件(Part)是分類符將扮演的角色(Role),不代表特定的實(shí)例(Instance)。6.4

組件圖-復(fù)合結(jié)構(gòu)部件的圖標(biāo)與對象的圖標(biāo)類似,也是一個(gè)矩形框,它的命名形式為:部件名:類名,但是名稱之下不帶下劃線。部件之間可以有連接符(Connector)連接,連接符用一條直線表示。連接符使得兩個(gè)部件(或模型元素)之間能夠通信。

委托連接符(DelegationConnector)是一種連接該復(fù)合結(jié)構(gòu)的對外委托端口和內(nèi)部實(shí)現(xiàn)部件的連接符,委托連接符用一條虛箭線表示。

連接符的實(shí)現(xiàn)可以是一個(gè)簡單指針,或是復(fù)雜的網(wǎng)絡(luò)連接。

6.4

組件圖-復(fù)合結(jié)構(gòu)例:一個(gè)表示對象類的復(fù)合結(jié)構(gòu)的示例,如圖6.13所示。其中,“輪胎”類是一個(gè)簡單類?!稗I車”類的內(nèi)部結(jié)構(gòu)是一種復(fù)合結(jié)構(gòu),它包含四個(gè)部件:“左前輪”、“右前輪”、“左后輪”、“右后輪”,代表轎車的四個(gè)輪子,它們的型都是“輪胎”。兩個(gè)前輪部件和兩個(gè)后輪部件分別有連接符相互連接。圖6.13類的復(fù)合結(jié)構(gòu)示例

左前輪:輪胎

右前輪:輪胎

右后輪:輪胎

左后輪:輪胎轎車前軸后軸輪胎

Tire:StringSize:String…6.4

組件圖-復(fù)合結(jié)構(gòu)在復(fù)合結(jié)構(gòu)圖中還常需要表示復(fù)合結(jié)構(gòu)和部件所需要的接口和端口,以及部件的多重性。例:一個(gè)組件“訂貨”的復(fù)合結(jié)構(gòu),如圖6.14所示,它有兩個(gè)端口。

圖6.14組件的復(fù)合結(jié)構(gòu)圖示例

6.4

組件圖-復(fù)合結(jié)構(gòu)6.3部署圖(配置圖)Home6.3.1節(jié)點(diǎn)6.3.2節(jié)點(diǎn)的關(guān)系6.3.3部署圖的應(yīng)用6.3.4UML2.0中的相關(guān)變化組件圖和部署圖6.5.1

節(jié)點(diǎn)6.5.2

節(jié)點(diǎn)的關(guān)系6.5.3

組件的關(guān)系第6章6.5部署圖概述節(jié)點(diǎn)(Node)是存在于運(yùn)行期間的系統(tǒng)的物理元素,節(jié)點(diǎn)代表計(jì)算機(jī)資源,通常為處理器(Processor)或其他硬件設(shè)備,系統(tǒng)的組件可以配置在節(jié)點(diǎn)上。節(jié)點(diǎn)的圖標(biāo)為一個(gè)三維立方體圖形,如圖6.15所示。

圖6.15簡單節(jié)點(diǎn)與擴(kuò)充節(jié)點(diǎn)示例

6.5.1

節(jié)點(diǎn)節(jié)點(diǎn)必須有名字。節(jié)點(diǎn)的名字可以是一個(gè)簡單名,或用路徑名。與對象類一樣,節(jié)點(diǎn)可以用標(biāo)記值說明名字的性質(zhì)。節(jié)點(diǎn)和對象類一樣可以區(qū)分為型和實(shí)例。節(jié)點(diǎn)的型代表計(jì)算資源的不同類型,節(jié)點(diǎn)的實(shí)例代表特定的具體的計(jì)算機(jī)資源。對象和組件實(shí)例可以駐留在節(jié)點(diǎn)實(shí)例上,而且可以從一個(gè)節(jié)點(diǎn)向另一個(gè)節(jié)點(diǎn)遷移。節(jié)點(diǎn)執(zhí)行組件,組件是被節(jié)點(diǎn)執(zhí)行的事物。一個(gè)節(jié)點(diǎn)可以與其它的節(jié)點(diǎn)、組件、對象有關(guān)聯(lián)。節(jié)點(diǎn)和對象類、協(xié)同、組件等模型元素一樣可以組織成包。

6.5.1

節(jié)點(diǎn)例:在節(jié)點(diǎn)上安置組件,如圖6.16所示。圖6.16用節(jié)點(diǎn)安置組件

6.5.1

節(jié)點(diǎn)節(jié)點(diǎn)與節(jié)點(diǎn)通過物理連接(Connection)發(fā)生關(guān)系,物理連接如以太網(wǎng)絡(luò)、共享總線等,從硬件方面保證了系統(tǒng)的節(jié)點(diǎn)協(xié)同運(yùn)行。節(jié)點(diǎn)與節(jié)點(diǎn)、節(jié)點(diǎn)與組件之間存在著多種類型的關(guān)系,包括關(guān)聯(lián)(通信關(guān)系)和依賴(支持關(guān)系、成為關(guān)系)。

1.通信關(guān)系通信關(guān)系是節(jié)點(diǎn)之間的一種關(guān)聯(lián),是節(jié)點(diǎn)之間的通信路徑或連接的模型。通信關(guān)系的表示法是用一條實(shí)關(guān)聯(lián)線連接兩個(gè)節(jié)點(diǎn),如圖6.17所示。在實(shí)關(guān)聯(lián)線上可以加構(gòu)造型以表達(dá)節(jié)點(diǎn)間的通信路徑或連接的性質(zhì)。

2.支持關(guān)系支持關(guān)系是節(jié)點(diǎn)與組件或?qū)ο笾g的依賴關(guān)系。如果一個(gè)節(jié)點(diǎn)與一個(gè)組件或?qū)ο蟠嬖谥С株P(guān)系,說明該節(jié)點(diǎn)上駐留著該組件或?qū)ο?,該組件或?qū)ο竽軌蛟谠摴?jié)點(diǎn)上執(zhí)行。支持關(guān)系的表示法是用一條虛箭線從節(jié)點(diǎn)指向所連接的組件或?qū)ο?,并可在虛箭線上加有構(gòu)造型<<supports>>,如圖6.18所示。

6.5.2

節(jié)點(diǎn)的關(guān)系圖6.17通信關(guān)系表示法示例

圖6.18支持關(guān)系表示法

6.5.2

節(jié)點(diǎn)的關(guān)系3.成為關(guān)系成為關(guān)系是組件與組件、組件與對象、對象與對象之間的依賴關(guān)系。成為關(guān)系不是節(jié)點(diǎn)之間的關(guān)系,但是它是組件或?qū)ο笤诠?jié)點(diǎn)之間的遷移的模型。成為關(guān)系的表示法是用一條虛箭線從一個(gè)節(jié)點(diǎn)中的組件指向另一個(gè)節(jié)點(diǎn)中的組件或從一個(gè)節(jié)點(diǎn)中的對象指向另一個(gè)節(jié)點(diǎn)中的對象,并可在虛箭線上加有構(gòu)造型<<becomes>>,如圖6.19所示。

成為關(guān)系可以用標(biāo)記值“{time=…}”說明其時(shí)間性質(zhì),即組件或?qū)ο笤谑裁磿r(shí)間發(fā)生遷移活動(dòng)。

成為關(guān)系說明源對象(或組件)和目標(biāo)對象(或組件)是在不同時(shí)間點(diǎn)的同一個(gè)對象(或組件),而且它們的狀態(tài)和角色不同。

6.5.2

節(jié)點(diǎn)的關(guān)系成為關(guān)系表示法,如圖6.19所示。圖6.19成為關(guān)系表示法

6.5.2

節(jié)點(diǎn)的關(guān)系部署圖由節(jié)點(diǎn)與節(jié)點(diǎn)之間的關(guān)系構(gòu)成。在部署圖中也可以有組件,以及節(jié)點(diǎn)與組件之間、組件與組件之間的關(guān)系。部署圖表示分布式系統(tǒng)的軟件組件與硬件之間的關(guān)系,它表達(dá)的是運(yùn)行系統(tǒng)的結(jié)構(gòu)。部署圖主要用于對在網(wǎng)絡(luò)環(huán)境運(yùn)行的分布式系統(tǒng)建立系統(tǒng)物理模型,或者對嵌入式系統(tǒng)建模。部署圖也可以用于建立業(yè)務(wù)模型,此時(shí)的“運(yùn)行系統(tǒng)”就是業(yè)務(wù)的組織機(jī)構(gòu)和資源(人力、設(shè)備等)。

例:項(xiàng)目與資源管理系統(tǒng)PRMS的部署圖,如圖6.20所示。

6.6

部署圖的應(yīng)用Home圖6.20項(xiàng)目與資源管理系統(tǒng)PRMS的部署圖

6.6

部署圖的應(yīng)用

建立一個(gè)客戶機(jī)/服務(wù)器系統(tǒng)或Web應(yīng)用系統(tǒng)的部署圖一般可按以下步驟進(jìn)行:(1)確定節(jié)點(diǎn)。(2)對節(jié)點(diǎn)加上必要的構(gòu)造型。(3)確定關(guān)系。把系統(tǒng)的組件如可執(zhí)行程序、動(dòng)態(tài)連接庫等分配到節(jié)點(diǎn)上,并確定節(jié)點(diǎn)與節(jié)點(diǎn)之間、節(jié)點(diǎn)與組件之間、組件與組件之間的關(guān)系,以及它們的性質(zhì)。

(4)繪制部署圖。例:一個(gè)醫(yī)院診療系統(tǒng)部署圖,如圖6.21所示。它是一個(gè)對象部署圖,其中每一個(gè)節(jié)點(diǎn)都是可視的特定節(jié)點(diǎn)實(shí)例:“DatabaseUnitServer”、“HeartUnitServer”與“aWindowsPC”,它們通過TCP/IP網(wǎng)絡(luò)連接。

6.6

部署圖的應(yīng)用圖6.21醫(yī)院診療系統(tǒng)部署圖(客戶機(jī)/服務(wù)器系統(tǒng))

6.6

部署圖的應(yīng)用在UML2.0中規(guī)定,部署圖的節(jié)點(diǎn)所代表的計(jì)算機(jī)資源,不僅是指硬件設(shè)備(Device),如處理器、讀卡機(jī)、移動(dòng)設(shè)備、通信設(shè)備等;而且可以是指包含在設(shè)備內(nèi)的執(zhí)行環(huán)境。執(zhí)行環(huán)境是其它軟件的宿主,如操作系統(tǒng)、J2EE容器、工作流引擎、數(shù)據(jù)庫等。

制品(Artifact)配置在節(jié)點(diǎn)上。在部署圖中的制品就是系統(tǒng)開發(fā)過程中最終產(chǎn)生的各種可執(zhí)行代碼文件。

實(shí)際上,制品代表組件(或任何可包裝模型元素,如簡單的類)的物理形式,組件由制品實(shí)現(xiàn)。

制品的圖標(biāo)為一個(gè)矩形,在制品的名稱上方給出構(gòu)造型“<<artifact>>”;或者,在矩形的右上角貼上一個(gè)圖標(biāo)“”。

6.7

部署圖-UML2.0中的相關(guān)變化例:圖6.22中有一個(gè)組件“Order”和一個(gè)制品“Order.jar”,制品“Order.jar”是一個(gè)可執(zhí)行的Java代碼文件。組件“Order”由制品“Order.jar”實(shí)現(xiàn)。圖6.22組件與制品

6.7

部署圖-UML2.0中的相關(guān)變化例:節(jié)點(diǎn)“應(yīng)用服務(wù)器”上的配置,如圖6.23所示。

圖6.23配置有執(zhí)行環(huán)境和制品的節(jié)點(diǎn)

應(yīng)用服務(wù)器J2EE容器DB2DBMS

KJPT.exe{Vendor=WSSC}{Component}6.7

部署圖-UML2.0中的相關(guān)變化對象約束語言(ObjectConstraintLanguage,OCL)是一種形式語言,用于表示UML模型中施加于模型元素上的約束。

OCL是一種純表達(dá)式語言,它用表達(dá)式表示約束。OCL的表達(dá)式確保沒有副作用,對一個(gè)OCL表達(dá)式進(jìn)行求值將返回一個(gè)值,它在系統(tǒng)模型中不改變。

OCL是一種規(guī)格說明語言(SpecificationLanguage)。所有有關(guān)實(shí)現(xiàn)的問題都不能用OCL表達(dá)。

OCL不是一種程序設(shè)計(jì)語言,不能用OCL編寫程序,不能用OCL編寫程序邏輯和控制流程。

6.8

對象約束語言組件圖和部署圖6.8.1

標(biāo)準(zhǔn)型6.8.2表達(dá)式6.8.3

對象性質(zhì)的約束第6章6.8對象約束語言O(shè)CL預(yù)定義的標(biāo)準(zhǔn)型定義了一組基本型和集合型(CollectionType)。OCL標(biāo)準(zhǔn)型定義為一個(gè)層次結(jié)構(gòu),用類圖表示,如圖6.18所示。

圖6.18OCL標(biāo)準(zhǔn)型

6.8.1

對象約束語言-標(biāo)準(zhǔn)型OCL基本型的含義與Java語言中的數(shù)據(jù)類型的含義類似。OCL基本型的例子如下:

1,3,5.4true,false‘a(chǎn)pple’,’orange’,’strawberry’

對OCL基本型能施加的運(yùn)算如下:

OCL基本型

運(yùn)算

Integer*,+,–,/,absReal*,+,–,/,floorBooleanand,or,xor,not,implies,if–then–elseStringtoUpper,toLower,substring,concat6.8.1

對象約束語言-標(biāo)準(zhǔn)型集合型是抽象型,它預(yù)定義了大量的運(yùn)算,可以維護(hù)集合。

UML定義了3種集合型:“Set”、“Bag”、“Sequence”。集合型本身又可以構(gòu)成集合型,形成集合型的嵌套。

“Set”型是一個(gè)數(shù)學(xué)的集合,它包含的元素不重復(fù)?!癇ag”型類似“Set”型,但它包含的元素允許重復(fù)?!癝equence”型類似“Bag”型,但它包含的元素有序。“Set”、“Bag”和“Sequence”型的表示方法是分別用關(guān)鍵字“Set”、“Bag”和“Sequence”,后跟一個(gè)花括號(hào),其中有組成該型的元素值。

例:集合型的一些例子如下:

Set{1,3,5,7,9}Sequence{1,3,4,5,2,3}Bag{1,3,4,3,5}Set{Set{1,3},Set{5,7},Set{9,11}}/“Collection”型嵌套

6.8.1

對象約束語言-標(biāo)準(zhǔn)型集合型的預(yù)定義運(yùn)算主要有“select”(選擇)、“reject”(剔除)、“collect”(集合)、“forAll”(全體)、“exists”(存在)等。

Collection->select(…)Collection->reject(…)Collection->collect(…)Collection->forAll(…)Collection->existsl(…)例:集合型運(yùn)算的一些例子如下:

self.employee->select(age>50)->notEmptyself.employee->reject(isMarried)->isEmptyself.employee->collect(person|person.birthDate)self.employee->forAll(p|p.lastname=‘張’)self.employee->exists(p|p.lastname=‘張’)6.8.1

對象約束語言-標(biāo)準(zhǔn)型OCL表達(dá)式對一個(gè)OCL型求值。

OCL的基本表達(dá)式的擴(kuò)展巴斯科范式EBNF定義如下:

PrimaryExpression:=literalCollection|literal|pathNametimeExpression?Qualifier?FeatureCallParameters?|‘’(‘’expression’’)’’|ifExpressionliteral:=<string>|<number>|“#”<name>timeExpression:=“@”<name>featureCallParameters:=“(”(declarator)?(actualParameterList)?“)”ifExpression:=“if”expression“then”expression“else”expression“endif”

最簡單的OCL基本表達(dá)式是一個(gè)literal(文字),literal可以是一個(gè)字符串,或一個(gè)數(shù)字,或在“#”號(hào)后跟一個(gè)模型元素或操作的名字。

OCL基本表達(dá)式也可以是literalCollection,即literal的集合型。

6.8.2

對象約束語言-表達(dá)式OCL基本表達(dá)式可以是一個(gè)路徑名,后面可有選項(xiàng):時(shí)間表達(dá)式、限定符(Qualifier)或特征調(diào)用參數(shù)。

時(shí)間表達(dá)式的格式是在符號(hào)“@”后面跟一個(gè)名字,它確定性質(zhì)的時(shí)間值。

特征調(diào)用參數(shù)是運(yùn)算的實(shí)在參數(shù)表。

OCL基本表達(dá)式可以是一個(gè)條件表達(dá)式,其值為一個(gè)Boolean值“True”或“False”。

把一個(gè)OCL表達(dá)式用圓括號(hào)括起來也是一個(gè)OCL基本表達(dá)式。

6.8.2

對象約束語言-表達(dá)式OCL表達(dá)式的求值自左向右進(jìn)行,運(yùn)算符的優(yōu)先級規(guī)定由高到低依次為:圓點(diǎn)“.”和箭頭“->”的優(yōu)先級最高;一元運(yùn)算符“not”和“–”;乘除運(yùn)算符“*”和“/”;加減運(yùn)算符“+”和“–”;邏輯運(yùn)算符“and”、“or”和“xor”;邏輯運(yùn)算符“implies”;條件運(yùn)算符“if–then–else”;比較運(yùn)算符“<”、“>”、“<=”、“>=”、“=”、“<>”;圓括號(hào)優(yōu)先

6.8.2

對象約束語言-表達(dá)式例:OCL表達(dá)式的例子如下:

1+2*34self.wife.sex=#femaleself.wife.age>=18andself.employee->select(age>50)

在OCL的基本表達(dá)式的基礎(chǔ)上定義了其他一些表達(dá)式,如加減表達(dá)式、乘除表達(dá)式、一元表達(dá)式、邏輯表達(dá)式、關(guān)系表達(dá)式、后綴表達(dá)式、let表達(dá)式。

6.8.2

對象約束語言-表達(dá)式一個(gè)對象的屬性、關(guān)聯(lián)端、無副作用的操作稱為對象的性質(zhì)(Property)。

對象的性質(zhì)的表示是用一個(gè)圓點(diǎn)“

溫馨提示

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

最新文檔

評論

0/150

提交評論