自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解析UML狀態(tài)機(jī)視圖狀態(tài)和轉(zhuǎn)換

開發(fā) 架構(gòu)
學(xué)習(xí)UML建模語言的過程中,你是否遇到過UML狀態(tài)機(jī)視圖方面的問題,你對(duì)它是否熟悉呢,這里就向大家介紹一下UML狀態(tài)機(jī)視圖的狀態(tài)和轉(zhuǎn)換。

本節(jié)和大家一起學(xué)習(xí)一下UML狀態(tài)機(jī)視圖的概念,這里主要介紹一下UML狀態(tài)機(jī)視圖的狀態(tài)和轉(zhuǎn)換兩部分內(nèi)容,相信通過本節(jié)的介紹你對(duì)UML狀態(tài)機(jī)視圖有一定的了解。下面是具體介紹。

UML狀態(tài)機(jī)視圖狀態(tài)和轉(zhuǎn)換

◆狀態(tài)

狀態(tài)描述了一個(gè)類對(duì)象生命期中的一個(gè)時(shí)間段。它可以用三種附加方式說明:在某些方面性質(zhì)相似的一組對(duì)象值;一個(gè)對(duì)象等待一些事件發(fā)生時(shí)的一段時(shí)間;對(duì)象執(zhí)行持續(xù)活動(dòng)時(shí)的一段時(shí)間。雖然狀態(tài)通常是匿名的并僅用處于該狀態(tài)時(shí)對(duì)象進(jìn)行的活動(dòng)描述,但它也可以有名字。

在狀態(tài)機(jī)中,一組狀態(tài)由轉(zhuǎn)換相連接。雖然轉(zhuǎn)換連接著兩個(gè)狀態(tài)(或多個(gè)狀態(tài),如果圖中含有分支和結(jié)合控制),但轉(zhuǎn)換只由轉(zhuǎn)換出發(fā)的狀態(tài)處理。當(dāng)對(duì)象處于某種狀態(tài)時(shí),它對(duì)觸發(fā)狀態(tài)轉(zhuǎn)換的觸發(fā)器事件很敏感。狀態(tài)用具有圓形拐角的矩形表示。如圖6-2所示。

 
圖6–2狀態(tài)

◆轉(zhuǎn)換

我們?cè)賮砜匆幌耈ML狀態(tài)機(jī)視圖的轉(zhuǎn)換。從狀態(tài)出發(fā)的轉(zhuǎn)換定義了處于此狀態(tài)的對(duì)象對(duì)外界發(fā)生的事件所做出的反應(yīng)。通常,定義一個(gè)轉(zhuǎn)換要有引起轉(zhuǎn)換的觸發(fā)器事件、監(jiān)護(hù)條件、轉(zhuǎn)換的動(dòng)作和轉(zhuǎn)換的目標(biāo)狀態(tài)。表6–2列出了幾種轉(zhuǎn)換和由轉(zhuǎn)換所引起的隱含動(dòng)作。

轉(zhuǎn)換的種類
描述
語法

入口動(dòng)作
進(jìn)入某一狀態(tài)時(shí)執(zhí)行的動(dòng)作
entry/action

出口動(dòng)作
離開某一狀態(tài)時(shí)執(zhí)行的動(dòng)作
exit/action

外部轉(zhuǎn)換
引起狀態(tài)轉(zhuǎn)換或自身轉(zhuǎn)換,同時(shí)執(zhí)行一個(gè)具體的動(dòng)作,包括引起入口動(dòng)作和出口動(dòng)作被執(zhí)行的轉(zhuǎn)換
e(a:T)[exp]/action

內(nèi)部轉(zhuǎn)換
引起一個(gè)動(dòng)作的執(zhí)行但不引起狀態(tài)的改變或不引起入口動(dòng)作或出口動(dòng)作的執(zhí)行
e(a:T)[exp]/action
表6–2轉(zhuǎn)換的種類及隱含動(dòng)作

◆1.外部轉(zhuǎn)換

我們先來看一下UML狀態(tài)機(jī)視圖中的外部轉(zhuǎn)換,它是一種改變活動(dòng)狀態(tài)的轉(zhuǎn)換,它是最普通的一種轉(zhuǎn)換。它用從源狀態(tài)到目標(biāo)狀態(tài)的箭頭表示,其他屬性以文字串附加在箭頭旁(如圖6–3所示)。
圖6–3外部轉(zhuǎn)換

◆2.觸發(fā)器事件

觸發(fā)器事件是引起轉(zhuǎn)換的事件。事件可以有參數(shù),以供轉(zhuǎn)換的動(dòng)作使用。如果一個(gè)信號(hào)有后代,那么信號(hào)中的任一個(gè)后代都可以引起轉(zhuǎn)換。例如,如果轉(zhuǎn)換將MouseButton作為觸發(fā)器,那么MouseButtonDown可以觸發(fā)這個(gè)轉(zhuǎn)換(如圖6–1)。

事件并不是持續(xù)發(fā)生的,它只在時(shí)間的一點(diǎn)上發(fā)生。當(dāng)一個(gè)對(duì)象接收到一個(gè)事件時(shí),如果它沒有空閑時(shí)間來處理事件,就將事件保存起來。對(duì)象一次只處理一個(gè)事件,在對(duì)象處理事件時(shí)轉(zhuǎn)換必須激發(fā),事件過后是不會(huì)被記住的(某些特殊的延遲事件除外,在觸發(fā)一個(gè)轉(zhuǎn)換前或處延遲被解除前,這類事件被保存起來)。如果兩個(gè)事件同時(shí)發(fā)生,它們被每次處理一個(gè)。沒有觸發(fā)任何轉(zhuǎn)換的事件被簡(jiǎn)單地忽略或遺棄,這并不是一個(gè)錯(cuò)誤,忽略不想要的事件要比詳細(xì)指明所有事件容易得多。

◆3.監(jiān)護(hù)條件

UML狀態(tài)機(jī)視圖中轉(zhuǎn)換可能具有一個(gè)監(jiān)護(hù)條件,監(jiān)護(hù)條件是一個(gè)布爾表達(dá)式。監(jiān)護(hù)條件可以引用對(duì)象的屬性值和觸發(fā)事件的參數(shù)。當(dāng)一個(gè)觸發(fā)器事件被觸發(fā)時(shí),監(jiān)護(hù)條件被賦值。如果布爾表達(dá)式的值為“真”,那么觸發(fā)事件即,使轉(zhuǎn)換有效。如果布爾表達(dá)式的值為“假”,則不會(huì)引起轉(zhuǎn)換。監(jiān)護(hù)條件只能在觸發(fā)事件發(fā)生時(shí)被賦值一次。如果在轉(zhuǎn)換發(fā)生后監(jiān)護(hù)條件由原來的“假”變?yōu)?ldquo;真”,則因?yàn)橘x值太遲而不能觸發(fā)轉(zhuǎn)換。

從一個(gè)狀態(tài)引出的多個(gè)轉(zhuǎn)換可以有同樣的觸發(fā)器事件,但是每個(gè)轉(zhuǎn)換必須具有不同的監(jiān)護(hù)條件。當(dāng)其中一個(gè)監(jiān)護(hù)條件滿足時(shí),觸發(fā)器事件會(huì)引起相應(yīng)的轉(zhuǎn)換。通常,監(jiān)護(hù)條件的設(shè)置要考慮到各種可能的情況以確保一個(gè)觸發(fā)器事件的發(fā)生應(yīng)該能夠引起某些轉(zhuǎn)換。如果有些情況沒有考慮到,一個(gè)觸發(fā)器事件沒有引起任何轉(zhuǎn)換,那么在狀態(tài)機(jī)視圖中要忽略這個(gè)事件。一個(gè)事件的發(fā)生只能同時(shí)引起一個(gè)轉(zhuǎn)換(在一個(gè)控制線程中)。如果一個(gè)事件可能引起多個(gè)轉(zhuǎn)換,那么其中只有一個(gè)轉(zhuǎn)換有效。如果兩個(gè)相互矛盾的轉(zhuǎn)換同時(shí)有效,則無法確定到底發(fā)生了哪個(gè)轉(zhuǎn)換。這兩個(gè)轉(zhuǎn)換隨機(jī)地發(fā)生一個(gè),或者由系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié)決定究竟發(fā)生哪一個(gè),但是對(duì)建模者來說,無法預(yù)料這種轉(zhuǎn)換產(chǎn)生的后果。#p#

◆4.完成轉(zhuǎn)換

沒有標(biāo)明觸發(fā)器事件的轉(zhuǎn)換是由狀態(tài)中的活動(dòng)的完成引起的(即完成轉(zhuǎn)換)。完成轉(zhuǎn)換也可以帶一個(gè)監(jiān)護(hù)條件,這個(gè)監(jiān)護(hù)條件是在狀態(tài)中的活動(dòng)完成時(shí)被賦值的(而不是完成以后)。

◆5.動(dòng)作

當(dāng)轉(zhuǎn)換被引起時(shí),它對(duì)應(yīng)的動(dòng)作被執(zhí)行。UML狀態(tài)機(jī)視圖中動(dòng)作是原子性的,一般是一個(gè)簡(jiǎn)短的計(jì)算處理過程,通常是一個(gè)賦值操作或算術(shù)計(jì)算。另外還有一些動(dòng)作,包括給另一個(gè)對(duì)象發(fā)送消息、調(diào)用一個(gè)操作、設(shè)置返回值、創(chuàng)建和銷毀對(duì)象,沒有被定義的控制動(dòng)作用外部語言來進(jìn)行詳細(xì)說明。動(dòng)作也可以是一個(gè)動(dòng)作序列,即一系列簡(jiǎn)單的動(dòng)作。動(dòng)作或動(dòng)作序列的執(zhí)行不會(huì)被同時(shí)發(fā)生的其他動(dòng)作影響或終止。按照UML中的概念,動(dòng)作的執(zhí)行時(shí)間非常短,與外界事件所經(jīng)歷的時(shí)間相比是可以忽略的,因此,在動(dòng)作的執(zhí)行過程中不能再插入其他事件。然而,實(shí)際上任何動(dòng)作的執(zhí)行都要耗費(fèi)一定時(shí)間,新到來的事件必須被安置在一個(gè)隊(duì)列中。

整個(gè)系統(tǒng)可以在同一時(shí)間執(zhí)行多個(gè)動(dòng)作。我們說動(dòng)作是原子性的,并不是說整個(gè)系統(tǒng)是原子性的。系統(tǒng)能夠處理硬件的中斷和多個(gè)動(dòng)作的時(shí)間共享。動(dòng)作在它的控制線程中是原子性的。一旦開始執(zhí)行,它必須執(zhí)行到底并且不能與同時(shí)處于活動(dòng)狀態(tài)的動(dòng)作發(fā)生交互作用。但動(dòng)作不能用于表達(dá)處理過程很長(zhǎng)的事物。與系統(tǒng)處理外部事件所需要的反應(yīng)時(shí)間相比,動(dòng)作的執(zhí)行過程應(yīng)該很簡(jiǎn)潔,否則系統(tǒng)不能夠做到實(shí)時(shí)響應(yīng)。

一個(gè)動(dòng)作可以使用觸發(fā)器事件的參數(shù)和對(duì)象的屬性值作為表達(dá)式的一部分。

表6–3列出了各種動(dòng)作及描述。

表6–3動(dòng)作的種類

◆6.狀態(tài)改變

當(dāng)動(dòng)作執(zhí)行完畢后,轉(zhuǎn)換的目標(biāo)狀態(tài)被激活,這時(shí)會(huì)觸發(fā)出口動(dòng)作或入口動(dòng)作的執(zhí)行。

◆7.嵌套狀態(tài)

狀態(tài)可以被嵌套在其他的組成狀態(tài)之內(nèi)(看下一段)。從一個(gè)外部狀態(tài)出發(fā)的轉(zhuǎn)換可以應(yīng)用于這個(gè)狀態(tài)所有的內(nèi)部嵌套狀態(tài)。任何一個(gè)內(nèi)部嵌套狀態(tài)被激活時(shí),轉(zhuǎn)換都有可能發(fā)生。組成狀態(tài)可用于表達(dá)例外和異常,因?yàn)榻M成狀態(tài)上的轉(zhuǎn)換適用于所有它所嵌套的狀態(tài),不需要每個(gè)嵌套狀態(tài)顯式地單獨(dú)處理異常。

◆8.入口和出口動(dòng)作

一個(gè)跨越多個(gè)嵌套層次的轉(zhuǎn)換可能會(huì)離開或進(jìn)入某個(gè)狀態(tài)。只要轉(zhuǎn)換進(jìn)入或離開某個(gè)狀態(tài),則該狀態(tài)可能包含要被執(zhí)行的動(dòng)作。進(jìn)入一個(gè)狀態(tài)可能會(huì)執(zhí)行一個(gè)依附于該狀態(tài)的入口動(dòng)作。如果轉(zhuǎn)換離開初始狀態(tài),那么在轉(zhuǎn)換的動(dòng)作和新狀態(tài)的入口動(dòng)作被執(zhí)行前,執(zhí)行該狀態(tài)的出口動(dòng)作。

入口動(dòng)作通常用來進(jìn)行狀態(tài)所需要的內(nèi)部初始化。因?yàn)椴荒芑乇芤粋€(gè)入口動(dòng)作,任何狀態(tài)內(nèi)的動(dòng)作在執(zhí)行前都可以假定狀態(tài)的初始化工作已經(jīng)完成,不需要考慮如何進(jìn)入這個(gè)狀態(tài)。同樣,無論何時(shí)從一個(gè)狀態(tài)離開都要執(zhí)行一個(gè)出口動(dòng)作來進(jìn)行后處理工作。當(dāng)出現(xiàn)代表錯(cuò)誤情況的高層轉(zhuǎn)換使嵌套狀態(tài)異常終止時(shí),出口動(dòng)作特別有用。出口動(dòng)作可以處理這種情況以使對(duì)象的狀態(tài)保持前后一致。入口動(dòng)作和出口動(dòng)作原則上依附于進(jìn)來的和出去的轉(zhuǎn)換,但是將它們聲明為特殊的動(dòng)作可以使?fàn)顟B(tài)的定義不依賴狀態(tài)的轉(zhuǎn)換,因此起到封裝的作用。

◆9.內(nèi)部轉(zhuǎn)換

我們?cè)賮砜匆幌耈ML狀態(tài)機(jī)視圖中內(nèi)部轉(zhuǎn)換。內(nèi)部轉(zhuǎn)換有一個(gè)源狀態(tài)但是沒有目標(biāo)狀態(tài)。內(nèi)部轉(zhuǎn)換的激發(fā)規(guī)則和改變狀態(tài)的轉(zhuǎn)換的激發(fā)規(guī)則相同。由于內(nèi)部轉(zhuǎn)換沒有目標(biāo)狀態(tài),因此轉(zhuǎn)換激發(fā)的結(jié)果不改變本狀態(tài)。如果一個(gè)內(nèi)部轉(zhuǎn)換帶有動(dòng)作,它也要被執(zhí)行,但是沒有狀態(tài)改變發(fā)生,因此也不需要執(zhí)行入口和出口動(dòng)作。內(nèi)部轉(zhuǎn)換用于對(duì)不改變狀態(tài)的插入動(dòng)作建立模型(如,記錄發(fā)生的事件數(shù)目或建立幫助信息屏)。

盡管入口動(dòng)作和出口動(dòng)作的執(zhí)行是由進(jìn)入或離開某狀態(tài)的外部轉(zhuǎn)換所引起的,除了使用保留字entry和exit代替觸發(fā)事件名稱之外,入口和出口動(dòng)作使用與內(nèi)部轉(zhuǎn)換相同的表示法。

一個(gè)自身轉(zhuǎn)移會(huì)激發(fā)狀態(tài)上的入口動(dòng)作和出口動(dòng)作的執(zhí)行(從概念上來講,自身轉(zhuǎn)換從一個(gè)狀態(tài)出發(fā)后又會(huì)到自身狀態(tài)),因此,自身轉(zhuǎn)換不等價(jià)于內(nèi)部轉(zhuǎn)換。圖6–4說明了入口動(dòng)作、出口動(dòng)作和內(nèi)部轉(zhuǎn)換。

圖6–4內(nèi)部轉(zhuǎn)、入口動(dòng)作和出口動(dòng)作

【編輯推薦】

  1. UML狀態(tài)圖及其組成元素簡(jiǎn)介
  2. UML狀態(tài)圖創(chuàng)建過程中需要注意問題
  3. UML建模風(fēng)格 UML狀態(tài)圖表現(xiàn)形式解析
  4. 在回歸測(cè)試中UML狀態(tài)圖切片的應(yīng)用 
  5. UML用戶指南--UML圖簡(jiǎn)介

 

責(zé)任編輯:佚名 來源: linuxdiyf.com
相關(guān)推薦

2010-06-18 13:25:44

UML狀態(tài)機(jī)視圖

2010-07-12 15:00:56

UML狀態(tài)機(jī)視圖

2010-07-12 15:09:20

UML狀態(tài)機(jī)視圖

2010-07-08 13:03:31

UML狀態(tài)機(jī)圖

2010-06-18 13:08:05

UML狀態(tài)機(jī)視圖

2010-06-12 11:11:55

UML應(yīng)用

2010-06-18 13:15:07

UML狀態(tài)機(jī)圖

2023-03-06 07:35:30

狀態(tài)機(jī)工具訂單狀態(tài)

2013-09-03 09:57:43

JavaScript有限狀態(tài)機(jī)

2020-03-27 10:50:29

DSL 狀態(tài)機(jī)工具

2021-07-08 09:15:20

單片機(jī)編程狀態(tài)機(jī)編程語言

2024-10-10 17:46:06

2021-04-29 09:31:05

前端開發(fā)技術(shù)

2010-06-13 16:16:21

UML狀態(tài)圖

2011-06-24 16:09:24

Qt 動(dòng)畫 狀態(tài)機(jī)

2010-07-05 12:21:36

UML行為圖

2010-07-06 16:19:56

UML圖形

2021-08-19 09:00:00

微服務(wù)開發(fā)架構(gòu)

2020-10-15 10:38:35

C語言狀態(tài)模型

2011-08-22 10:52:30

iptables狀態(tài)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)