UML 상태차트


1. 계층형 상태 / Hierarchical States

- 계층형으로 중첩된 상태

- 복합상태(composite state) : 다른 상태를 포함하는 상태

- 단순상태(simple state) : 내부구조가 없는 상태

- 직접하위상태(direct substate) : 하위상태가 상위상태에 직접 포함돼 있을 경우

- 추이적 중첩 하위상태(transitively nested substate) : 하위상태가 또 다른 하위상태 안에 포함된 경우

- 모든 상태머신에는 항상 최상위 상태(top state) 존재

- 계층형으로 상태를 분해하는 것은 비헤비어를 공유하고자 만듬, 하위상태는 상위상태와의 차이점만을 정의

- 하위상태는 상위상태에 있는 공용 비헤비어를 쉽게 재사용, 처리할 이벤트를 무시하면 상위수준 상태에서 이를 자동으로 처리

- 복잡함을 완화시키는 강력한 고전 기법인 추상화


2. 비헤비어 상속 / Behavioral Inheritance

- 계층형 상태는 단순히 "다른 의미없이 중첩된 상태머신을 한데 모아놓은 것"이 아니다

- 중첩된 상태 역시 "이벤트가 몇몇 하위상태에 적용되는 것을 그림을 통해 훌륭하게 단순화한 것" 이상이다

- 상태중첩은 하위상태가 상위상태를 비롯한 조상상태로부터 상태 비헤비어를 상속하도록 한다

- 비헤비어 상속은 하위상태와 상위상태의 관계

- 비헤비어 상속은 HSM의 효율적 활용과 비헤비어 재사용에 필수적인것, QP에 초석


3. 직교영역 / Orthogonal Region

- 계층형 상태분해는 exclusive-OR 분해

- AND 분해는 복합상태가 2개 이상의 직교영역을 둘 수 있으며, 이러한 복합상태 안에 있다는 것은 복합상태에 속한 모든 직교영역 안에 동시에 위치한다는 것을 나타낸다는 것을 의미

- 시스템은 비헤비어를 독립적으로 활성화 되는 여러 부분으로 나눌 경우, 직교영역은 상태의 수가 폭발적으로 증가하는 문제를 해결

- 직교영역은 근사적으로 직교할 뿐이며 완전히 독립적이지는 않다

- 따라서 UML 상태차트는 직교영역에 비헤비어를 교환하고 동기화하는 많은 방법을 제공

- 직교영역은 실행의 독립성을 의미하지만, UML 명세는 각 직교영역마다 실행 스레드를 따로 두도록 요구하고 있지는 않다. 오히려 직교영역은 같은 스레드에서 수행되는 경우도 많다


4. 진입액션과 탈출액션 / Entry Action and Exit Action

- 상태의 모든 진입액션과 탈출액션은 그 상태에 들어오고 나가는 방법과는 관계없이 실행 : Moore Automata 처럼 동작

- 생성자와 소멸자처럼 초기화 / 소멸을 할 수 있는 확실한 수단

- 진입액션 : 상태에 들어가면 항상 자동으로 실행, 상태의 동작조건이나 고유성을 결정


5. 전이 실행 시퀀스 / Transition Execution Sequence

- HSM에서는 둘 이상의 상태가 동시에 활성화될 수 있다.

- 상태머신이 복합상태에 내부의 단순상태 안에 있고, 이 복합상태도 역시 상위수준의 복합상태 안에 있는 경우, 직간접적으로 이 단순상태를 포함하고 있는 모든 복합상태는 활성상태가 된다.

-  상태형상 : 몇몇 복합상태는 직교영역을 가지고 있을 것이기 때문에, 현재 활성상태는 실제로 루트에 있는 하나의 최상위 상태부터 최하위에 있는 간단한 상태 여럿으로 이뤄진 트리로 표현, 이런 상태트리를 상태형상

- Exit from to current state

- Action

- Enter to the next state

- 소스상태형상의 탈출액션에서 현재 활성상태에 중첩된 모든 상태를 빠져나와야 하지만, 소스상태와 타겟상태의 최소공통조상에서 빠져나와서는 안된다


6. 내부전이

- 실행할 내부 액션 몇 가지만을 발생시키고, 상태전이를 유발하지 않는 경우

- 진입액션과 탈출액션을 제외하면 내부전이는 자기전이(self transition)와 같다


7. 의사상태 / Pseudostate

- 상태차트는 도식적인 형태로 시작했기 때문에 다이어그램에서 일반적인 상태 말고도 몇몇 노드를 이용하면 다양한 기능을 구현하거나 축약해서 표기하는데 효과적이라는 사실이 입증됐다. 이 노드를 의사상태라 한다

- 시스템이 일시적으로 머무르게 되는 상태머신 그래프의 여러 노드를 아우르는 추상적 개념

- 초기 의사상태 : 검은점으로 표시하며 기본전이의 소스

- 얕은 이력 의사상태 : H 원문자로 표시하며 복합상태가 포함하고 있는 상태 가운데 가장 최근에 활성화된 하위상태를 간략히 나타내는 표기법

- 깊은 이력 의사상태 : H* 원문자로 표시하며 의사상태를 직접 포함하고 있는 복합상태의 최근 상태형상 전체를 나타낸다는 점이 다르다

- 결합 의사상태 : 수직막대로 표기하며 서로 다른 직교영역에 있는 소스 점으로부터 나온 몇 개의 전이를 병합

- 분기 의사상태 : 수직막대로 표기하며 서로 다른 직교영역으로 들어가는 2개 이상의 전이로 나눈다

- 연결 의사상태 : 검은점으로 표기하며 여러 전이를 연결하는 자유로운 용법을 갖고 있는 점

- 선택 의사상태 : 반원이나 마름모로 동적인 조건 분기에 쓰임


8. 정교한 이벤트 처리

- SingleEvent : 특정한 비동기 신호( 신호의 이름 '(' 쉼표로 구분한 매개변수 목록 ')' ), FSM에서도 쓰였고 가장 많이 쓰이는 이벤트

- TimeEvent : 지정한 제한시간의 만료를 모델링, after + 시간의 길이

- CallEvent : 지정한 작업을 동기적으로 호출하라는 요청 작업이름'(' 쉼표로 구분한 매개변수 목록')'

- ChangeEvent : 명시적 불린식이 참일 때 발생하는 이벤트를 모델링 when + 불린식

- 다형성 이벤트 촉발 : 주어진 신호 이벤트가 촉발한 전이는, 원래 이벤트에서 직간접적으로 파생된 하위이벤트로도 촉발할 수 있다

- 이벤트 지연에 관한 구문도 제공


9. 의미와 표기법

- 상태차트는 복잡한 시스템을 그림으로 표현한 형식

- UML상태차트의 표기법은 많은 양의 텍스트 정보를 요하기 때문에 완전히 도식적이지는 않다

- 액션과 가드표현식의 정확한 문법이 UML 명세에 정해지지 않음

- UML 상태차트 표기법이 특정 프로그래밍 언어에 많이 의존한다는 것


10. 상태차트와 플로우차트

- UML명세에서는 상태머신 패키지에 행동 그래프를 포함

- 행동그래프는 개선된 플로우차트


11. 상태차트와 코드자동생성

- 상태차트를 지원하고 현재 출시도 있는 몇 가지 CASE툴

- Statemate and Rhapsody www.ilogix.com

- Rational Suite Development Studio Real-Time www.rational.com

- BetterState www.wrs.com

- Stateflow www.mathworks.com

- VisualState www.iar.com

- ObjectGeode www.telelogic.com


참조문헌 : 실시간 임베디드 퀀텀 프로그래밍 (원서:Pratical Statecharts in C/C++)

Posted by 용학도리
,