摘要:或有時稱為狀態(tài)圖,狀態(tài)機(jī)或狀態(tài)圖顯示實體的不同狀態(tài)。簡單狀態(tài)機(jī)圖表示法進(jìn)入和退出行動在州中指定的進(jìn)入和退出操作。以下狀態(tài)機(jī)圖表對具有兩個并發(fā)子狀態(tài)的拍賣進(jìn)行建模處理出價并授權(quán)付款限額。
實體的行為不僅是其輸入的直接結(jié)果,而且還取決于其先前的狀態(tài)。實體的過去歷史可以最好地通過有限狀態(tài)機(jī)圖或傳統(tǒng)上稱為自動機(jī)來建模。UML State Machine Diagrams(或有時稱為狀態(tài)圖,狀態(tài)機(jī)或狀態(tài)圖)顯示實體的不同狀態(tài)。狀態(tài)機(jī)圖還可以顯示實體如何通過從一種狀態(tài)更改為另一種狀態(tài)來響應(yīng)各種事件。狀態(tài)機(jī)圖是用于模擬系統(tǒng)動態(tài)??特性的UML圖。
學(xué)習(xí)UML更快,更好,更容易您是否正在尋找一種免費(fèi)的UML工具來更快,更輕松,更快速地學(xué)習(xí)UML?Visual Paradigm Community Edition是一個支持所有UML圖類型的UML軟件。它是一款屢獲殊榮的國際UML建模師,但它易于使用,直觀且完全免費(fèi)。
免費(fèi)下載
為什么是狀態(tài)機(jī)圖?狀態(tài)機(jī)圖通常用于描述對象的狀態(tài)依賴行為。對象取決于它所處的狀態(tài),對同一事件的響應(yīng)不同。狀態(tài)機(jī)圖通常應(yīng)用于對象,但可以應(yīng)用于對其他實體具有行為的任何元素,例如:參與者,用例,方法,子系統(tǒng)等等,它們通常與交互圖(通常是序列圖)一起使用)。
例如:
考慮一下銀行賬戶中有100,000美元。撤銷功能的行為是:balance:= balance - withdrawAmount; 但退出后的余額不低于0美元; 無論您從銀行取款多少次都是如此。在這種情況下,提取不會影響屬性值的抽象,因此對象的總體行為保持不變。
但是,如果提款后賬戶余額變?yōu)樨?fù)數(shù),則提款功能的行為將會大不相同。這是因為銀行賬戶的狀態(tài)從正變?yōu)樨?fù); 在技??術(shù)術(shù)語中,從正狀態(tài)到負(fù)狀態(tài)的轉(zhuǎn)換被觸發(fā)。
屬性值的抽象是系統(tǒng)的屬性,而不是全局適用的規(guī)則。例如,如果銀行更改業(yè)務(wù)規(guī)則以允許銀行存款余額透支2000美元,則銀行賬戶的狀態(tài)將被重新定義,條件是提款后的余額不得低于2000美元的赤字。
注意:
狀態(tài)機(jī)圖描述了所有事件(以及單個對象的狀態(tài)和轉(zhuǎn)換)
序列圖描述了涉及所有對象的單個交互的事件
狀態(tài)機(jī)圖的基本概念 什么是國家?Rumbaugh定義:
“狀態(tài)是對象的屬性值和鏈接的抽象。根據(jù)影響對象粗略行為的屬性,將值集合在一起成為狀態(tài)?!?/em>
州記譜法 狀態(tài)機(jī)符號的特征無論類型如何,一般都有幾種狀態(tài):
一個州占用一段時間。
狀態(tài)通常與滿足某些條件的實體的屬性值的抽象相關(guān)聯(lián)。
實體改變其狀態(tài)不僅是當(dāng)前輸入的直接結(jié)果,而且還取決于其輸入的一些過去歷史。
州狀態(tài)是對象生命周期中的約束或情境,其中約束成立,對象執(zhí)行活動或等待事件。
狀態(tài)機(jī)圖是由以下內(nèi)容組成的圖:
國家(簡單州或復(fù)合州)
連接狀態(tài)的狀態(tài)轉(zhuǎn)換
例:
國家特征狀態(tài)表示某些時間點的物體條件。
可以將對象(或系統(tǒng))視為從一個狀態(tài)移動到另一個狀態(tài)
滿足某些條件的模型元素生命周期中的一個點,其中某些特定操作正在執(zhí)行或某些事件等待
初始和最終國家狀態(tài)機(jī)圖的初始狀態(tài),稱為初始偽狀態(tài),用實心圓表示。從這種狀態(tài)的轉(zhuǎn)變將顯示第一個真實狀態(tài)
狀態(tài)機(jī)圖的最終狀態(tài)顯示為同心圓。開環(huán)狀態(tài)機(jī)表示可以在系統(tǒng)終止之前終止的對象,而閉環(huán)狀態(tài)機(jī)圖不具有最終狀態(tài); 如果是這種情況,則對象將一直存在,直到整個系統(tǒng)終止。
例:
活動事件簽名被描述為事件名稱(逗號分隔參數(shù)列表)。事件出現(xiàn)在狀態(tài)的內(nèi)部過渡隔室中或狀態(tài)之間的過渡上。事件可以是以下四種類型之一:
信號事件 - 對應(yīng)于異步消息或信號的到達(dá)
呼叫事件 - 對應(yīng)于程序調(diào)用到達(dá)操作
時間事件 - 在指定時間過后發(fā)生時間事件
更改事件 - 只要滿足指定條件,就會發(fā)生更改事件
事件的特征表示導(dǎo)致對象從一種狀態(tài)轉(zhuǎn)換到另一種狀態(tài)的事件。
內(nèi)部或外部事件觸發(fā)一些活動,這些活動會改變系統(tǒng)及其某些部分的狀態(tài)
事件傳遞信息,由對象操作詳細(xì)說明。對象實現(xiàn)事件
設(shè)計涉及檢查狀態(tài)機(jī)圖中的事件并考慮系統(tǒng)對象如何支持這些事件
過渡過渡線描繪了從一個狀態(tài)到另一個狀態(tài)的移動。每個過渡行都標(biāo)有導(dǎo)致過渡的事件。
將系統(tǒng)視為一組狀態(tài)和狀態(tài)之間的轉(zhuǎn)換對于描述復(fù)雜行為非常有用
了解狀態(tài)轉(zhuǎn)換是系統(tǒng)分析和設(shè)計的一部分
過渡是從一個州到另一個州的運(yùn)動
國家之間的過渡發(fā)生如下:
元素處于源狀態(tài)
發(fā)生事件
執(zhí)行動作
元素進(jìn)入目標(biāo)狀態(tài)
當(dāng)不同的事件導(dǎo)致狀態(tài)終止或者在轉(zhuǎn)換上存在保護(hù)條件時,發(fā)生多個轉(zhuǎn)換
沒有事件和動作的轉(zhuǎn)換稱為自動轉(zhuǎn)換
操作Action是可執(zhí)行的原子計算,包括操作調(diào)用,另一個對象的創(chuàng)建或銷毀,或者向?qū)ο蟀l(fā)送信號。動作與轉(zhuǎn)換相關(guān)聯(lián),并且在此期間動作不可中斷 - 例如,進(jìn)入,退出
活動活動與狀態(tài)相關(guān)聯(lián),這是一種非原子或正在進(jìn)行的計算?;顒涌赡軙瓿苫驘o限期地繼續(xù)?;顒訉⒂蓪?dǎo)致從定義活動的狀態(tài)轉(zhuǎn)換的事件終止
行動和活動的特征國家可以觸發(fā)行動
狀態(tài)可以具有第二隔間,其包含在實體處于給定狀態(tài)時執(zhí)行的動作或活動
動作是原子執(zhí)行,因此不會中斷
五個動作觸發(fā)器:On Entry,Do,On Event,On Exit和Include
活動捕獲可能持續(xù)很長時間的復(fù)雜行為 - 活動可能被事件中斷,在這種情況下,當(dāng)對象到達(dá)某個狀態(tài)時,它不會完成。
簡單狀態(tài)機(jī)圖表示法 進(jìn)入和退出行動在州中指定的進(jìn)入和退出操作。每次進(jìn)入/退出時都必須如此。如果不是,則必須對各個過渡弧使用操作
使用符號進(jìn)入狀態(tài)時執(zhí)行的進(jìn)入操作:進(jìn)入/操作
退出使用符號退出狀態(tài)時執(zhí)行的操作:退出/操作
示例 - 進(jìn)入/退出操作(檢查書籍狀態(tài))此示例說明了從類派生的狀態(tài)機(jī)圖 - “BookCopy”:
注意:
此狀態(tài)機(jī)圖顯示BookCopy類中對象myBkCopy的狀態(tài)
輸入操作:只要通過轉(zhuǎn)換輸入給定狀態(tài),就會執(zhí)行任何標(biāo)記為與輸入操作相關(guān)聯(lián)的操作
退出操作:只要通過轉(zhuǎn)換離開狀態(tài),就會執(zhí)行任何標(biāo)記為鏈接到退出操作的操作
子狀態(tài)簡單狀態(tài)是沒有子結(jié)構(gòu)的狀態(tài)。具有子狀態(tài)(嵌套狀態(tài))的狀態(tài)稱為復(fù)合狀態(tài)。子狀態(tài)可以嵌套到任何級別。嵌套狀態(tài)機(jī)可以具有至多一個初始狀態(tài)和一個最終狀態(tài)。通過顯示某些狀態(tài)僅在特定上下文(封閉狀態(tài))內(nèi)可能,子狀態(tài)用于簡化復(fù)雜的平面狀態(tài)機(jī)。
子狀態(tài)示例 - 加熱器
State Machine Diagrams通常用于派生測試用例,下面列出了可能的測試方法:
空閑狀態(tài)接收太熱事件
空閑狀態(tài)接收太酷事件
冷卻/啟動狀態(tài)接收Compressor Running事件
冷卻/就緒狀態(tài)接收風(fēng)扇運(yùn)行事件
冷卻/運(yùn)行狀態(tài)接收OK事件
冷卻/運(yùn)行狀態(tài)接收故障事件
失敗狀態(tài)接收失敗清除事件
加熱狀態(tài)接收OK事件
加熱狀態(tài)接收失敗事件
歷史國家除非另有說明,否則當(dāng)轉(zhuǎn)換進(jìn)入復(fù)合狀態(tài)時,嵌套狀態(tài)機(jī)的操作將在初始狀態(tài)重新開始(除非轉(zhuǎn)換直接針對子狀態(tài))。歷史狀態(tài)允許狀態(tài)機(jī)重新進(jìn)入在離開復(fù)合狀態(tài)之前處于活動狀態(tài)的最后一個子狀態(tài)。歷史狀態(tài)使用的示例如下圖所示。
并行國家如上所述,狀態(tài)機(jī)圖中的狀態(tài)可以嵌套。相關(guān)狀態(tài)可以組合在一起形成單個復(fù)合狀態(tài)。當(dāng)活動涉及并發(fā)子活動時,必須將狀態(tài)嵌套在其他狀態(tài)中。以下狀態(tài)機(jī)圖表對具有兩個并發(fā)子狀態(tài)的拍賣進(jìn)行建模:處理出價并授權(quán)付款限額。
并發(fā)狀態(tài)機(jī)圖示例 - 拍賣過程
在此示例中,首次進(jìn)入Auction的狀態(tài)機(jī)需要在開始時將fork分成兩個多帶帶的開始線程。每個子狀態(tài)都有一個退出狀態(tài)來標(biāo)記線程的結(jié)尾。除非出現(xiàn)異常退出(已取消或已拒絕),否則在兩個子狀態(tài)退出時都會退出復(fù)合狀態(tài)。
嘗試現(xiàn)在繪制UML狀態(tài)機(jī)圖您已經(jīng)了解了狀態(tài)機(jī)圖是什么以及如何繪制狀態(tài)機(jī)圖?,F(xiàn)在是時候繪制一個自己的狀態(tài)機(jī)圖。獲取免費(fèi)的UML軟件Visual Paradigm Community Edition,并使用免費(fèi)的State Machine Diagram工具創(chuàng)建自己的State Machine Diagram。它易于使用且直觀。
免費(fèi)下載
相關(guān)鏈接什么是統(tǒng)一建模語言?
專業(yè)的UML圖工具
自由狀態(tài)機(jī)圖示例可在在線狀態(tài)機(jī)圖軟件中編輯的自由狀態(tài)機(jī)圖示例和模板:Visual Paradigm Online。使用模板作為起點來創(chuàng)建自己的狀態(tài)機(jī)圖。
烤箱
數(shù)碼時鐘
正交狀態(tài)
復(fù)合國
加熱器
烤面包機(jī)
售票系統(tǒng)
電話
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104997.html
摘要:設(shè)計模式是一套被反復(fù)使用的多數(shù)人知曉的經(jīng)過分類編目的代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了重用代碼讓代碼更容易被他人理解保證代碼可靠性。由此可見,其實設(shè)計模式就是從大型軟件架構(gòu)出發(fā)便于升級和維護(hù)的軟件設(shè)計思想,它強(qiáng)調(diào)降低依賴,降低耦合。 點擊進(jìn)入我的博客 1.1 設(shè)計模式概述 什么是設(shè)計模式 設(shè)計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。設(shè)計模式是一套被反復(fù)使用的、...
摘要:代碼只是狀態(tài)機(jī)圖的相關(guān)元素的一種表現(xiàn)形式,它與節(jié)點式或表格式的狀態(tài)機(jī)圖并無本質(zhì)不同。如上,狀態(tài)機(jī)是防止代碼失控的一劑良藥,制備完善的狀態(tài)機(jī)圖就是防止代碼失控的一種有效手段。 前言 前幾天和某某同學(xué)吃飯席間,他聊到每當(dāng)要修改老項目中自己寫的代碼時就痛苦不堪,問我是不是也有同感。我覺得這應(yīng)該是不少程序猿的心聲,之所以會這樣,大致有兩個主因: 項目的整體設(shè)計很糟糕,只管往上堆砌各種功能、補(bǔ)...
摘要:另一種關(guān)于組件的常見說法,是組件是為了重用。這件事情是前端特有的,受限制于的結(jié)構(gòu)。這一節(jié)的題目叫做混亂的組件通訊,我們來仔細(xì)掰扯一下細(xì)節(jié),因為組件模型雖然很常說但是對通訊過程沒有約定。 這個話題很難寫。 但是反過來說,愛因斯坦有句名言:如果你不能把一個問題向一個六歲孩子解釋清楚,那么你不真的明白它。 所以解釋清楚一個問題的關(guān)鍵,不是去擴(kuò)大化,而是相反,最小化。 Lets begin. ...
摘要:狀態(tài)機(jī)狀態(tài)機(jī)是模型層面的概念,與編程語言無關(guān)。狀態(tài)機(jī)具有良好的可實現(xiàn)性和可測試性。在代碼里,這是一個,但是我們在狀態(tài)機(jī)模型中要把他理解為事件。 這一篇是這個系列的開篇,沒有任何高級內(nèi)容,就講講狀態(tài)機(jī)。 狀態(tài)機(jī) 狀態(tài)機(jī)是模型層面的概念,與編程語言無關(guān)。它的目的是為對象行為建模,屬于設(shè)計范疇。它的基礎(chǔ)概念是狀態(tài)(state)和事件(event)。 對象的內(nèi)部結(jié)構(gòu)描述為一組狀態(tài)S1, S2,...
閱讀 3160·2023-04-26 02:33
閱讀 3116·2023-04-25 21:33
閱讀 915·2021-09-02 09:56
閱讀 2936·2019-08-30 15:44
閱讀 2466·2019-08-30 13:15
閱讀 1044·2019-08-30 13:04
閱讀 1644·2019-08-29 15:09
閱讀 3977·2019-08-26 18:26