麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 課堂 > 技術(shù)開發(fā) > 正文

UML系列內(nèi)容之十三:組件圖

2023-06-17 18:00:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

今天,本站帶領(lǐng)大家來(lái)熟悉一下UML中的組件圖。

1 什么是組件圖

組件圖(Component Diagram)又稱構(gòu)件圖,是UML中描述一個(gè)系統(tǒng)中的物理方面的圖形,它是用來(lái)描述構(gòu)成系統(tǒng)的各個(gè)組件、組件提供的接口與需求的接口、端口以及它們之間關(guān)系的圖。

這種圖在基于組件開發(fā)的系統(tǒng)建模中很重要。

組件圖可以幫助用戶理解系統(tǒng)的結(jié)構(gòu)。

2 組件圖的構(gòu)成

組件圖中主要包括組件、接口及其它們之間的關(guān)系三種元素。

2.1 組件

組件(Component)是定義了良好接口的、可重用的、可替代的物理實(shí)現(xiàn)單元,它一般表示實(shí)際存在的、物理的物件。

程序源代碼、可執(zhí)行文件、子系統(tǒng)、一個(gè)腳本、動(dòng)態(tài)鏈接庫(kù)(DLL)、ActiveX控件都可以成為系統(tǒng)中的組件。

組件隱藏了內(nèi)部實(shí)現(xiàn)的細(xì)節(jié),僅通過(guò)接口提供服務(wù)。

我們可以把組件理解為一個(gè)黑盒子,這個(gè)黑盒子使用接口來(lái)公開其公共可見的屬性及操作,這一點(diǎn)與類非常相似。

在UML1.x版本中,一個(gè)標(biāo)準(zhǔn)的組件使用如下的圖形來(lái)表示。

UML1.x中的組件表示圖形

而在UML2.x中一般使用如下的圖形來(lái)表示一個(gè)組件。

UML2.x中的組件

也可以使用類似類的矩形框加上構(gòu)造型<<component>>來(lái)表示組件,如下圖所示:

帶構(gòu)造型的組件表示方法

2.2 接口

組件中的接口主要分為兩類:提供接口(Provided Interface)和需求接口(Required Interface)。

提供接口又稱導(dǎo)出接口,是組件提供的服務(wù)的集合。

提供接口是由組件本身直接實(shí)現(xiàn)的接口、或者是由實(shí)現(xiàn)組件的類之一實(shí)現(xiàn)的接口,或者是由組件的公共端口提供的接口。

提供接口可以使用接口與組件之間的實(shí)現(xiàn)關(guān)系來(lái)表示。

提供接口可以在組件圖標(biāo)的邊框上使用類似棒棒糖式(lollipop)的圖標(biāo)來(lái)表示。如下圖所示:

帶提供接口的組件

這個(gè)圖表示W(wǎng)eatherServices組件提供或?qū)崿F(xiàn)了WeatherForecast接口。

它可以認(rèn)為是下圖的簡(jiǎn)化表示方法:

組件的實(shí)現(xiàn)關(guān)系1

需求接口又稱導(dǎo)入接口,是組件請(qǐng)求其它組件相應(yīng)服務(wù)時(shí)遵循的接口。

需求接口通過(guò)依賴關(guān)系來(lái)表示,需求接口可以使用插座(Socket)的圖標(biāo)連接到組件邊框上來(lái)表示,如下圖所示:

組件的需求接口

上面這個(gè)圖表示UserServices組件需要(依賴)IOrderServices接口。

它可以認(rèn)為是下圖的簡(jiǎn)化表示方法:

組件和接口間的依賴關(guān)系

作為一種可選方式,可以把組件的接口或組件的操作和屬性列在組件圖標(biāo)下邊的隔室里。

組件與接口間的表示方法

上面這個(gè)圖表示,UserServices接口提供的接口有IUserServices,需求的接口有IOrderServices。

2.3 端口

端口用于描述組件或類與它的環(huán)境、與其它類、與其它組件或內(nèi)部部件的交互點(diǎn)。這個(gè)交互點(diǎn)一般是組件或類的一個(gè)屬性,默認(rèn)情況下,端口具有公共可見性。

端口使用類或組件邊框上的一個(gè)小矩形來(lái)表示,如下圖所示:

組件和端口

上圖表示BorrowServices組件有一個(gè)borrowPort端口。

接口通過(guò)端口來(lái)提供服務(wù)或獲得服務(wù),下圖表示了這種情況:

組件的接口通過(guò)端口來(lái)提供服務(wù)或獲得服務(wù)

3 組件圖中的關(guān)系

組件圖中的關(guān)系主要包括兩種:依賴關(guān)系和實(shí)現(xiàn)關(guān)系。

3.1 依賴關(guān)系

組件圖中的依賴關(guān)系與類圖中相同,都是“供應(yīng)者-客戶”關(guān)系(supplier-client),使用虛線箭頭由客戶(client)組件指向供應(yīng)者(supplier)組件。

下圖表示組件“borrowBook”依賴于組件“Book”,其中,“borrowBook”是客戶組件,Book是供應(yīng)者組件。

組件之間的依賴關(guān)系1

下圖也表示了兩個(gè)組件之間的依賴關(guān)系,它表示了borrowBook組件的一個(gè)需求接口依賴于Book組件的一個(gè)提供接口:

組件和接口的依賴關(guān)系2

一般這種依賴關(guān)系都是從插座接口引出指向棒棒糖接口。

上圖也可以簡(jiǎn)化成下面的形式:

組件和接口的依賴關(guān)系3

上面這個(gè)圖表示了borrowBook使用某個(gè)需求接口與Book組件的提供接口產(chǎn)生依賴關(guān)系。

這種圖在UML2.x中被定義為連接。

3.2 實(shí)現(xiàn)關(guān)系

組件之間的實(shí)現(xiàn)關(guān)系表示一個(gè)組件實(shí)現(xiàn)了另外一個(gè)組件。這與類和接口之間的實(shí)現(xiàn)關(guān)系相同。

下面第一個(gè)圖表示組件borrowBook實(shí)現(xiàn)了組件IBorrowBook。

如果IBorrowBook組件僅包含一個(gè)接口的話,也可以使用第二個(gè)圖來(lái)表示(見上面關(guān)于組件提供接口的說(shuō)明)。

組件和接口的實(shí)現(xiàn)關(guān)系

組件實(shí)現(xiàn)了一個(gè)接口意味著組件支持接口中的所有操作。

4 組件圖建模技術(shù)

Scott W.Ambler在其著作《The Object Primer:Agile Model-Driven Development with UML 2.0》第三版中給出了關(guān)于組件建模技術(shù)的一些方法和技巧:

敏捷模型驅(qū)動(dòng)的建模UML2.0

在實(shí)際組件建模中可以采用自頂向下的方法,也可以使用自底向上的方法。

使用自頂向下的建模方法可以使設(shè)計(jì)人員能夠更清晰的了解軟件的未來(lái)架構(gòu),但這種方法容易導(dǎo)致系統(tǒng)的過(guò)度架構(gòu)化,從而導(dǎo)致系統(tǒng)的過(guò)度建模,易使設(shè)計(jì)人員過(guò)度關(guān)注細(xì)節(jié),而忽略了客戶的真正需求。

使用自底而上的方法可以在類建模的基礎(chǔ)上把已設(shè)計(jì)的類進(jìn)行組件化,把系統(tǒng)中可重用的部分分離出來(lái),或者將應(yīng)用程序進(jìn)行拆分,以便把任務(wù)輕松地分配給相應(yīng)的團(tuán)隊(duì)。

在組件建模中可以使用如下步驟或原則進(jìn)行建模:

(1)保持組件的內(nèi)聚性

一個(gè)組件應(yīng)保持其功能單一性或功能相關(guān)性。如,一個(gè)組件僅包含某類用戶的用戶界面、或者僅包含大規(guī)模領(lǐng)域概念的業(yè)務(wù)類,或者僅包含公共基礎(chǔ)概念的技術(shù)類。

(2)將用戶界面類分配給應(yīng)用程序組件

用戶界面類,如頁(yè)面、報(bào)告以及實(shí)現(xiàn)相關(guān)邏輯的類,應(yīng)該放在帶有“application”構(gòu)造型的組件中。如Java中JSP頁(yè)面、servlet和Swing類等。

(3)把技術(shù)類分配到基礎(chǔ)架構(gòu)組件中

實(shí)現(xiàn)系統(tǒng)級(jí)服務(wù)的類,如安全、持久性或中間件,應(yīng)該分配到帶有“infrastructure”構(gòu)造型的組件中。

(4)定義類的契約

類契約是指能夠直接響應(yīng)其它對(duì)象發(fā)送的消息的方法(操作)。

如在Books類中很可能包括getBookInfo()這樣的方法,這樣的方法能夠響應(yīng)來(lái)自其它組件中對(duì)象發(fā)送的消息。

為了很好的識(shí)別組件,你可以忽略所有非類契約的操作,原因是這些操作對(duì)促進(jìn)分布在不同組件中的對(duì)象之間進(jìn)行通信不會(huì)提供太大幫助。

(5)把一個(gè)具有層次結(jié)構(gòu)的所有類(如類的繼承或聚合層次結(jié)構(gòu))分配到相同組件中。

(6)識(shí)別領(lǐng)域組件

若干類相互協(xié)作以完成特定的任務(wù),這些類滿足內(nèi)聚要求,從而成為一個(gè)領(lǐng)域組件。其它類或組件能夠通過(guò)向該領(lǐng)域組件發(fā)送消息以請(qǐng)求獲得信息或執(zhí)行操作。領(lǐng)域組件對(duì)外顯示出其簡(jiǎn)單性,但其內(nèi)部通常很復(fù)雜。領(lǐng)域組件設(shè)計(jì)的目標(biāo)是減少網(wǎng)絡(luò)通信,而使大多數(shù)信息流發(fā)生在其內(nèi)部。

(7)確定業(yè)務(wù)類的協(xié)作類型

服務(wù)器類是接收消息但不發(fā)送消息的類;客戶類是發(fā)送消息但不接收消息的類;客戶/服務(wù)類是兼有發(fā)送消息和接收消息的類;在確定好每個(gè)類的分布類型后,就可以開始確定潛在的領(lǐng)域組件了。

(8)把服務(wù)器類歸為一個(gè)組件中

純服務(wù)器類屬于領(lǐng)域組件,他們是應(yīng)用程序中消息流的“最后一站”。

(9)將僅為某客戶端類服務(wù)的組件合并到其客戶組件中

如果一個(gè)領(lǐng)域組件僅為某一個(gè)組件提供服務(wù),那么可以把這兩個(gè)組件合并為一個(gè)組件。

(10)單純的客戶端類不應(yīng)歸到領(lǐng)域組件中

客戶端類只生成消息而不接收消息,不應(yīng)屬于領(lǐng)域組件。領(lǐng)域組件的目的是響應(yīng)消息??蛻舳祟惡芸赡軐儆趹?yīng)用程序組件。

(11)高度耦合的類應(yīng)歸為一個(gè)組件中

兩個(gè)頻繁協(xié)作的類應(yīng)位于相同的領(lǐng)域組件,以減少兩個(gè)類之間的網(wǎng)絡(luò)流。即,高度耦合的類應(yīng)放在一起。

(12)遵循最小化組件間的消息流原則

在確定一個(gè)客戶類/服務(wù)類屬于哪個(gè)組件時(shí),要充分考慮流入和流出類的信息流。組件內(nèi)的通信通常是在內(nèi)存中對(duì)象之間簡(jiǎn)單的消息發(fā)送。組件間的通信往往需要消息的轉(zhuǎn)換、傳輸?shù)阮~外的支出。

(13)定義組件的契約

每個(gè)組件應(yīng)向客戶提供服務(wù),這樣的服務(wù)即為組件的契約。

5. 使用Rational Rose繪制組件圖

Rational Rose支持1.x的組件圖繪制方法,其能表示組件與接口之間的實(shí)現(xiàn)關(guān)系以及組件之間的依賴關(guān)系,但不能繪制“Socket”插座式的需求接口形式。用戶在實(shí)際中可以通過(guò)接口之間的依賴來(lái)表達(dá)。

5.1 新建組件視圖

在Rose中,在組件視圖(Component View)中創(chuàng)建組件圖,可以在Rose中左側(cè)的瀏覽器中的“Component View”上右擊,然后選擇“New”->“Component Diagram”。

5.2 新建組件

使用組件圖創(chuàng)建工具欄中的“組件”可以創(chuàng)建一個(gè)組件。

組件圖中的工具箱如下圖所示:

UML提供的組件圖工具

選“組件”工具后,在繪圖區(qū)點(diǎn)擊一下即可以完成一個(gè)組件的創(chuàng)建。

5.3 修改組件的名稱

(1)用戶在創(chuàng)建組件時(shí),可以直接修改組件的名稱;

(2)在左側(cè)瀏覽器中,選中要修改名稱的組件,然后右擊后選擇“Rename”,最后,輸入新的名稱即可,具體如下圖所示:

Rose中為組件重命名

(3)在繪圖區(qū)中,在對(duì)應(yīng)的組件上右擊后,在彈出的快捷菜單中選擇“Open Standard Specification...”。

這個(gè)操作會(huì)打開如下圖所示的對(duì)話框:

Rose中組件的詳述對(duì)話框

在這個(gè)對(duì)話框的“Name”中可以輸入新的組件名稱。

5.4 刪除一個(gè)組件

在Rose中,要徹底刪除一個(gè)組件,可以通過(guò)以下幾種方式:

(1)在繪圖區(qū)中,右擊要?jiǎng)h除的組件,在彈出的快捷菜單中選擇“Edit”->“Delete from Model”菜單項(xiàng);

(2)選中要?jiǎng)h除的組件,按下“Ctrl+D”組合鍵,則可以快速刪除組件;

(3)選中要?jiǎng)h除的組件,選擇菜單欄中的“Edit”->“Delete from Model”菜單項(xiàng);

(4)在左側(cè)瀏覽器中,在要?jiǎng)h除的組件上右擊后,在彈出的菜單中選擇“Delete”。

以上的四種操作方法,將會(huì)把組件在所有模型中徹底刪除。

如果其它模型中使用了該組件,且只是把組件從當(dāng)前模型中的話,用戶可以選中組件后,直接按下鍵盤中的“Delete”鍵即可,或者右擊要?jiǎng)h除的組件后,在快捷菜單中選擇“Edit”->“Delete”也可以實(shí)現(xiàn)該操作。

5.5 定義組件的接口

在Rose中,可以為組件指定其要實(shí)現(xiàn)的接口(提供接口——Provided Interface),具體操作方法如下:

(1)右擊要設(shè)置的組件,在彈出的快捷菜單中選擇“Open Standard Specification...”;

(2)在彈出的對(duì)話框中選擇“Realizes”選項(xiàng)卡,該選項(xiàng)卡中列出了模型中所有的類和接口,具體情形如下圖所示:

Rose中實(shí)現(xiàn)一個(gè)接口的方法

(3)在要實(shí)現(xiàn)的接口上右擊后,選擇“Assign”(分配)菜單項(xiàng)。

操作情形如下圖所示:

Rose中分配一個(gè)接口到組件

分配完接口后的組件及操作對(duì)話框后的情形如下圖所示:

Rose中分配接口之后的情形

我們可以看到,組件上多了兩個(gè)接口(提供接口),同時(shí)在“Realizes”列表中,以分配到該組件的接口上將出現(xiàn)紅色的“√”符號(hào)。

為組件指定實(shí)現(xiàn)的接口后的樣子如下圖所示:

Rose中帶實(shí)現(xiàn)接口的情形

它表示IBook和IReader接口在組件BorrowBooks中實(shí)現(xiàn)的,也表示BorrowBooks提供了IBook和IReader兩個(gè)接口(提供接口)。

如果用戶想把一個(gè)接口從組件中移除,用戶可以在列表中的組件上右擊后,在彈出的菜單中選擇“Remove Assignment”菜單項(xiàng)。

實(shí)際上,以上操作相當(dāng)于定義了組件和接口之間的實(shí)現(xiàn)關(guān)系。

用戶也可以使用同樣的方法,把組件中包含的類分配到某個(gè)組件中。

(4)添加依賴關(guān)系

組件圖中的依賴關(guān)系需要借助工具欄中的“依賴”工具來(lái)實(shí)現(xiàn)。

具體操作辦法如下:

①用戶點(diǎn)擊“依賴”工具;

②在依賴元素上點(diǎn)擊后,一直按住鼠標(biāo)左鍵,拖動(dòng)鼠標(biāo)到被依賴元素上松開鼠標(biāo)左鍵,則完成了元素之間的依賴關(guān)系。

如下圖顯示了組件“Fine”和接口“IFineRecords”之間的依賴關(guān)系。

Rose中接口與組件的依賴

它相當(dāng)于組件的需求接口(Required Interface)。

6. 使用Visio繪制組件圖

Visio中雖然提供了一些繪制UML圖的模板,但沒有提供專門繪制組件圖的模板。但用戶可以在Pavel Hruby博士的網(wǎng)站上下載專門用于繪制UML圖的Visio模具包。

Visio中繪制組件圖

這個(gè)Visio模具包叫“Visio Stencil for UML”。

該模板可以支持UML2.5中的各種圖形,包括用例圖、類圖、時(shí)序圖、包圖、狀態(tài)機(jī)圖、組件圖等。

可以在微信搜索“優(yōu)雅的代碼”訂閱號(hào),關(guān)注后,消息中回復(fù)“visio uml”關(guān)鍵字來(lái)獲取該模板的下載地址。

下載后,把這個(gè)模具包解壓縮到你的電腦某個(gè)磁盤中的某個(gè)目錄中以備使用。

6.1 把下載的模具加載到Visio中

Visio Stencil for UML針對(duì)不同的Visio版本有不同的模具。正常情況下高版本的Visio可以支持低版本的Visio Stencil for UML。

(1)打開Visio,新建繪圖;

(2)選擇“更多形狀”,然后選擇“打開模具”;

(3)選擇你解壓縮后的Visio Stencil for UML模具。

這樣,就可以把下載的模具加載到繪圖區(qū)中來(lái)了。

你也可以把下載解壓縮的文件放到Visio默認(rèn)的模具路徑中,具體操作方法為:

在“文件”菜單中選擇“選項(xiàng)”,然后在左側(cè)選擇“保存”項(xiàng),在右側(cè)列出的內(nèi)容中找到“默認(rèn)個(gè)人模板位置”,這里是模板保存的路徑,你可以把解壓縮后的Visio Stencil for UML文件復(fù)制到這個(gè)文件夾中。

或者你在這里直接輸入Visio Stencil for UML所在的路徑。

6.2 Visio Stencil for UML提供的主要模板

下圖顯示了這個(gè)工具中提供的繪制UML圖的全部圖形符號(hào)。

Visio中提供的繪制組件圖的圖形工具

同時(shí),在下載的工具中也提供了一些UML其它的構(gòu)造型符號(hào)供設(shè)計(jì)時(shí)使用。

6.3 往繪圖區(qū)添加組件

(1)添加一個(gè)組件

在左側(cè)形狀中,選擇“Component”(組件),然后把它拖曳到繪圖區(qū)中來(lái)。

(2)輸入名稱

雙擊組件符號(hào),輸入或修改組件的名稱。

(3)調(diào)整組件顯示大小

如果需要調(diào)整組件的大小,可以選中組件,在其周圍會(huì)出現(xiàn)若干個(gè)白色的小方塊,如下圖所示:

Visio中調(diào)整圖形的大小

鼠標(biāo)到上面會(huì)變成雙向箭頭的形狀,然后按住鼠標(biāo)左鍵,通過(guò)拖拽來(lái)改變圖形的顯示大小。

(4)修改字體

選中組件后,在“開始”功能區(qū)的“字體”分組中可以修改字體、顏色以及字體的大小、是否加粗、是否有下劃線等設(shè)置,如下圖所示:

Visio中設(shè)置圖形中字體大小及樣式

6.4 為組件添加接口

在左側(cè)形狀中選擇“Interface,Socket”圖形,如下圖所示的圖形:

Visio中為組件添加提供或需求接口

然后把它拖曳到繪圖區(qū)中的組件附近,這時(shí),相應(yīng)的組件周圍會(huì)出現(xiàn)若干貼附點(diǎn),如下圖所示:

Visio中為組件添加接口的情形

選擇一個(gè)貼附點(diǎn),然后松開鼠標(biāo)后,其會(huì)變成如下的形式:

Visio中為組件添加接口后的情形

用戶可以選中接口,通過(guò)按住圈中(接口)的黃色小方框來(lái)拉長(zhǎng)接口的線。

Viso中調(diào)整接口與接口連接線的長(zhǎng)度

默認(rèn)是提供接口(Provided Interface)的形狀,如果想要添加需求接口(Required Interface),則只需在添加的接口上右擊,然后選擇“Socket”即可,如下圖所示:

Visio中切換需求接口和提供接口

則原來(lái)的提供接口的形狀就變成了需求接口的形狀,如下圖所示:

Visio中的改變?yōu)樾枨蠼涌? height=

6.5 為組件添加依賴關(guān)系

在這個(gè)工具中可以通過(guò)在繪圖中添加“Straight Relationship”為組件圖中添加依賴關(guān)系。

Visio中添加依賴關(guān)系

然后將其微端連接到依賴元素的貼附點(diǎn)上,其頭端連接到被依賴元素的貼附點(diǎn)上。

默認(rèn)添加的“Straight Relationship”為一條直線,情形如下圖所示:

Viso中添加的依賴關(guān)系

用戶可以通過(guò)右擊這個(gè)直線,然后在菜單列表中選擇“Dependency”,即完成依賴關(guān)系的繪制。

Visio中關(guān)系的類型

下圖是修改完聯(lián)系類型的情形:

Visio中創(chuàng)建的依賴關(guān)系

7 一個(gè)例子

下面是圖書館借閱系統(tǒng)中的組件圖,這個(gè)組件圖即是使用上面介紹的Visio Stencil for UML工具創(chuàng)建而成的。

圖書館管理系統(tǒng)組件圖-Visio

下圖是在Rose中實(shí)現(xiàn)的例子:

圖書館管理系統(tǒng)組件圖-Rose

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人做爽爽爽爽免费国产软件 | 99国产精品国产免费观看 | 亚洲第一成人在线观看 | 国产精品久久久久久久久久久久午夜 | 中文字幕免费看 | 精品中文字幕久久久久四十五十骆 | 黄色网址进入 | 黄色一级片免费在线观看 | www成人在线观看 | 蜜桃传媒视频麻豆第一区免费观看 | 国产1区在线观看 | 欧美成人免费一级 | 国产美女视频黄a视频免费 日韩黄色在线播放 | 日韩一级精品 | 亚洲人成网站在e线播放 | 中文字幕视频在线播放 | 久久久久久久免费看 | 免费观看一区二区三区视频 | 无遮挡一级毛片视频 | 男人午夜视频 | 精品一区二区6 | 369看片你懂的小视频在线观看 | 男男啪羞羞视频网站 | 亚洲国产中文字幕 | 久久亚洲精品久久国产一区二区 | 欧美一级黄色免费看 | 成人免费看片a | 欧美精选一区二区 | 日韩视频在线不卡 | 亚洲精品日韩色噜噜久久五月 | 黄色伊人网站 | 91精品一区二区综合在线 | 国产伦精品一区二区三区在线 | 天天草天天干天天 | 久久99精品国产自在现线 | 中国久久久 | 成人在线观看污 | 九一免费国产 | 国产精品久久久久网站 | 精品久久一区二区 | 国产九九九九 |