【StarUML】狀態圖


   狀態圖以可視化地方式將對象的各個生命周期展現出來,表現為一個個的狀態,狀態之間的流轉以及流轉觸發方式、觸發條件等。

  image

  例如此,有三個狀態,每個圓角矩形代表着一個狀態,狀態之間通過箭頭表示狀態流轉,箭頭上的文字說明表示流轉的觸發時間和條件。

  1、基本元素

      a、狀態(state)

          一個對象,在其生命周期里會執行很多的命令,將這些命令進行歸類,就成了一個個的狀態,當觸發了某些事件,一個狀態會流轉到下一個狀態。

          image
          這就代表着一個狀態。

    

    b、初態(initial)和終態(final)

        初態:狀態機的起點,它能流轉到別的狀態,別的狀態不能流轉到它。

        終態:狀態機的重點,代表着對象的聲明周期已經結束,只能由別的狀態流轉到它,它不能流轉到任何其他狀態。

        image

 

   c、流轉(Transitions)

       流轉即狀態之間的變化,在StarUML里用箭頭表示,觸發狀態的流轉一定是出現了某個事情,所以流轉箭頭上一定包含觸發事件,除此之外還會包含其他一些元素

       (1) 事件標識  它可以是一個信號、條件變化、時間表達式(調用事件(Call)、變化事件(Change)、時間事件(Time)和信號事件(Singal));

       (2) 警戒條件  當事件發生之后,並不是所有的情況,都會發生狀態流轉的,還需要滿足警戒條件,才能流轉

       (3) 結果 狀態流轉之后發生的事情(狀態流轉除了導致當前輸出的狀態變化,還會發生一些其他的結果,這里就是用於補充的)

        image

        一條流轉線上,可以增加多個,前提是 警戒條件和結果是一致的,如果不一致需要重新畫

       image

       添加多個事件的方法

       image

       添加結果的方法

       image

       添加警戒條件是在屬性里添加的

       image

  

    d、動作(State Action)

        動作分為進、出兩個動作,這是狀態機一個非常強大的地方,對象在進入某個狀態的時候,在進動作里初始化一些變量,構建該狀態中命令集合的運行環境,而在出動作里,可以打掃戰場,清理一些變量,與進動作相呼應

        image

       添加進出動作的方法:雙擊狀態名

       image


    e、自身轉移(Self-Transitions)

        狀態機中狀態的轉化中,還包含有自身狀態轉移

        image

        after 2 seconds 是事件,pull 是結果,其實pull 也可以放在waiting狀態中的進動作中,不過表意可能就沒有放在結果中那么好。

        image 

  

     f、進入節點(Entry Point)、退出節點(Exit Point)

       有的時候,對象沒有經過初始化,直接進入到某個狀態,叫做進入節點;

       與此相對應的是退出節點,一般用於針對異常情況退出。

      image


2、高級元素

    a、組合狀態(Composed State)

       組合狀態就是指狀態嵌套,一個狀態嵌套在另一個狀態里,模塊化設計中經常會用到這個。  

    image


    b、歷史狀態

      歷史狀態實際上不是一種狀態,而是一個邏輯,它的作用對象是組合狀態,當組合狀態中突然因為某個突發事件跳出了組合狀態,進入到外面的狀態,當再次進入到組合狀態的時候,不是從組合狀態的第一個狀態走起,而是從上次斷掉的狀態繼續往下走

     image

     如果在組合狀態”做飯”中的子狀態”做飯”執行的時候,突然累了,跳轉到”休息”狀態,當休息好了之后,從”休息”狀態跳回“做飯”狀態的時候,不需要重新開始,即不需要從“准備做飯”開始,而是從“做飯開始”。


    c、並發區域(Concurrent Regions)

        並發區域是針對於組合狀態的,對於狀態機來說,在一個時刻,對象只允許處於一種狀態,如果實際情況下出現兩種狀態同時運行,那么一般的做法是將兩個狀態合並成一個組合狀態,大狀態內部違背狀態機的唯一狀態的原則,以保證整個系統的遵守原則。並發區域由分叉引出,但不一定要由匯合結束。

       image


3、案例

    image

    image

  

   本文學習對象:https://blog.csdn.net/heshengfen123/article/details/9361959


免責聲明!

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



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