天天看點

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

Executable-state-machines——EA官方資料——中文版

  • 可執行狀态機
    • 建構和執行狀态機的綜述
  • 可執行狀态機工件
    • 創造可執行狀态機的屬性(property)
    • 為屬性定義初始狀态
    • 定義屬性之間的關系
  • 可執行狀态機模組化
    • 可執行狀态機的基本模組化工具和對象
    • 狀态機支援的建構
    • 在其他上下文/類中對行為的引用
    • 重用可執行狀态機器工件
  • 可執行狀态機的代碼生成
    • 語言支援
    • 仿真環境(編譯器設定)
    • 通路
    • 生成代碼
    • 生成代碼(Windows上的Java)
    • 生成代碼(Linux上的Java)
    • 生成代碼(其他語言)
    • 生成
    • 代碼建構
    • 利用現有代碼
  • 調試可執行狀态機的執行
    • 調試狀态機
    • 在狀态過渡時中斷執行
    • 有條件地中斷執行
    • 追蹤輔助資訊
    • 檢視呼叫堆棧
  • 可執行狀态機的執行與仿真
    • 開始模拟
    • 控制速度
    • 活動狀态的表示法
    • 生成時序圖

可執行狀态機

可執行狀态機提供了快速生成、執行和仿真一個複雜狀态模型的有效方法;

與使用EA仿真模型的狀态圖表的動态仿真相反,可執行狀态機提供了一個完全的“特定語言”的實作,可以為在多種平台上的多種軟體産品形成行為引擎。

執行的可視化使用并與仿真功能無縫內建。

模型的發展現在帶來了更少的編碼挑戰,代碼生成、編譯和執行由EA負責。

對于有着具體需求的開發人們,EA提供每個語言時,都伴着一組代碼模闆。

模闆也可以被個人定制,用于以您認為合适的任何方式定制生成代碼。

這些主題向你介紹可執行狀态機模組化的基礎,告訴你如何生成和運作它們。

可執行狀态機的建立和使用以及從狀态機生成代碼的活動,都由EA的統一版和終極版支援。

建構和執行狀态機的綜述

建立和執行可執行狀态機十分直接,但是需要一些規劃和一些關于如何連接配接不同元件進而建立一個高效的可執行模型的知識。

幸運的是,在開始可視化您的設計之前,你不必花費數小時來獲得正确的模型并修複編譯錯誤。

當你已經為你的模型勾勒出廣泛的機制,你可以生成代碼來驅動它,編譯、執行和可視化這個模型隻需要幾分鐘。

下表總結了開始執行和仿真狀态機需要什麼:

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

可執行狀态機工件

一個可執行狀态機工件是生成可以互互相動的狀态機的關鍵。

它指定了将會在一次仿真中包含的對象、它們的狀态以及它們如何連接配接。使用可執行狀态機的一個很大的優勢就是 一個工件中的多個部分代表了狀态機的一個執行個體,是以你可以使用每個狀态機中的多個執行個體來建立仿真,觀察它們如何通信,《可執行狀态機範例》中提供了一個例子。

創造可執行狀态機的屬性(property)

每個可執行狀态機常見都包含一個或者多個狀态機,包含的狀态機由UML屬性元素具體說明,每個屬性将會有一個UML分類詞(類),用于确定該類型包含的狀态機。多種包含的類型作為多元屬性,可以最終包含在多個狀态機中,這些将會在代碼中建立,在執行時初始化。

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

為屬性定義初始狀态

由一個可執行狀态機工件運作的狀态機将會在他們自己的類執行個體上下文中運作,一個可執行狀态機允許你通過給多個類屬性賦予屬性值的方式去定義每個屬性的初始狀态。例如你也許會具體說明一個運動員的年齡、身高、體重或者和運作的場景有關聯的類似屬性值。通過做這個,建立将會影響場景運作效果的詳細的初始化條件将會成為可能。

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

定義屬性之間的關系

除了描述配置設定給每個屬性所擁有的變量的值外,可執行狀态機還使您可以定義每個屬性如何基于它們作為執行個體的類模型來引用其他屬性。

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

可執行狀态機模組化

建立可執行狀态機模型的大多數工作是基于類和狀态模型模組化的标準UML。必須遵守一些慣例,以確定一個結構良好的代碼基礎。唯一新穎的構造是使用原型工件(stereotyped工件)元素來形成可執行狀态機的執行個體或場景的配置。工件用于指定詳細資訊,例如:

  • 代碼語言(JavaScript,C#,Java,包括C的C ++)
  • 場景中涉及的類和狀态機
  • 執行個體規範包括運作狀态;請注意,這可能包括同一狀态機的多個執行個體,例如,在“網球比賽”模拟中兩次使用“ Player”類

可執行狀态機的基本模組化工具和對象

下面介紹一些建構可執行狀态機時使用的主要模組化元素。

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

狀态機支援的建構

下表詳細列出了受支援的狀态機構造以及與每種類型相關的任何限制或一般限制。

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真
Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真
Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

在其他上下文/類中對行為的引用

如果子機狀态引用了目前上下文或類之外的行為元素,則必須從目前上下文類向容器上下文類添加<< import >>連接配接器。例如:

類1(Class1)中的子機狀态(Submachine State)S1引用類2(Class2)中的狀态機(狀态機 )ST2

是以,我們從Class1到Class2添加了<< import >>連接配接器,以便可執行狀态機代碼正确生成子機狀态(Submachine State) S1的代碼。(在Class 1上,單擊Quick Linker箭頭并拖到Class 2,然後從連接配接器類型菜單中選擇“導入”[import]。)

重用可執行狀态機器工件

您可以使用單個可執行工件來建立一個元件的多個模型或版本。例如,一個工件表示一個電阻,可以重用它來建立箔電阻和繞線電阻。對于由相同分類器表示卻通常表現出不同運作狀态的相似對象來說,情況很可能如此。從模組化的角度來看,可能隻需要一個名為“ resistorType”的屬性,而該屬性的取值為“ wire”而不是“ foil”。然後可以重複使用相同的狀态機s,以測試由于運作狀态變化而可能導緻的行為更改。步驟如下:

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

可執行狀态機的代碼生成

可執行狀态機的代碼生成基于它的語言屬性。這可能是Java,C,C ++,C#或JavaScript。無論使用哪種語言,EA将會生成合适的代碼,并立即準備好進行建構和運作。在運作它之前,不需要任何手動幹預。實際上,在最初的生成之後,隻要單擊一下按鈕,任何的可執行狀态機都可以生成、建構和執行。

語言支援

可執行狀态機支援以下平台語言的代碼生成:

·Microsoft本機C / C ++

·Microsoft .NET(C#)

·Scripting(JavaScript)

·Oracle Java(Java)

從EA版本14.1開始,代碼生成無需依賴于仿真環境即可被支援。例如,如果您沒有安裝Visual Studio,您仍然可以從模型中生成代碼并在您自己的項目中使用它。如果要在EA模拟模型,仍然需要編譯器。

仿真環境(編譯器設定)

如果要在EA中模拟可執行狀态機模型,則這些語言需要以下平台或編譯器:

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

通路

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

生成代碼

“模拟>可執行狀态>狀态機”功能區選項提供用于生成狀态機代碼的指令。首先選擇可執行狀态機工件,然後使用功能區選項生成代碼。顯示的“可執行狀态機代碼生成”對話框取決于代碼語言。

生成代碼(Windows上的Java)

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真
Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

生成代碼(Linux上的Java)

生成代碼(其他語言)

同時,“系統輸出”(System Output)視窗在“可執行狀态機輸出”頁面上打開,在代碼生成過程中會在其上顯示進度消息、警告或錯誤。

在“可執行狀态機代碼生成”(executable 狀态機 code generation)對話框中,“工件”(artifact)字段和“語言”(language)字段顯示元素名稱和在元素“屬性”對話框中定義的編碼語言。

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

生成

單擊此按鈕以生成狀态機代碼。代碼生成将覆寫項目輸出目錄中的所有現有檔案。檔案集将包括所有必需的檔案,包括狀态機引用的每個類的檔案。

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

生成的每個可執行狀态機還将生成一個執行分析器腳本(execution Analyzer script),該腳本是用于建構、運作和調試(debugging)可執行狀态機的配置腳本

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

代碼建構

由可執行狀态機生成的代碼可以由EA以以下三種方式之一來建構:

Executable-state-machines——EA官方資料——中文版可執行狀态機可執行狀态機工件可執行狀态機模組化可執行狀态機的代碼生成調試可執行狀态機的執行可執行狀态機的執行與仿真

利用現有代碼

EA生成和執行的可執行狀态機可以利用不存在于任何類模型的現有代碼。為此,您将建立一個抽象的Class元素,僅命名要在外部代碼庫中調用的操作。然後,您将在此接口(interface)與狀态機類之間建立通用化(generalization),并在分析腳本(analyzer script)中手動添加所需的連結。對于Java,您可以将.jar檔案添加到Class路徑。對于本機代碼,您可以在連結中添加.dll。

調試可執行狀态機的執行

即使在生成代碼之後,建立可執行狀态機也會帶來好處。使用執行分析器, EA可以連接配接到生成的代碼。結果就是你可以直覺地調試和驗證代碼的正确行為。由狀态機生成的完全相同的代碼,由仿真示範,并最終并入現實系統中。

調試狀态機

能夠調試可執行狀态機具有其他好處,例如能夠:

  • 中斷模拟的執行以及所有正在執行的狀态機
  • 檢視模拟中涉及的每個狀态機執行個體的原始狀态
  • 在任何時間查點看源代碼和調用堆棧(call stack)
  • 通過在源代碼行上放置跟蹤點來跟蹤有關執行狀态的其他資訊
  • 通過使用動作點(actionpoint)和斷點(例如,出錯時中斷)來控制執行
  • 診斷由于代碼或模組化更改引起的行為更改

如果成功生成、建構并運作了一個可執行狀态機,則可以對其進行調試!在生成過程中建立的分析器腳本已經配置為提供調試。要開始調試,隻需使用仿真控制(simulation control)來運作可執行狀态機。但是,根據所調試行為的性質,我們可能會首先設定一些斷點。

在狀态過渡時中斷執行

像任何調試器一樣,我們可以使用斷點在代碼的某個點檢查執行中的狀态機。在圖表或浏覽器視窗中找到感興趣的類,然後按F12鍵檢視源代碼。根據生成期間使用的命名約定,很容易找到用于狀态轉換的代碼。如果要在特定的過渡處中斷,請在編輯器中找到過渡功能,并通過單擊函數中某行的左空白處來放置斷點标記。當您運作可執行狀态機時,調試器将在此過渡時停止,您将能夠檢視所涉及的任何狀态機的變量的原始狀态。

有條件地中斷執行

每個斷點可以包含一個條件和一個跟蹤語句。當遇到斷點并且條件評估為True時,執行将停止。否則,執行将照常繼續。您可以使用原始變量的名稱組成條件,并使用标準的關系操作數對其進行比較:<> => = <=。例如:

(this.m_nCount> 100)和(this.m_ntype == 1)

要将條件添加到已設定的斷點,請在斷點上單擊滑鼠右鍵,然後選擇“屬性”。或者通過在按住Ctrl鍵的同時單擊斷點,可以快速編輯屬性。

追蹤輔助資訊

可以在例如效果(effect)中使用TRACE子句從狀态機自身中跟蹤資訊。調試還提供了稱為跟蹤點的跟蹤功能。這些隻是斷點,遇到斷點時不會列印中斷語句,而不會中斷它們。輸出顯示在“模拟控制”(simulation control)視窗中。它們可以用作診斷輔助工具,以顯示和證明事件的順序以及執行個體更改狀态的順序。

檢視呼叫堆棧

每當遇到斷點時,都可以從分析器菜單中使用“調用堆棧”。使用它來确定執行的順序。

可執行狀态機的執行與仿真

EA的衆多功能之一是其執行仿真的能力。在EA生成和建構的可執行狀态機可以連接配接到仿真裝置中,以可視化的方式式示範狀态機工件的實時執行。

開始模拟

仿真控制工具欄提供了一個Search按鈕,可用于選擇要運作的Executable 狀态機工件。該控件維護着一個最新的可執行狀态機s的下拉清單,供您選擇。您還可以使用可執行狀态機工件本身上的上下文菜單來啟動仿真。

控制速度

模拟控件提供速度設定。您可以使用它來調整模拟執行的速率。速度表示為介于0到100之間的值(值越大,速度越快)。零值将導緻仿真在每一步後停止;這需要使用工具欄控件來手動完成仿真。

活動狀态的表示法

當可執行狀态機執行時,将顯示相關的狀态機圖,顯示将會在每個完成步驟的循環末尾更新。您會注意到,隻有執行個體完成步驟的活動狀态被突出顯示。其他狀态仍然黯淡。

容易确定哪個執行個體在哪個狀态中,因為這些狀态已被标記為目前處于該特定狀态的任何執行個體的名稱。如果兩個或更多個相同類型的工件屬性共享相同的狀态,則該狀态将為每個屬性名稱具有單獨的标簽。

生成時序圖

完成對可執行狀态機的仿真後,您可以從輸出中生成一個時序圖。操作步驟如下:

在“模拟”視窗工具欄中,單擊“工具|生成時序圖”(Tools|Generate Timing Diagram)。

(之後就是各類示例,有時間再翻譯吧