簡體   English   中英

在 UML 組件圖中重用子組件

[英]Reuse sub-components in UML component diagram

簡而言之:目前我在 Sparx Enterprise Architect 中執行了大量的白盒建模。 但是,我想知道 EA 不允許我添加兩次子組件。 是 UML 建模問題還是工具問題?

說明:為了解釋我的話題,讓我們假設我們要去 model 一個公寓。 公寓由房間組成,即浴室和客廳。 兩種房間都包括一扇門。 門基本上是相同的 - 相同的制造商,相同的產品。

目標:房間的門是平等的。 因此,我們不應該單獨 model 而是重用單個門組件(從我的角度來看)。 下圖顯示了我的設置:

在此處輸入圖像描述

現在,我想創建組件圖。 我想要達到的目標如下所示。 你會猜到我不可能得到想要的 model。 相反,紅色組件存在問題。

在此處輸入圖像描述

ISSUE:對於組件圖,我總是選擇將組件作為鏈接插入到 Sparx Enterprise Architect 中。 當我第二次嘗試粘貼門(子)組件時,我收到以下反饋:

在此處輸入圖像描述

注意:根據我的經驗,我知道來自 Sparx Enterprise Architect 的錯誤消息通常表明存在一些建模錯誤。 我在互聯網上閱讀了很多內容,甚至還買了一本關於該主題的 UML 書。 不幸的是,在這兩個來源中,我都無法找到我的建模問題的解決方案。 解決此問題的唯一方法是將門組件作為實例而不是鏈接插入到組件圖中,或者深度復制門組件。 但是,這兩個選項都感覺不自然,我覺得它們會在進一步的建模過程中引起后續問題。

您不能在圖表上兩次添加相同的元素。 對於正在連接的元素,您可以使用連接器上下文中的“虛擬化連接器端”。 這將在圖表上創建元素的陰影。 但是,我不建議使用它,因為它會產生很多不同的問題。

UML 規范本身並不禁止在圖上多次包含元素。 但是他們只在少數使用泛化的圖表上使用它,很明顯實際上元素是相同的。 現在,當您在圖表上重新使用元素時,這正是問題所在。 無法確定您是否有兩個看起來相同的不同元素,或者它們是否只是同一事物的兩個渲染。 出於這個原因,我的建議是明確並在圖表上只使用一次元素。

作為替代方案,可以考慮使用顯示在兩個 Room 組件內的復合圖。 您可以制作任一組合,將共享的子組件放置在該圖中,並使組合圖顯示在主組件內。 這可以通過拖動組件內的復合圖並使其適合來完成:

在此處輸入圖像描述

在 Enterprise Architect 中嵌入圖表可以實現如下:

  1. 右鍵單擊組件 -> Select 組合圖允許您 select 一個已經存在的圖。 雙擊組件后,它將立即打開。
  2. 右鍵組件 -> 在框架中顯示組合圖右鍵單擊組件 -> 在隔間中顯示組合圖會將圖表直接嵌入到外部組件視圖中。

嵌入復合圖的選項

您顯示的圖表是打包元素的符號。 包裝沒有語義。 您可以在 model 瀏覽器和圖表中將元素移動到任意位置。 它只會幫助您,保持 model 井井有條。 為此目的,每個元素只能包含在一個包裝元素中是有意義的。 因此,不可能在兩個房間都顯示門。

據我了解,您要 model,即浴室和客廳都有一部分,即門型。 為此,UML 使用復合結構圖。 它允許顯示組件和類的內部結構。 組件房屋 在這個例子中,組合結構圖顯示在 House 組件的一個隔間中,在組件圖中顯示。 如您所見,House 的子組件也可以顯示其內部部件。 這適用於任何級別的嵌套。 當然,如果圖表變得太大,你也可以使用專門的復合結構圖,只顯示一個組件的內部結構。

現在,有些人將帶有冒號的所有內容稱為“實例”。 在某種程度上,他們是對的。 每個結構圖的語義是它告訴我們允許的實例是什么——實際上並不依賴於冒號。 只有這里的圖表告訴我們一些實例是其他實例的一部分:門的兩個實例是浴室和客廳的一個實例的一部分,而這兩個實例又是房子的一個實例的一部分。 建模者選擇不顯示房子是什么類型的實例的一部分。 它可能是一個城市,城市可能是 State 的一部分,而 State 可能是國家的一部分,依此類推。 這實際上取決於圖表的重點(以及模型的目的)。 顯示的圖表僅說明了房屋的所有實例,無論它是什么的一部分。 因此,頂層沒有冒號。

我沒有使用 Enterprise Architect model。 然而,由於這種表示法完全在 UML 規范的范圍內,它應該是可能的。

我假設您在談論軟件組件。 如果你說的是物理房間,你應該考慮使用SysML,它為model事物的內部結構提供了更多的可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM