본문 바로가기

프로그래밍

State Machine Diagram 에 대한 설명

모든 객체들은 생성부터 삭제되기까지 유한 개의 상태를 지니며 객체의 상태를 표현하기 위해서 사용되는 것이 State Machine Diagram(State Chart) 입니다. 객체의 상태전이(상태를 바꾸는 행동)을 나타내기 위해서 SMD에는 두 개의 키워드가 있습니다. 

  1. State: 객체의 상태
  2. Transition: 객체의 상태를 바꾸는 event


State

State를 나타내는 방법은 두 가지가 있습니다. 단순히 상태만 나타내는 경우와 상태에 들어가기 전, 후, 중간에 하는 활동을 추가하는 경우입니다. 

  • entry/Activity(): Object가 S 상태에 들어왔을 때 Activity()를 실행합니다. 
  • exit / Activity(): Object가 S 상태서 나갈 때 Activity()를 실행합니다. 
  • do / Activity(): Object가 S 상태에 머무는 동안에 실행합니다. 

State의 변화

State가 $S$에서 $T$로 변하는 것을 그림으로 살펴보겠습니다. 

  • Event : Event가 발생했을 때, S에서 T로 상태가 변경됩니다. 
  • Guard :
    • 거짓:  Guard가 거짓이라면 상태변화가 일어나지 않습니다. 
    • 참   : 현재상태의 모든 활동이 멈추고 종료와 관련된 활동이 실행됩니다. 마지막으로 T로 이동하게 됩니다.  
  •  Activity :  Action에 대한 수열이 주어졌을 때, 차례로 실행합니다. 

Transition

내부전이: 이벤트 발생 시 상태를 변경하지 않고 현재 상태에서 Activity를 실행합니다. 

외부전이: 이벤트 발생 시 현재 상태에서 벗어나고 Activity를 실행합니다. 

내부전이 / 외부전이

e1이 발생한다면 A1 활동을 버리고 S2 상태로 바뀝니다. 
e1이 발생하고 g1이 참이라면 A1 활을 버리고 S2 상태로 바뀝니다. 
A1 활동을 완료하면 S2로 상태가 바뀝니다. 
A1 활동을 완료하고 g1이 참이면 S2로 상태가 바뀝니다. 
A1 활동을 완료하고 g1이 거짓이라면 상태가 바뀌지 않습니다. 

예시를 통한 설명

 

첫 번째는 S1 상태에서, event가 발생했을 때, S2 상태로 전이되는 것 입니다. 

시작
Sequence 종료
State Machine 종료

 

상태 변화에 따른 x 값 변화

Event x 값
S1 entry 진입 4
e 발생. exit  5
x = x * 2 10
S2 entry 진입 11

Composite State

Composite State는 내부에 substates를 포함합니다. 

 

실행 순서

  1. S의 exit이 실행됩니다.
  2. 내부에서 외부로 S를 둘러싸고 있는 Composite State의 Exit을 실행합니다. 
  3. 외부에서 내부로 시작 지점까지 Coposite State의 Entry를 실행합니다.

Concurrent substates

 


History State

내부에서 이벤트의 발생으로 외부로 나가게 되었을 때, 이전 상태로 돌아가기 위해서 사용되는 방법

 

규칙)

1. Composite state에 들어가지 않았을 때는 H의 방향으로 움직이면 된다. 
2. Composite state에 들어갔는데 외부로 나가게 되었을 때, 마지막 State에서 실행한다. 
   shallow history - H와 동일한 Level의 시작점으로 이동
   deep history     - external transition 전 마지막 state에서 시작. 

 

Shallow History
Deep History

Shallow/Deep History에 대한 예시를 살펴보겠습니다. 


1. 내부에 들어갔을 때 Shallow history

내부에 들어갔을 때 Shallow history


2. 내부에 들어갔을 때 Deep History 

내부에 들어갔을 때 Deep History 


3. 내부에 들어가지 않았을 때, Shallow history

내부에 들어가지 않았을 때, Shallow history


4. 내부에 들어가지 않았을 때, Deep history

내부에 들어가지 않았을 때, Deep history