실제 세계에서는 어떤 사항이 종종 동시에, 그리고 예기치 않게 발생합니다. "발생하는 어떤 사항"을 '이벤트'라고 합니다.
상태 머신 관계에서는 이벤트가 상태 전이를 트리거할 수 있는 자극 발생을 모델링합니다. 이벤트에는 신호, 호출, 시간 흐름 또는 상태 변경이 포함됩니다. 이벤트는 동기 또는 비동기 이벤트가 될 수 있습니다.
'신호'는 두 인스턴스 사이의 비동기 자극 스펙을 표시하는 이벤트의 유형입니다.
이벤트는 외부 또는 내부 이벤트가 될 수 있습니다. 외부 이벤트는 시스템과 해당 액터 사이에 전달되는 이벤트입니다. 내부 이벤트는 시스템 내에서 활성 상태인 오브젝트 사이에 전달되는 이벤트입니다. 네 가지 유형의
이벤트인 신호, 호출, 시간 흐름 및 상태 변경이 있습니다.
신호는 한 오브젝트가 비동기식으로 디스패치(전달)한 후 다른 오브젝트가 수신(포착)하는 오브젝트를 표시합니다. 예외는 신호 종류의 예입니다.
신호에 인스턴스가 수반될 수 있습니다(인스턴스가 일반적으로 명시적으로 모델링되지는 않음). 신호는 일반화 관계에 관련되어 이벤트 계층 구조의 모델링이 가능하도록 할 수 있습니다.
신호에는 속성 및 오퍼레이션이 수반될 수 있습니다. 신호 속성은 해당 매개변수로 제공됩니다.
신호는 상태 머신에서의 상태 전이 조치로 보내거나 상호작용에서의 메시지 송신으로 보낼 수 있습니다. 오퍼레이션 실행으로도 신호를 보낼 수 있습니다. 클래스나 인터페이스를 모델링할 때 요소의 동작을 지정하는 중요한
파트는 해당 오퍼레이션으로 보낼 수 있는 신호를 지정하는 것입니다. 송신할 수 있는 이벤트 및 오퍼레이션 사이의 관계는 <<send>>로 스테레오타입화된 종속성 관계를 사용하여 모델링할 수
있습니다.
신호와 같이 이벤트는 신호의 발생을 표시하며 호출 이벤트는 오퍼레이션의 디스패치를 표시합니다. 두 경우 모두, 이벤트는 상태 머신에서 상태 전이를 트리거할 수 있습니다.
반면 신호는 비동기 이벤트이지만 호출 이벤트는 일반적으로 동기 이벤트입니다. 즉, 오브젝트가 다른 오브젝트에 대해 오퍼레이션을 호출할 경우 오퍼레이션이 완료될 때까지 송신자에서 수신자로 제어가 전달되었다가 그 후에
다시 송신자에게 제어가 리턴됩니다. 호출 이벤트 모델링은 신호 이벤트와 같은 방법으로 시각화됩니다. 두 경우 모두, 이벤트는 상태 전이의 트리거처럼 매개변수와 함께 표시됩니다.
호출 이벤트와 신호 이벤트를 구별하기 위한 시각적 단서는 없지만, 수신자 클래스에서 차이가 표시됩니다. 호출 이벤트를 처리하는 오퍼레이션을 선언하기 때문입니다. 신호의 경우에는 신호가 트리거하는 상태 머신에 전이가
발생할 것입니다.
시간 이벤트는 시간 흐름을 표시합니다. 시간 이벤트는 공통 시계 메커니즘을 사용하는 시스템의 시간 종속 파트를 동기화하는 데 사용됩니다. 변경 이벤트는 시스템 상태나 특정 조건의 만족도의 변경을 표시합니다.
신호 및 호출 이벤트에는 최소 두 개의 오브젝트(송신자 및 수신자)가 포함됩니다. 신호가 송신될 경우 송신자는 신호를 디스패치한 후 수신자로부터의 리턴을 기다리지 않고 제어 플로우에 따라 계속합니다. 이는 송신자가
제어 플로우 재개 이전에 수신자 응답을 기다리는 오퍼레이션 호출 시맨틱과 대조적입니다. 이와 같은 이유로, 오퍼레이션은 일반적으로 "차단" 동작(다른 사항이 발생하지 못하도록 차단하거나 금지하는 동작)을 표시하는
데 사용되고 신호는 비차단 동작을 표시하는 데 사용됩니다.
한 오브젝트가 오브젝트 세트에 신호를 송신하는 조치를 "멀티캐스팅"이라고 하며 수신자 세트를 보유하는 컨테이너에 신호를 송신하여 표시됩니다. 브로드캐스팅은 시스템의 모든 오브젝트에 신호를 보내는 조치로, 시스템을
전체적으로 표시하는 오브젝트에 신호를 보내어 표시합니다. 이 "시스템 오브젝트"는 다시 신호가 시스템에서 적절한 모든 오브젝트에 송신되도록 하는 메시지 분배 메커니즘을 실현합니다.
|