UML作業第五次:分析系統,繪制狀態圖


 

一、學習小結

1.簡單狀態:使用([*])開始和結束狀態圖;使用-->添加箭頭。

@startuml

[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string

State1 -> State2
State2 --> [*]

@enduml

2.合成狀態:一個狀態也可能是合成的,必須使用關鍵字state和花括號來定義合成狀態。

@startuml
scale 350 width
[*] --> NotShooting

state NotShooting {
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

state Configuring {
  [*] --> NewValueSelection
  NewValueSelection --> NewValuePreview : EvNewValue
  NewValuePreview --> NewValueSelection : EvNewValueRejected
  NewValuePreview --> NewValueSelection : EvNewValueSaved
  
  state NewValuePreview {
	 State1 -> State2
  }
  
}
@enduml

3.長名字:使用關鍵字state定義長名字狀態。

@startuml
scale 600 width

[*] -> State1
State1 --> State2 : Succeeded
State1 --> [*] : Aborted
State2 --> State3 : Succeeded
State2 --> [*] : Aborted
state State3 {
  state "Accumulate Enough Data\nLong State Name" as long1
  long1 : Just a test
  [*] --> long1
  long1 --> long1 : New Data
  long1 --> ProcessData : Enough Data
}
State3 --> State3 : Failed
State3 --> [*] : Succeeded / Save Result
State3 --> [*] : Aborted
 
@enduml

4.並發狀態:用-- or ||作為分隔符來合成並發狀態。
@startuml
[*] --> Active

state Active {
  [*] -> NumLockOff
  NumLockOff --> NumLockOn : EvNumLockPressed
  NumLockOn --> NumLockOff : EvNumLockPressed
  --
  [*] -> CapsLockOff
  CapsLockOff --> CapsLockOn : EvCapsLockPressed
  CapsLockOn --> CapsLockOff : EvCapsLockPressed
  --
  [*] -> ScrollLockOff
  ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
  ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}

@enduml

5.箭頭:

使用->定義水平箭頭,也可以使用下列格式強制設置箭頭方向:

  • -down-> (default arrow)
  • -right-> or ->
  • -left->
  • -up->
  • 可以用首字母縮寫或者開始的兩個字母定義方向(如, -d--down--do-是完全等價的)。
  • @startuml
    
    [*] -up-> First
    First -right-> Second
    Second --> Third
    Third -left-> Last
    
    @enduml

6.注釋:可以用 note left ofnote right ofnote top ofnote bottom of 關鍵字來定義注釋;還可以定義多行注釋;以及浮動注釋。

@startuml

[*] --> Active
Active --> Inactive

note left of Active : this is a short\nnote

note right of Inactive
  A note can also
  be defined on
  several lines
end note

@enduml

@startuml

state foo
note "This is a floating note" as N1

@enduml

 

 
        

7.更多注釋:可以在合成狀態中放置注釋。

@startuml

[*] --> NotShooting

state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle
  state "Configuring mode" as Configuring
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

note right of NotShooting : This is a note on a composite state

@enduml

8.顯示參數:

skinparam改變字體和顏色。

可以在如下場景中使用:

還可以為狀態的構造類型指定特殊的字體和顏色。

@startuml
skinparam backgroundColor LightYellow
skinparam state {
  StartColor MediumBlue
  EndColor Red
  BackgroundColor Peru
  BackgroundColor<<Warning>> Olive
  BorderColor Gray
  FontName Impact
}

[*] --> NotShooting

state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle <<Warning>>
  state "Configuring mode" as Configuring
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

NotShooting --> [*]
@enduml

二、例題鞏固學習

1.以《電梯控制》系統、《銀行賬戶》系統為例,分析系統中的狀態及狀態轉換。

電梯狀態機圖:
電梯存在待載、上升、下降和樓間停4種基本狀態。電梯無人承載時停在某樓層,處在待載狀態。當有人進人電梯,並且當前樓層比目標樓層低,則電梯上升。如果當前樓層比目標樓層高,則電梯下降。在上升或下降狀態,如果到了某個目標樓層,電梯運行停止,進人樓間停狀態,等待人的進出。如果所有人都在本層下完,電梯回到待載狀態。如果電梯中還有人,則判斷目標樓層是否比當前樓層高,如果高於當前樓層則上升,如果低於當前樓層則下降。

銀行賬戶狀態機圖:
銀行賬戶存在空額有余額和負債三種狀態。初建立的賬戶沒有存款,處在空額狀態。賬戶在空額狀態時,如果向其中存款,進人有余額狀態,如果從賬戶取款,則進人負債狀態。賬戶在有余額狀態時,如果向賬戶存款,余額增加,但仍然還在有余額狀態。如果從賬戶取款,若取款額小於余額,賬戶仍在有余額狀態;若取款額等於余額,則取款后賬戶回到空額狀態;若取款額大於賬戶余額,則取款后賬戶進人負債狀態。賬戶處於負債狀態時,如果取款,余額減少,但仍然處在負債狀態。如果給賬戶存款,當存款額小於負債額,則賬戶仍然在負債狀態;如果存款額等於負債額,則存款后賬戶回到空額狀態;如果存款額大於負債額,存款后賬戶進入有余額狀態。

2.腳本及狀態圖

電梯控制:

@startuml
[*] --> 待載

待載 -up-> 上升 : 進入[目標樓層>當前樓層]/關門上行
上升 -down-> 樓間停 : [進人/出人]/停機開門

待載 -down-> 下降 : 進入[目標樓層<當前樓層]/關門下行
下降 -up-> 樓間停 : [進人/出人]/停機開門

樓間停 -up-> 上升:[目標樓層>當前樓層]/關門上行
樓間停 -down-> 下降:[目標樓層<當前樓層]/關門下行
樓間停 -left-> 待載:[無人]/關門
@enduml

銀行賬戶

@startuml
[*] --> 空額

空額 -down-> 有余額 : 存款/余額=余額+存款額
空額 -down-> 負債 : 取款[取款額<最大限額]/余額=余額-存款額

有余額 --> 有余額 : 存款/余額=余額+存款額
有余額 --> 有余額 : 取款[取款額<余額]/余額=余額-取款額
有余額 -right-> 負債 : 取款[取款額>余額]/余額=余額-取款額
有余額 -up-> 空額 : 取款[取款額=余額]/余額=余額-取款額

負債 --> 負債 : 取款[取款額<最大限額]/余額=余額-存款額
負債 --> 負債 : 存款[存款額<負債額]/余額=余額+存款額
負債 -left-> 有余額 : 存款[存款額>負債額]/余額=余額+存款額
負債 -up-> 空額 : 存款[存款額=負債額]/余額=余額+存款額
空額 -up-> [*]
@enduml

 

 

 

 
        
 
        

 



 
        
 
        
 
       


免責聲明!

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



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