在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

State狀態(tài)模式推導(dǎo)過(guò)程以及完整實(shí)現(xiàn)

UtFs_Zlgmcu7890 ? 來(lái)源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-10-17 06:42 ? 次閱讀

近日周立功教授公開(kāi)了數(shù)年的心血之作《程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)》,電子版已無(wú)償性分享到電子工程師與高校群體下載,經(jīng)周立功教授授權(quán),特對(duì)本書內(nèi)容進(jìn)行連載。

>>>1.1.1動(dòng)作類

前面詳細(xì)介紹了State狀態(tài)模式的推導(dǎo)過(guò)程以及完整的實(shí)現(xiàn),采用了簡(jiǎn)單的打印語(yǔ)句作為作為4個(gè)動(dòng)作的實(shí)現(xiàn)示例。然而,實(shí)際動(dòng)作是很有可能發(fā)生變化的,由于動(dòng)作直接在事件處理方法中執(zhí)行。比如,LOCKED狀態(tài)的card事件處理方法定義為:

1 void locked_card(turnstile_t *p_turnstile)

2 {

3 turnstile_state_set(p_turnstile, &unlocked_state);

4 printf("unclock\n"); // 執(zhí)行unlock動(dòng)作

5 }

由此可見(jiàn),只要?jiǎng)幼靼l(fā)生變化,都必須修改事件處理方法。基于此,不妨將閘機(jī)動(dòng)作單獨(dú)封裝在一個(gè)動(dòng)作類中,詳見(jiàn)圖 4.12

圖 4.12 狀態(tài)機(jī)類圖

程序清單4.23程序清單4.24所示為動(dòng)作類的聲明和實(shí)現(xiàn),為何要為這么簡(jiǎn)單的動(dòng)作創(chuàng)建類呢?因?yàn)橹挥蓄A(yù)測(cè)變換和管理變化才能擁抱變化,只有這樣才能使軟件具有可擴(kuò)展性和可維護(hù)性。

程序清單4.23動(dòng)作函數(shù)聲明(turnstile_action.h文件內(nèi)容

1 #pragma once

2

3 void turnstile_action_lock(void);

4 void turnstile_action_unlock(void);

5 void turnstile_action_alarm(void);

6 void turnstile_action_thankyou(void);

程序清單4.24動(dòng)作函數(shù)實(shí)現(xiàn)(turnstile_action.c文件內(nèi)容)

1 void turnstile_action_lock(void)

2 {

3 printf("clock\n");

4 }

5

6 void turnstile_action_unlock(void)

7 {

8 printf("unclock\n");

9 }

10

11 void turnstile_action_alarm(void)

12 {

13 printf("alarm\n");

14 }

15

16 void turnstile_action_thankyou(void)

17 {

18 printf("thank you\n");

19 }

程序中的alarm、unlock、thankyou和lock動(dòng)作對(duì)應(yīng)的動(dòng)作函數(shù)分別為: alarm()、unlock()、thankyou()和lock()。當(dāng)將4個(gè)動(dòng)作分別由4個(gè)函數(shù)實(shí)現(xiàn)時(shí),則具體動(dòng)作從狀態(tài)機(jī)中分離出來(lái)了。比如,LOCKED狀態(tài)下的card事件處理方法定義為:

1 void locked_card(turnstile_t *p_turnstile)

2 {

3 turnstile_state_set(p_turnstile, &unlocked_state);

4 turnstile_action_unlock (); // 執(zhí)行unlock動(dòng)作

5 }

這是一種良好的設(shè)計(jì)因?yàn)閯?dòng)作接口優(yōu)雅地解除了FSM的狀態(tài)變換邏輯和它要執(zhí)行的動(dòng)作之間的耦合。這樣一來(lái)就算另外一個(gè)具有完全不同邏輯的FSM,也可以在沒(méi)有任何影響的情況下使用這些動(dòng)作接口。

由于在處理動(dòng)作時(shí),不需要任何數(shù)據(jù),它是一個(gè)只有方法,沒(méi)有屬性的動(dòng)作類,因此沒(méi)有刻意使用結(jié)構(gòu)體為其定義專門的類型。而實(shí)際的動(dòng)作類可能會(huì)包含一些數(shù)據(jù),其定義如下:

typedef struct _turnstile_action {

// some data

} turnstile_action_t;

此時(shí),當(dāng)動(dòng)作發(fā)生變化時(shí),僅需修改動(dòng)作類的函數(shù),無(wú)需修改狀態(tài)機(jī)的事件處理函數(shù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電子工程師
    +關(guān)注

    關(guān)注

    252

    文章

    768

    瀏覽量

    95631
  • 嵌入式
    +關(guān)注

    關(guān)注

    5083

    文章

    19133

    瀏覽量

    305602
  • 周立功
    +關(guān)注

    關(guān)注

    38

    文章

    130

    瀏覽量

    37656

原文標(biāo)題:周立功:狀態(tài)機(jī)——?jiǎng)幼黝?/p>

文章出處:【微信號(hào):Zlgmcu7890,微信公眾號(hào):周立功單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    在Compose中使用狀態(tài)(State)

    對(duì)于開(kāi)發(fā)者來(lái)說(shuō),狀態(tài) (State) 指應(yīng)用中可以隨時(shí)間變化的任何值。我們的應(yīng)用天然便是擁有狀態(tài)的,無(wú)論您將數(shù)據(jù)存儲(chǔ)在本地還是服務(wù)器中,狀態(tài)都可以使這些數(shù)據(jù)更有價(jià)值。接下來(lái),我們就以應(yīng)
    的頭像 發(fā)表于 04-21 11:05 ?4864次閱讀

    狀態(tài)機(jī)編程實(shí)例-面向?qū)ο蟮?b class='flag-5'>狀態(tài)設(shè)計(jì)模式

    本編介紹了狀態(tài)機(jī)編程的第3種方法——面向?qū)ο蟮?b class='flag-5'>狀態(tài)設(shè)計(jì)模式,通過(guò)C++的繼承特性,以及類指針,實(shí)現(xiàn)炸彈拆除小游戲中的
    的頭像 發(fā)表于 06-28 09:04 ?1536次閱讀
    <b class='flag-5'>狀態(tài)</b>機(jī)編程實(shí)例-面向?qū)ο蟮?b class='flag-5'>狀態(tài)</b>設(shè)計(jì)<b class='flag-5'>模式</b>

    玩轉(zhuǎn)Spring狀態(tài)機(jī)

    說(shuō)起Spring狀態(tài)機(jī),大家很容易聯(lián)想到這個(gè)狀態(tài)機(jī)和設(shè)計(jì)模式狀態(tài)模式的區(qū)別是啥呢?沒(méi)錯(cuò),Spring
    的頭像 發(fā)表于 06-25 14:21 ?963次閱讀
    玩轉(zhuǎn)Spring<b class='flag-5'>狀態(tài)</b>機(jī)

    誰(shuí)有PMSM傳遞函數(shù)的推導(dǎo)過(guò)程的資料?

    誰(shuí)有PMSM傳遞函數(shù)的推導(dǎo)過(guò)程的資料?發(fā)一下謝謝了PMSM的FOC控制中電流環(huán)的PI控制器的時(shí)候,好多資料上就干巴巴列出了一個(gè)現(xiàn)成的PMSM的傳遞函數(shù),看的暈頭轉(zhuǎn)向的,有沒(méi)有簡(jiǎn)單的推導(dǎo)過(guò)程
    發(fā)表于 01-21 16:13

    經(jīng)驗(yàn)分享:臨界模式下的PFC電感量推導(dǎo)過(guò)程

    臨界模式PFC電感量計(jì)算真的非常簡(jiǎn)單!對(duì)于很多工程師來(lái)說(shuō)開(kāi)關(guān)電源PFC電感的計(jì)算比較懵,今天我對(duì)臨界模式下的PFC做了一下簡(jiǎn)單的推導(dǎo),我覺(jué)得比反激正激變壓器要更好更容易計(jì)算,也更好理解。好了我們一起
    發(fā)表于 04-28 08:00

    LLC增益曲線過(guò)程推導(dǎo)和參數(shù)如何計(jì)算

    詳細(xì)過(guò)程在PDF中,這里就不一一展示了。直流增益公式推導(dǎo)直流LLC諧振電源,其實(shí)也相當(dāng)于buck-boost電源。要想弄明白和推導(dǎo)理論公式,首先溫習(xí)一下傅里葉級(jí)數(shù)和RLC串聯(lián)諧振知識(shí)。 傅里葉級(jí)數(shù)
    發(fā)表于 05-19 09:19

    直線擬合求解的推導(dǎo)過(guò)程

    (1)求解的推導(dǎo)過(guò)程:最小二乘擬合直線的推導(dǎo)過(guò)程如下:假設(shè)直線方程為:設(shè)有n對(duì)觀測(cè)值(xi,yi),則列出如下方程:整理得:其中A、EA、L的表達(dá)式如下:最后解算直線擬合求解的
    發(fā)表于 08-18 08:04

    State Machine Coding Styles for Synthesis

    本文論述了狀態(tài)機(jī)的verilog編碼風(fēng)格,以及不同編碼風(fēng)格的優(yōu)缺點(diǎn), Steve Golsons 1994 paper, State Machine Design Techniques
    發(fā)表于 01-17 11:22 ?0次下載
    <b class='flag-5'>State</b> Machine Coding Styles for Synthesis

    對(duì)象間交互推導(dǎo)過(guò)程模式選擇

    的對(duì)象間交互 基于閉包的對(duì)象間交互 推導(dǎo)過(guò)程 總結(jié) 前言 閉包在什么場(chǎng)景下才是最優(yōu)選擇?理由?補(bǔ)充說(shuō)明一下:很多場(chǎng)景都適用閉包,但不是所有場(chǎng)景下閉包都是最優(yōu)選擇。 這篇文章主要就是回答這個(gè)問(wèn)題的。 但是在直接切入閉包之前,我們需要有一個(gè)
    發(fā)表于 09-25 15:26 ?0次下載

    Logistic回歸數(shù)學(xué)推導(dǎo)以及python實(shí)現(xiàn)

    Logistic回歸數(shù)學(xué)推導(dǎo)以及python實(shí)現(xiàn)
    發(fā)表于 02-25 14:48 ?7次下載

    反激詳細(xì)推導(dǎo)過(guò)程

    反激電路工作模式一般有三種,斷續(xù)模式(DCM),連續(xù)模式(CCM),臨界模式(CRM)以下的推導(dǎo)公式,前期條件是你必須認(rèn)識(shí)到反激變壓器他的本
    發(fā)表于 06-19 10:20 ?39次下載

    電機(jī)控制---SVPWM扇區(qū)判斷的實(shí)現(xiàn)以及推導(dǎo)過(guò)程

    電機(jī)控制—SVPWM扇區(qū)判斷的實(shí)現(xiàn)以及推導(dǎo)過(guò)程 1.一般的Svpwm模塊中,輸入量為Vα、Vβ,得到三相計(jì)數(shù)器的Compare的值,最后輸出U、V、W三相電壓。在FOC控制中實(shí)現(xiàn)Svp
    發(fā)表于 05-05 11:05 ?5次下載
    電機(jī)控制---SVPWM扇區(qū)判斷的<b class='flag-5'>實(shí)現(xiàn)以及</b><b class='flag-5'>推導(dǎo)</b><b class='flag-5'>過(guò)程</b>

    設(shè)計(jì)模式行為型:狀態(tài)模式

    狀態(tài)模式State Pattern)中,類的行為是基于它的狀態(tài)改變的。這種類型的設(shè)計(jì)模式屬于行為型
    的頭像 發(fā)表于 06-07 11:20 ?626次閱讀
    設(shè)計(jì)<b class='flag-5'>模式</b>行為型:<b class='flag-5'>狀態(tài)</b><b class='flag-5'>模式</b>

    UVM設(shè)計(jì)模式狀態(tài)模式介紹

    軟件設(shè)計(jì)中,F(xiàn)SM(Finite-State Machine)分為3部分:狀態(tài)State),事件(Event),動(dòng)作(Action)。
    的頭像 發(fā)表于 08-22 09:14 ?1026次閱讀
    UVM設(shè)計(jì)<b class='flag-5'>模式</b>之<b class='flag-5'>狀態(tài)</b><b class='flag-5'>模式</b>介紹

    buck電路穩(wěn)態(tài)電壓推導(dǎo)過(guò)程

    buck電路(也稱為降壓轉(zhuǎn)換器或降壓穩(wěn)壓器)的穩(wěn)態(tài)電壓推導(dǎo)過(guò)程涉及理解其工作原理以及電路中的電壓和電流關(guān)系。以下是一個(gè)簡(jiǎn)化的推導(dǎo)過(guò)程: Bu
    的頭像 發(fā)表于 09-12 15:24 ?676次閱讀
    主站蜘蛛池模板: 国产精品大片天天看片| 亚洲欧美日本视频| 欧美在线视频看看| 欧日韩视频777888| 国产亚洲美女精品久久久2020| 精品福利在线观看| 999久久久国产精品| 久久xx| 亚洲视频www| 国产在线欧美精品卡通动漫| av网站免费线看| 性欧美大胆高清视频| 色偷偷97| 久久精品99| 成人三级在线播放线观看| 亚色中文字幕| 免费在线黄色网址| 欧美乱乱| 日本一区免费看| 亚洲乱亚洲乱妇41p| 日韩特级毛片免费观看视频| 鲁久久| 影音先锋五月天| 欧美啊片| 88影视在线观看污污| 99热在线获取最新地址| 特级全毛片| 激情欧美一区二区三区中文字幕| bt种子在线搜索| 九色愉拍自拍| 亚洲欧美强伦一区二区另类| 香蕉久久夜色精品国产2020| 欧美zooz人禽交免费观看| 成人欧美精品一区二区不卡| 日韩一级片视频| 欧美精品久久久久久久小说| 久青草国产高清在线视频| free欧美性| 欧美黄色片免费| h在线观看网站| 亚洲精品福利你懂|