[UML]UML系列——狀態機圖statechart diagram


系列文章

[UML]UML系列——用例圖Use Case

[UML]UML系列——用例圖中的各種關系(include、extend)

[UML]UML系列——類圖Class

[UML]UML系列——類圖class的關聯關系(聚合、組合)

[UML]UML系列——類圖class的依賴關系

[UML]UML系列——類圖class的泛化關系

[UML]UML系列——類圖class的實現關系Realization

[UML]UML系列——包圖Package

[UML]UML系列——活動圖activity  diagram

[UML]UML系列——時序圖(順序圖)sequence diagram

[UML]UML系列——協作圖(通信圖)collaboration diagram

引言

狀態機圖和順序圖、通信圖有哪些區別?

順序圖、通信圖:描述多個對象間的交互

狀態機圖:描述單個對象的狀態及引起狀態變化的原因

實例分析:大學生學籍管理系統

按國家招生規定錄取的新生,持錄取通知書,按學校有關要求和規定的期限到校辦理入學手續。因故不能按期入學者,應當向學校請假,假期一般不得超過2周。未請假、請假未准或者請假逾期者,除因不可抗力等正當事由意外,視為放棄入學資格。

新生入學后,學校在三個月內按照國家招生規定對其進行復查。復查合格者予以注冊,取得學籍。復查不合格者,學校區別情況予以處理,直至取消入學資格。

......

      學生有如下情況之一者,應予休學:

      (一)因傷病經學校指定醫院診斷,須停課治療、休養一學期1/3時間;
      (二)一學期請假缺課超過該學期總學時的1/3;
      (三)傳染性肝炎、肺結核等傳染性疾病;
      (四)因某種特殊原因,學校認為必須休學。

.....

     學生休學至少一學期,一般以一年為限。學生復學后,休學之前已記入成績檔案的考核成績繼續有效,並作為學籍處理依據.

     學生復學按下列規定辦理:
     (一)學生因傷病休學申請復學時,須持有二級甲等以上醫院診斷書,證明身體健康,並經學校指定醫院復查合格,方可復學;
     (二)學生休學期滿后應於學期的注冊期內持有關證明,經教務處核准后編入原專業相應班級選課學習;

........

  學生有下列情況之一者,應予退學:
(一)學生在讀期間,3次出現在一學期中取得的課程學分不足10學分(不含重修和補考學分;畢業學期除外;第一次提出警告,第二次提出退學警告,由教務處公布名單,院系負責通知學生家長);
(二)休學、保留學籍期滿,在規定期限內不辦理復學手續;
(三)休學累計滿二年,經復查不合格;
(四)因傷病需要休學,經學校動員后仍不辦理休學手續;
(五)經學校指定醫院確診患有疾病,或意外傷殘無法繼續在校學習;
(六)未請假離校連續2周末參加學校規定的教學活動;
 (七) 超過學校規定期限未注冊而又無正當事由;
(八)本人要求退學。

     學生在規定的學習年限(4年制3~6年,5年制4~7年)內修完本專業培養計划規定的全部教學環節,取得注冊專業規定的畢業學分,准予畢業,發給畢業證書。

用狀態機圖描述如下:

結論

部分對象的行為與其所處的狀態相關。通過分析對象的狀態及引起狀態轉變的原因,有利於尋找對象所處類的操作。

狀態機圖的作用:尋找類的操作。

狀態機圖的概念

一、狀態機圖的定義

狀態機圖描述了一個對象在生命周期內所經歷的各種狀態,以及引起狀態變化的事件。

二、狀態、事件、動作

1、狀態

狀態指對象的生命周期中滿足某些條件、執行某些活動或等待某些事件時的狀況或情況。

人:青年、中年、老年

電話機:通話、閑置

注意:狀態本質上就是對象屬性的值,狀態的變化就是屬性值的變化。

在由對象的全部屬性值集合所構成的笛卡爾積中,盡管每一個元素均可廣義地稱為對象的一個狀態,但軟件開發者需要認識的是這個笛卡爾積上的每一個等價集合,即使對象的操作呈現相同行為規則的屬性值的集合。把每一個等價集稱為對象的一紅狀態。

2、事件

引起狀態變化的事情。狀態的轉移是由事件觸發的。

3、動作的概念

動作說明了當事件發生時發生了什么行為。動作可由對象的操作和屬性構成。

狀態機圖的符號

一、狀態

狀態還可以添加活動。活動是在該狀態時要執行的動作。

活動的格式如下:[Entry|exit|do]/動作

活動有三個標准事件:

entry事件:進入該狀態時的特定動作(入口動作)。

exit事件:退出該狀態時的特定動作(出口動作)。

二、轉移

轉移描述對象在兩種狀態間的轉變。當某個特定事件發生並且滿足特定的條件,對象操作特定的動作,進入另一個狀態。

  • 源狀態
  • 目標狀態
  • 觸發事件
  • 監護條件
  • 動作

事件與動作

事件要求對象做某件事情,這個事情被稱為動作。動作改變了對象屬性的值,導致對象的狀態發生變化。

事件與動作既可用於轉移中,也可用於單獨的狀態中。

事件與動作出現的兩個位置:

一、事件

1、調用事件

調用事件代表對一個對象的操作的調用。

2、變化事件

變化事件是狀態中一個變化或某些條件滿足時的事件。使用when標識,其格式為:

when(邏輯表達式)/動作

3、時間事件

時間事件是經過一定的時間或者到達某個時間后發生的事件。時間事件使用after標識,其格式為:

after(時間表達式)/動作

at(時間表達式)/動作

事件實例:時間事件

 

狀態機圖:

 二、動作

1、動作的概念

動作說明了當事件發生時發生了什么行為。動作由對象的操作和屬性組成。

 2、基本動作類型

(1)entry(入口動作)

進入狀態時最先執行的特定動作,不帶條件與參數。格式為:entry/動作

(2)exit(出口動作)

退出該狀態時最后執行的特定動作,不帶條件與參數。格式為:exit/動作

公用電話的狀態機圖:

 

(3)do(內部活動)

用來指定處於某種狀態時發生的動作。在入口事件之后,出口事件之前執行的特定動作。

格式為:do/動作

如果內部活動正在進行,有一個轉移被觸發,此時內部活動會被終止,然后執行活動的出口動作。入口動作和戶口動作是不可終止的。

組成狀態

簡單狀態:A
組成狀態:B
子狀態:    C    D

為什么會出現子狀態?

對象a的全部狀態由屬性x、y的取值的排列組合形成。

但有時當x取一個值xk時,y的任何取值都沒有意義。

一、順序子狀態

如果一個組成狀態的子狀態對應的對象在其生命周期內的任何時刻都只能處於一個子狀態,也就是說子狀態機圖中多個狀態是互斥的,不能同時存在,這種子狀態被稱為順序子狀態或叫互斥子狀態。在順序子狀態中最多只能有一個初態和一個終態。

 二、並發子狀態

 有時組成狀態有兩個或多個並發的子狀態,此時稱組成狀態的子狀態為並發子狀態。並發子狀態能說明很多事發生在同一個時刻,為了分離不同的活動,組成狀態被分解成區域,每個區域都包含一個不同的狀態機圖,各個狀態機圖在同一時刻分別運行。

 前進和低速    前進和高速

后退和低速     后退和高速

實例分析:主體工程施工和水電工程施工

三、歷史狀態

 有時,當離開一個嵌套狀態后,又需要重新進入該嵌套狀態,但希望直接進入到上次離開嵌套狀態時的最后一個子狀態,而不想從該子狀態機圖的初始狀態進入。

歷史狀態,是一種歷史指示器,它允許組成狀態記住從該組成狀態發出的轉移觸發之前的最后一個子狀態。

實例分析:播放器中“繼續播放上次未完成的列表”功能

 

狀態機圖的Rose建模

一、新建狀態機圖

二、重命名狀態機圖並雙擊

三、添加狀態

四、設置狀態的名稱

方法:雙擊狀態

五、添加轉移

在兩個狀態之間拖動

六、設置事件、守衛條件、動作

七、設置狀態內部的動作

八、增加歷史狀態

總結

UML中最常見的圖就介紹到這里。通過本系列的學習,希望能幫到你。總之,分享是快樂的......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM