類圖::添加操作和方法

看到標題,也許有人會問,操作和方法不是一回事么?還真不是一回事。

操作

操作指明了目標對象狀態的轉換或返回給操作調用者值的查詢。它有名稱和參數列表,包括返回參數。操作指定了行為的結果,而不是行為本身,行為可以是一個方法,一次狀態機轉換或其他。

方法

方法是一個過程,它實現了一個操作,它有一個演算法或過程描述,調用如果解析為一個方法,將導致該過程被執行。

以上是ULM2.0對操作的方法的說明。你看懂了么,反正我是琢磨了好一會。那我就舉個例子吧

說有一個駕駛者基類,它有有兩個派生類,分別是車主和小偷。駕駛者類聲明了一個啟動汽車的操作,車主類使用(實現)的方法是擰車鑰匙,小偷類使用(實現)的方法是直接接發動機電源線(電影里常有的)。

怎麼樣,好點沒,下面繼續今天的話題。

屬性窗口的打開方法:

  1. 雙擊類圖中的對應類框圖,選擇【General】以後,點擊【Operation】按鈕。

2.從模型樹中選擇對應的類節點,打開上下文菜單並選擇【Operations...】菜單項。

無論哪種方法都可以打開下面的操作設定對話框。嚴格講這並不是操作自己的對話框,而是屬性和操作共同的對話框。本文只關注操作部分。

添加新操作的操作主要是在紅綠藍三個矩形框中進行的。和上篇文章一樣我們在這裡只說明有(zhi)關(dao)的項目。

基本項目

基本項目通過紅框中的列表控制項來設置。

Name:變數名,可以自由輸入文本。

Parameters:在參數設定部分詳細說明,此處省略。

Retun Type:數據類型,可以自由輸入文本,也可以點從下拉菜單中選擇。在下拉菜單的最下面,還有一個【Select Type...】選項,提供了從工程中選擇類型的功能。但是選擇的結果也只是作為文本保存,起到的作用僅限於輸入輔助。這一點和屬性類型一樣。

Scope:設定操作的可視性。從下拉列表中選擇,一共有四個選項:Public/Protected/Private/Package。Package也是可選的,表示也沒有問題。但是在生成代碼時當作Public處理。

Stereotype:可以設定一些分類信息,比如property set,property get,或者constructor等。

擴展項目

操作列表中有操作被選中時,可以設定該操縱的擴展屬性。

Concurrency:用於自定操作的並發屬性。可能的選項有:

  1. sequential:同時只能有一個調用發生。如果並發調用發生,則結果不保證。

  2. guarded:允許並發調用發生,但同時只允許一個調用執行。

  3. concurrent:允許並發調用發生,並保證可以正確地並發執行。

Virtual:用於指定抽象操作(虛函數)。

Static:表明該操作是類操作(靜態函數),而非實例操作。

參數設定項目

參數定義主要是通過藍框中的【Parameters】表單來進行的。可以定義多個參數,並設定他們的屬性。方法和類設定屬性的方法基本一致,此處省略。

我們試著為Person類追加了兩個方法,一個是靜態方法GetMarryAge,一個是虛函數Show。Person類變成了如下的樣子。

可以看到靜態方法GetMarryAge的下面有一條橫線,而Show操作被表示成斜體。這就是UML中靜態方法和抽象操作的表達方式。

如果這還不夠,還可以再往前走一步,生成代碼。在Person類上點擊滑鼠右鍵調出上下文菜單選中【Code Engineering】-【Generate

Code】可以調出如下的生成代碼對話框。

在選擇路徑之後,按下【Generate】按鈕,我們既可以得到以下代碼。

首先是頭文件

然後是cpp

不做重複的事情,這才是正確的方法應該有的樣子。


推薦閱讀:

設計模式剖析
(翻譯)14.4 ProtocolStateMachines
OOD 高頻面試題 | 如何設計一個ATM
EA&UML日拱一卒--序列圖(Sequence Diagram)::並行和臨界區
(翻譯)14.1 Summary

TAG:UML建模 | 面向對象編程 | 面向對象分析與設計 |