在現實生活中,許多事物經常同步發生且無法預期。「發生的事物」就稱為「事件」。
在狀態機的理論中,事件模擬刺激因素的出現,可能觸發狀態轉移。事件包括信號、呼叫、時間進程或狀態變更。事件可能同步或非同步發生。
「信號」是一種事件,代表兩個事例之間非同步刺激因素的詳細說明。
事件可能發生在外部或內部。外部事件是指在系統和參與者之間傳遞的事件。內部事件是指存在系統內的各個物件之間傳遞的事件。有四種事件:信號、呼叫、時間進程及狀態變更。
信號代表由一個物件非同步地分派(擲出)再由另一個物件接收(擷取)的物件。異常狀況就算是一種信號。
信號可能有實例,但通常不會明確表現這些實例。信號可能涉入一般化關係,從而形成事件的階層。
信號可能有屬性和操作。信號的屬性充當信號的參數。
狀態機的狀態轉移或互動中傳送訊息的動作,皆可能導致傳送信號。執行操作也可能傳送信號。在建立類別或介面的模型時,指定元素行為的重點在於指定可供操作傳送的信號。在操作及其可傳送的事件之間,兩者的關係以相依關係來模擬,模板化以
<<send>> 表示。
正如同信號事件代表出現信號一樣,呼叫事件代表分派操作。不論何者,事件都可能在狀態機內觸發狀態轉移。
信號是非同步事件,但呼叫事件通常有同步特性。這表示當物件在另一個物件上呼叫操作時,控制權會從傳送端移轉至接收端,等到操作完成時,控制權才迴歸傳送端。呼叫事件和信號事件的視覺化建模方式相同。不論何者,事件都連同參數一起出現,顯示為狀態轉移的觸發事件。
雖然從外觀上無法區別信號事件和呼叫事件,但差異會在接收端類別上浮現,因為此類別會宣告處理呼叫事件的操作。以信號而言,狀態機內會發生由信號觸發的轉換現象。
時間事件代表時間進程。時間事件會以一般時鐘機制來同步化系統中有關時間的部份。變更事件代表系統狀態發生變化或滿足某些條件。
信號事件和呼叫事件至少會牽涉到兩個物件:傳送端與接收端。信號送出之後,傳送端會分派信號,然後就繼續執行本身的控制流程,不會枯等接收端回覆。這與操作呼叫的語意完全不同,其中,傳送端會等待接收端回覆之後,才繼續執行控制流程。因此,通常以操作來表示「阻擋」行為(阻擋或防止其他事物發生的行為),而以信號來表示非阻擋行為。
一個物件傳送一個信號給一群物件的動作稱為「多重播送」,外觀上以一個信號傳送至一個含有一群接收端的儲存器來表示。廣播是指一個信號傳送給系統中所有物件的動作,外觀上以一個信號傳送給一個物件來表示,此物件代表整個系統;此「系統物件」進一步實現訊息分送機制,確保信號傳送至系統中所有適當的物件。
|