- UML基礎與Rose建模實用教程(第三版)
- 謝星星 周新國編著
- 2007字
- 2020-11-23 15:05:12
2.4.2 UML的擴展機制
盡管UML已經是一套功能較強、表現力非常豐富的建模語言,但是有時仍然難以準確表達模型的許多細小方面。為此,UML的開發者們為UML設計了一種簡單通用的擴展機制,用戶可以使用擴展機制對UML進行擴展和調整,以便使其與一個特定的方法、組織或用戶相一致。擴展機制是對已有的UML語義按不同系統的特點合理地進行擴展的一種機制。下面將介紹三種擴展機制,它們分別是構造型(Stereotype)、標記值(Tagged Value)和約束(Constraint)。
構造型擴充了UML的詞匯表,允許針對不同的問題,從已有的基礎上創建新的模型元素。標記值擴充了UML的模型元素屬性,允許在模型元素的規格中創建新的信息。約束擴充了UML模型元素的語義,允許添加新的限制條件或修改已有的限制條件。使用這些擴展機制能夠讓UML滿足各種開發領域的特別需要。
1.構造型(stereotype)
在對系統建模的時候,會發現現有的一些UML構造塊在一些情況下不能完整無歧義地表示出系統中的每一元素的含義,因此需要利用構造型來擴展UML的詞匯,可以利用它來創造新的構造塊,這個新創造的構造塊既可以從現有的構造塊派生,又專門針對我們要解決的問題。
構造型就像在模型元素的外面重新添加了一層外殼,這樣就在模型元素上又加入了一個額外語義。通常來講,由于構造型是對模型元素相近的擴展,所以一個元素的構造型和原始的模型元素經常使用在同一場合。構造型可以是基于各種類型的模型元素,比如構件、類、節點以及各種關系等。對構造型的使用通常是使用那些已經在UML中預定義了的構造型,這些預定義的構造型在UML的規范以及介紹UML的各種書中都有可能找到。
構造型的一般表現形式為使用“<<”和“>>”包含構造型的名稱,例如<<use>>、<<extends>>等。<<use>>和<<extends>>構造型的名字就是由UML預定義的。使用這些預定義的構造型用于調整一個已存在的模型元素,而不是在UML工具中添加一個新的模型元素。這種策略保證了UML工具的簡單性。突出的表現在對關系的構造型的表示上。比如在用例圖中,對兩個用例進行關聯。可以使用如圖2-29所示的方式簡單表示“依賴或實例化”關系。如果要使用附加的構造型,只需要用鼠標雙擊關系的連線,在彈出的對話框的“Stereotype”選項中選擇相應的構造型即可。假設選擇“include”關系,效果則如圖2-30所示,在關系的表示上,只需要添加相應構造型即可。

圖2-29 未適用構造型示例
構造型的表現形式并不都是使用“<<”和“>>”來表示,有的是通過圖形的改變來表示的。比如,某個類,使用的構造型是“Service”,在Rational Rose中它的表示方法如圖2-31所示。

圖2-30 使用“include”構造型示例

圖2-31 “Service”的構造型表示
用戶也可以自己來定義構造型,即用戶自定義構造型,其格式按照構造型的一般表現形式來表示。
綜上所述,構造型是一種優秀的擴展機制,它能夠有效地防止UML變得過度復雜,同時還允許用戶進行必要的擴展和調整。
2.標記值(Tagged Value)
標記值是由一對字符串構成,這對字符串包含一個標記字符串和一個值字符串,用來存儲有關模型元素或表達元素的一些相關信息。標記值,可以用來擴展UML構造塊的特性,也可以根據需要來創建詳述元素的新元素。標記值可以與任何獨立元素相關,包括模型元素和表達元素。標記值是當需要對一些特性進行記錄的時候而給定元素的值。
通過標記值可以將各種類型的信息都附屬到某個模型元素上。如元素的創建日期、開發狀態、截止日期和測試狀態等。將這些信息進行劃分,則主要包括:對特定方法的描述信息、建模過程的管理信息(如版本控制、開發狀態等)、附加工具的使用信息(如代碼生成工具),或者是用戶自定義連接的信息。
標記值用字符串表示,字符串由標記名、等號和值構成,一般表現形式為“{標記名=標記值}”。各種標記值被規則地放置在大括弧內。如圖2-32所示,它是關于一個版本控制信息的標記值。

圖2-32 版本信息的標記值
3.約束(Constraint)
如果需要對UML構造塊的語義進行擴展,就可以使用約束機制,這種機制用于擴展UML構造塊的語義,允許建模者和設計人員增加新的規則和修改現有的規則。約束可以在UML工具中預定義,也可以在某個特定需要的時候再進行添加。約束可以表示UML規范中不能表示的語義關系。

圖2-33 約束條件示例
約束使用大括號和大括號內的字符串表達式來表示,即約束的表現形式為“{約束的內容}”。約束可以附加在表元素、依賴關系或注釋上。例如,“{信息的等待時間小于10秒鐘}”。
圖2-33顯示了學生類和大學生類之間的關聯關系。但是,要具體地表達就需要定義一定的約束條件。例如只有學生被大學錄取才能被稱為大學生、大學生應該是在校學習的。在定義了這些約束以后,分別加入到對應的元素中。這些約束信息能夠有助于對系統的理解和準確地應用系統,因此,在定義約束信息時,應盡可能準確地去定義這些約束信息。一個不佳的約束定義還不如不去定義。
在上述情況下,約束是在圖中直接定義的,不過,前文也提到,約束是可以被預定義的,它可以被當作一個帶有名稱和規格說明的約束,并且在多個圖中使用。要想進行這種定義,就需要依賴一種語言來表達約束,這種語言被稱為對象約束語言(Object Constraint Language,OCL)。下一小節來介紹這種對象約束語言。
- Raspberry Pi for Secret Agents(Third Edition)
- React.js Essentials
- C語言程序設計案例式教程
- Visual C
- Kinect for Windows SDK Programming Guide
- 基于Swift語言的iOS App 商業實戰教程
- Spring Boot企業級項目開發實戰
- Scala程序員面試算法寶典
- Java程序設計案例教程
- Zabbix Performance Tuning
- Mastering Apache Storm
- Python計算機視覺和自然語言處理
- C++ System Programming Cookbook
- 零基礎輕松學C++:青少年趣味編程(全彩版)
- Web程序設計:ASP.NET(第2版)