MBSE建模學習之五:交互和序列圖
交互(Interaction)
交互(Interaction)是一種具體的行為元素,它用對象之間消息傳遞的方式說明行為發(fā)生過程的順序和互相傳遞的信息。對交互進行說明的圖主要是序列圖(Sequence Diagram, 在UML標準中還有使用時間圖、通訊圖或交互概覽圖對其進行說明,SysML標準只使用序列圖)。
作為一種行為,交互也是具有行為的基本特征:具有輸入參數(shù)、返回參數(shù);它可以作為一個模塊(Block)或其它行為類目(BehavioredClassifier)的擁有行為(OwnedBehavior);它可以作為一個操作(Operation)、接收(Reception)的“方法”(Method);
和活動(Activity)一樣,交互同時也是一個模塊(Block)。一個復雜的交互行為可以進行分解。在上層的交互行為中,通過一個“交互使用”(InteractonUse)元素表示對下層或其它交互的調用。
作為行為,交互的發(fā)生一樣需要規(guī)定發(fā)生的語境(Context)。如果交互是某個模塊的擁有行為,則這個模塊是交互行為的語境;否則它自己是它的語境。說明交互的序列圖中的元素都是它的語境范圍內的元素。下面介紹序列圖中的生命線、消息等元素的時候,總是要涉及到代表交互的語境的模塊。
下面先看一個代表交互的序列圖,然后說明圖中元素的作用和意義。在這個圖中,上面的“汽車域”(域是擴展的“模塊”類型,代表特殊的模塊)是下面“啟動車輛黑盒”交互的語境(Context),因為“啟動車輛黑盒”交互是它的一個擁有行為。
生命線(Lifeline)
生命線元素代表模塊中的一個部件(或其它屬性)的實例,這個模塊是生命線所在的序列圖代表的交互元素所屬的模塊。在上面這個圖中,“HSUV: HybridSUV”是“啟動車輛黑盒”交互所屬的“汽車域”模塊的一個部件屬性;“driver: 司機”是“汽車域”的一個執(zhí)行者屬性。
生命線用一個下面有一條虛線的矩形框表示,矩形框稱作它的“頭”。這個虛線代表了生命線代表部件屬性中發(fā)生事件的順序,它總是從上到下的順序。
生命線的“頭”中顯示的文本的語法說明如下:
<lifelineident>::= ([<connectable-element-name>[‘[‘ <selector> ‘]’]] [:<connectable-element-type>][<decomposition>]) |‘self’
中文化的語法:([<名稱>[‘[‘<選擇器> ‘]’]] [: <類型 >][<分解>])|‘自己’
一般情況下,生命線像一個屬性一樣,顯示代表的屬性的名稱和類型,如“driver: 司機”,“driver”是代表屬性的名稱,“司機”是代表元素的類型。
“<選擇器>”是可選的部分,當屬性表示多個實例的時候,選擇器表示其中具體那個實例。如果沒有選擇器,表示可以是任何一個實例。例如對一個飛機的駕駛員屬性,可以用“pilot[主]:飛行員”表示飛機的主駕駛員。
可選的“<分解>”語法部分,表示這個生命線上發(fā)生的行為,可以在一個更具體的交互元素表示的序列圖中顯示。這個交互元素代表的行為屬于生命線的類型表示的模塊。在這個分解的交互元素的序列圖中,當前生命線類型元素將分解為它的組成部分代表的子生命線。用關鍵字 “引用”(或ref)+“交互元素名稱”表示。“strict”說明“分解交互元素”序列圖中的子生命線的都是“嚴格”順序。(有關分解的詳細說明,參見UML2.5標準)。
特殊情況下,生命線也可以直接表示交互所屬的那個模塊,而不是模塊中的屬性。這時候,用一個特殊的關鍵字“self”(MBSES軟件中可以用中文“自己”)表示。
消息(Message)
消息代表生命線之間的通信,從發(fā)送消息的生命線指向接收消息的生命線。消息可以直接連接到生命線上,或者連接到生命線上的執(zhí)行說明。
消息的發(fā)送和接收伴隨著生命線上行為事件的發(fā)生,在消息發(fā)送端表示發(fā)送事件的發(fā)生;接收端表示接收事件的發(fā)生。所以在消息的兩端會自動生成“消息發(fā)生說明”(MessageOccurrenceSpecification)元素。當消息的一端是連在序列圖的外框,或者“組合片段”(CombinedFragment)的邊框的時候,這個消息端上表示一個“門”(Gate),“門”表示交互元素或組合片段和外界的接口。
消息的“簽名”(signature)屬性是消息調用的操作(Operation,接收生命線的類型元素具有的操作),或者一個信號(Signale)。如果消息的通信類型是同步調用或異步調用,則簽名應該是接收生命線的一個操作;如果通信種類是異步信號,則簽名應該是模型中定義的一個信號元素。同時,作為接收的生命線的類型元素,也應該有一個對應的“接收”(Reception)。
在表示消息的連線上,會顯示說明消息的文本標簽。通用消息的語法表示為:
<message-label> ::= <request-message-label> |<reply-message-label> | ‘*’
它表示消息表示為“請求消息標簽”或“回復消息標簽”或一個“*”。“*”表示任何類型的消息。“請求消息標簽”或“回復消息標簽”的具體語法根據(jù)消息的類型確定。
“請求消息標簽”(除了回復消息以外其它各種消息)語法如下:
<request-message-label> ::= <message-name>[‘(‘[<input-argument-list>] ’)’]
中文的解釋:<消息名稱>([<輸入參數(shù)列表>])
如果消息有一個“簽名”屬性,則消息的名稱一定和“簽名”屬性對應的操作或信號的名稱相同。否則沒有限制。
可選的“輸入參數(shù)列表”是對應調用“簽名”的操作時輸入的參數(shù),或者對應“簽名”信號的屬性(或者說對應“接收”的輸入參數(shù),因為“信號”和“接收”是對應的)。每個輸入參數(shù)的語法是:
<input-argument> ::= [<in-parameter-name> ‘=’]<value-specification> | ‘-’
意義:[輸入參數(shù)名稱=]<值>|’-‘。輸入參數(shù)名稱是可選的,都顯示或都不顯示。“-”表示一個通配符,只是表示對應一個參數(shù),但沒有指定任何值。
例如一個用戶登錄身份驗證的消息表示為:
“login(userName=‘admin’,password= ‘1234567’)”
“login”對應系統(tǒng)的一個登錄的操作,使用’admin’用戶名及默認的’1234567’作為默認密碼進行系統(tǒng)的登錄。
如果是表示一般用戶的登錄,則傳遞的消息為:
“login(userName, password)”
這個消息表示使用用戶生命線代表實例的’userName’屬性值和’password’屬性值作為參數(shù)進行登錄。
“回復消息標簽”的語法為:
<reply-message-label> ::= [<assignment-target> ‘=’]<message-name>[‘(’ [<output-argument-list>] ‘)’] [‘:’<value-specification>]
中文:[<賦值目標]=<消息名稱>([輸出參數(shù)列表]):<返回值>
“回復消息”是操作執(zhí)行完,返回給調用生命線的數(shù)據(jù)。可選的“賦值目標”表示返回值賦值為調用生命線的某個屬性。完整的例子如下:
“area=returnArea(w=width:16):96”
這個返回消息表示返回值“96”賦給了調用生命線的“arean”屬性,同時,“w”作為輸出參數(shù)“width”對應的變量,賦值為16。這條消息通過輸出參數(shù)及返回參數(shù),返回了兩個值。
消息的分類,從兩個維度進行分類。一個是按兩端的事件,有以下四類(MessageKind):
“完整”:有發(fā)送事件和接收事件。
“丟失”:有發(fā)送事件、無接收事件。它表示接收事件的對象超出了模型的范圍,無法描述或無需描述。
“發(fā)現(xiàn)”:無發(fā)送事件、有接收事件。它表示發(fā)送事件的對象超出了模型的范圍,無法描述或無需描述。
“未知”:無發(fā)送事件、也無接收事件。這種消息在最終的模型中不應該出現(xiàn),只是作為臨時的數(shù)據(jù)出現(xiàn)。
消息按調用及返回的方式(MessageSort),有以下幾類:
“同步調用”:消息是一個調用操作的消息,而且是同步調用。“同步”的意思,是當調用的時候,調用過程會停下來,等待被調用操作返回消息才繼續(xù)下面的動作。例如一個“登錄”消息,調用“登錄”操作,必須等待登錄結果才繼續(xù)下面的操作。
“異步調用”:消息是一個調用操作的消息,而且是異步調用。“異步”的意思,是當調用的時候,調用過程不停下來,繼續(xù)執(zhí)行下面的動作。
“異步信號”:凡是消息簽名是“信號”,則消息就是“異步信號”。因為信號的發(fā)送,總認為是異步的。無論接收信號方是否處理信號完畢,都不影響發(fā)送方繼續(xù)其它工作。
“創(chuàng)建消息”:表示創(chuàng)建一個“生命線”的實例。創(chuàng)建消息指向被創(chuàng)建生命線的“頭”。
“刪除消息”:表示終止另一條生命線的消息。刪除消息總是指向生命線的末端,而且末端有一個“X”形的“刪除發(fā)生說明”事件。
“回復”:表示調用操作之后,操作回復給調用方的消息。
各種消息的線及兩端的表示符號都不同。詳細情況可以參見“智睿思維基于模型的系統(tǒng)工程軟件”中消息的表示方法,通過選擇消息的不同類型,消息的表示方法會變化。
執(zhí)行說明(ExecutionSpecification)
執(zhí)行說明表示生命線上一個行為(Behavior)或動作(Action)的執(zhí)行。執(zhí)行說明顯示為一個覆蓋生命線的一部分的一個細窄的矩形框。在矩形框的上下兩端分別表示行為或動作的開始和結束事件(用兩個執(zhí)行發(fā)生說明(ExecutionOccurenceSpecification)元素定義)
在UML中,執(zhí)行說明是一個抽象類。具體的執(zhí)行說明有兩種:
行為執(zhí)行說明(BehaviorExecutionSpecification):它表示一個行為的執(zhí)行。這個行為是執(zhí)行說明覆蓋生命線的類型的一個行為。
動作執(zhí)行說明(ActionExecutionSpecification):它表示一個基本動作(Action)的執(zhí)行。這個動作是執(zhí)行說明覆蓋的生命線的類型的行為中的一個動作。
交互使用(InteractionUse)
交互使用表示對另一個交互的引用。通過交互使用,可以對交互行為進行分解。
交互使用通過一個左上角有一個“引用”(ref)標簽的方框表示,框中可以簡單僅僅顯示引用的下級交互的名稱;也可以顯示被引用交互的完整表達式。
組合片段(CombinedFragment)
除了上述序列圖中的常用元素,對于復雜的行為過程,包括循環(huán)、并行、可選等,可以通過一個“組合片段”(CombinedFragment)來表示。
組合片段有多種操作類型。其中常用的如下:
可選(opt):代表一系列可選的事件,如果條件(稱為守衛(wèi))成立,那么就會在交互的執(zhí)行過程中發(fā)生。相當于程序語言中的“if”條件語句
備選(alt):代表兩個或多個可替換的系列事件,他們會在交互的一次執(zhí)行中發(fā)生。其中只能有一個條件為真的事件發(fā)生。相當于編程語言的“if..else if..else..”語句。
循環(huán)(loop):代表一系列事件,只要條件成立,可以在交互的一次執(zhí)行過程中發(fā)生多次。
并行(par):代表兩個或多個系列的事件,他們會在交互的執(zhí)行過程中并行進行。
其它操作符,請參考MBSES軟件的在線手冊。(請關注“智睿思維MBSE”公眾號,可以隨時查看在線幫助手冊)
狀態(tài)不變量(StateInvariant)
包含一個約束條件,這個約束條件是對生命線的屬性、當前范圍的變量,或者一個狀態(tài)的值進行約束。在約束條件滿足的時候,繼續(xù)下面的過程。
狀態(tài)不變量有兩種表示方式。一種是包含約束表達式的一個文本框(如下面的序列圖案例中所示);另一種是像一個狀態(tài)機圖中的狀態(tài)一樣的表示方式,中間是一個狀態(tài)的名稱。這個狀態(tài)對應生命線的一個狀態(tài)(這個狀態(tài)應該也有一個“狀態(tài)不變量”的約束屬性,表示當對象處于這個狀態(tài)時,某個屬性保持不變,所以這個約束才稱為“狀態(tài)不變量”,例如“{狀態(tài)==工作}”表示工作狀態(tài)的約束)。
序列圖案例
我們還是看一個應用了組合片段的序列圖案例。這個案例是我們在“MBSE建模學習之四:活動(Activity)及活動圖”中所舉案例“執(zhí)行霍曼轉移”活動的序列圖表示方式。霍曼轉移的原理見這篇文章。序列圖如下(來自《SysML精粹》圖7.1):
這個圖代表的交互元素是“執(zhí)行霍曼轉移,主成功場景”,它的語境(Context)是“DellSat-77衛(wèi)星”模塊。這個序列圖中,有三個生命線。“ps :推進子系統(tǒng)”和“mans :微型自主導航系統(tǒng)”是“DellSat-77衛(wèi)星”的直接部件屬性,而“fc:飛控計算機”是它的部件“通訊和數(shù)據(jù)處理子系統(tǒng)”的部件屬性。
在這個圖最外層是一個“并行”的組合片段,分成上下兩個并行執(zhí)行的過程(在活動圖中,對應一個分支節(jié)點,分出來兩個并行的流程)。
在上面的操作域中,又是一個“循環(huán)”組合片段,這個循環(huán)的組合片段中,不斷的根據(jù)當前高度計算新的軌道半徑,并把包含“當前軌道半徑”參數(shù)的消息發(fā)送回“fc:飛控計算機”。
在下面的操作域中是一個“可選”組合片段。這個“可選”組合片段的守衛(wèi)條件是“命令是否合法=true”,表示只有當?shù)竭_的命令判斷是合法的情況下,這個組合片段中的過程才會執(zhí)行。在執(zhí)行時,按從上到下順序,首先是發(fā)回一個“響應發(fā)送(響應)”的異步消息。然后,當系統(tǒng)時間到達“當前命令.執(zhí)行時間”約束規(guī)定的時間的時候,“fc:飛控計算機”向“ps:推進子系統(tǒng)”發(fā)送同步消息“點火推進器()”,使推進子系統(tǒng)點火。“ps:推進子系統(tǒng)”執(zhí)行“點火”的執(zhí)行說明有一個時間范圍約束,規(guī)定點火的持續(xù)時間(從開始到結束)應滿足“2~5分鐘”。這時候衛(wèi)星經過加速后進入一個橢圓的軌道。此時,最外層并行組合片段的上半部分過程一直在重新計算和更新當前軌道半徑。當這個軌道半徑符合狀態(tài)不變量規(guī)定的條件“{當前軌道半徑==當前命令.要求軌道半徑}”時,“fc:飛控計算機”向“ps:推進子系統(tǒng)”發(fā)送第二次點火消息,衛(wèi)星再次加速,進入預定的圓形軌道。
文章來源:智睿思維MBSE
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















