[匠人手记] 都过了好久才看到,好**啊

[复制链接]
ksniper 发表于 2008-10-9 15:35 | 显示全部楼层

smartdraw是不错

xinyi205&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />学习了&nbsp;Smartdraw画图也不错,推荐下&nbsp;<br />&nbsp;<br />===========================<br />恩&nbsp;用&nbsp;6.0绿色版就够用了~~才6M大小
xianxia 发表于 2008-10-10 09:30 | 显示全部楼层

匠人有没有你写的好的书,推荐看一下

匠人你好啊,我觉得你写的流程图非常适合我们,我想问一下你有没有出书关于如何分析一个问题,即解决问题的方法和思路呢?我感觉我自己C语言的基础还可以,但拿到问题就有傻了!<br /><br />望能回复,谢谢了!
 楼主| 程序匠人 发表于 2008-10-10 09:47 | 显示全部楼层

回xianxia

匠人只有一本书,就是现在大吹特吹的《匠人手记》,但不知道是否适合你。如果你也不能确定,建议你先看看网络版,再做决定。
niezheyuan 发表于 2008-10-10 11:48 | 显示全部楼层

mark

mark,慢慢听
hartcomm 发表于 2008-10-10 15:02 | 显示全部楼层

记号 流程图 数据流程 状态迁移图(STD)及状态迁移表

  
iC921 发表于 2008-10-11 17:14 | 显示全部楼层

我不单单是想来捧场啊,想跟你学习

<br />程序匠人&nbsp;发表于&nbsp;2008-10-9&nbsp;00:32&nbsp;匠人手记&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />143楼:&nbsp;谢谢iC921来捧场&nbsp;<br /><br />这几天忙,招待不周见谅。<br /><br />今天先挤点牙膏,蒙混过关。。。&nbsp;<br />&nbsp;<br /><font color=#000080>公开请匠人带我学走路</font>&nbsp;(166字节)<br /><br /><br />&nbsp;
miky 发表于 2008-10-11 17:37 | 显示全部楼层

向匠人學習

向匠人學習
kingdomlzq 发表于 2008-10-13 17:21 | 显示全部楼层

受教了

&nbsp;&nbsp;听课&nbsp;&nbsp;听课&nbsp;&nbsp;^_^
 楼主| 程序匠人 发表于 2008-10-13 23:50 | 显示全部楼层

六、状态迁移图(STD)及状态迁移表(重新整理)

六、状态迁移图(STD)及状态迁移表<br /><br />1、状态机的概念<br /><br />在匠人的另一篇手记《编程思路漫谈》中,曾经介绍过“状态机”及基于状态机思路的程序调度机制。这次为了本手记的完整性,不得不旧话重提,为了避免无聊,我们尽量在文字上做些调整。匠人不要炒冷饭(要炒也得炒“蛋炒饭”,嘿嘿!)。<br /><br />状态机在大千世界普遍存在着。比如我们的生命之源——水。它就有三个状态:固态、液态、气态。固态水(冰)经过加热,变成液态水,液态水经过进一步加热,变成气态水(水蒸气)。——这就是一个鲜活的状态机例子。<br /><br />甚至有人说,人生其实也是一个状态机。想想看:生、老、病、死,人本身就是在各种状态中轮回。当然,对生命的思考,这已经超出了《匠人手记》的范畴。<br /><br />状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序,必然有状态机的身影浮现。<br /><br />比如说一个按键命令解析程序,就可以被看作是一个状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识。<br /><br />进一步看,击键动作本身,也可以看做是一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动、重新释放等状态。同样,一个串行通讯的时序(不管它是遵循何种协议,标准串口也好、I2C也好;也不管它是有线的、还是红外的、无线的)也都可以看做是由一系列有限的状态构成的。<br /><br />显示扫描程序也是状态机;通讯命令解析程序也是状态机;甚至连继电器的吸合/释放控制、发光管(LED)的亮/灭控制、又何尝不是个状态机?<br /><br />当我们打开思路,把状态机作为一种思想导入到程序中去时,就会找到解决问题的一条的捷径。有时候,用状态机的思维去思考程序该干什么,比用控制流程的思维去思考,可能会更有效。这样,状态机便有了更实际的功用。<br /><br />程序其实就是状态机。<br />
 楼主| 程序匠人 发表于 2008-10-13 23:51 | 显示全部楼层

2、状态机的要素

2、状态机的要素<br /><br />匠人把状态机归纳为4个要素,即:现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:<br /><br />(1)现态:是指当前所处的状态;<br /><br />(2)条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移;<br /><br />(3)动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态;<br /><br />(4)次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。<br /><br />如果我们进一步归纳,把“现态”和“次态”统一起来,而把“动作”忽略(降格处理),则只剩下两个最关键的要素,即:状态、迁移条件。<br />
 楼主| 程序匠人 发表于 2008-10-13 23:52 | 显示全部楼层

3、状态迁移图

3、状态迁移图<br /><br />状态迁移图(STD),是一种描述系统的状态、以及相互转化关系的图形方式。状态迁移图的画法有许多种,不过一般都大同小异。我们结合一个例子(参见图&nbsp;1.34:状态迁移图)来说明一下它的画法:<br /><br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007112404523592.gif">&nbsp;<br /><br />图&nbsp;1.34:状态迁移图<br /><br />(1)状态框:用方框表示状态,包括所谓的“现态”和“次态”;<br /><br />(2)条件及迁移箭头:用箭头表示状态迁移的方向,并在该箭头上标注触发条件。<br /><br />(3)节点圆圈:当多个箭头指向一个状态时,可以用节点符号(小圆圈)连接汇总;<br /><br />(4)动作框:用椭圆框表示;<br /><br />(5)附加条件判断框:用六角菱形框表示;<br />
 楼主| 程序匠人 发表于 2008-10-13 23:56 | 显示全部楼层

4、状态迁移表

4、状态迁移表<br /><br />除了状态迁移图,我们还可以用表格的形式来表示状态之间的关系。这种表一般称为状态迁移表。<br /><br />采用表格方式来描述状态机,优点是可容纳更多的文字信息。比如,我们不但可以在状态迁移表中描述状态的迁移关系,还可以把每个状态的特征描述也包含在内。<br /><br />下面这张表格,就是图&nbsp;1.34:状态迁移图的另一种描述形式(参见表&nbsp;1.1:状态迁移表)。<br /><br />表&nbsp;1.1:状态迁移表<br /><br />如果表格内容较多,我们还可以将状态迁移表进行拆分。<br /><br />比如,我们可以把状态特征和迁移关系分开列表。被单独拆分出来的描述状态特征的表格,也可以称为“状态真值表”。如果每一个状态包含的信息量过多,我们也可以把每个状态单独列表。<br /><br />状态迁移表作为状态迁移图的有益补充,它的表现形式是灵活的。<br />状态迁移表的缺点是不够直观,因此,它并不能完全取代状态迁移图。比较理想的是将图形和表格结合应用。用图形展现宏观,用表格说明细节。二者互为参照,相得益彰。<br />
 楼主| 程序匠人 发表于 2008-10-13 23:57 | 显示全部楼层

5、更复杂的状态机

5、更复杂的状态机<br /><br />有过有必要,我们可以建立更复杂的状态机模型。<br /><br />状态机可以是多级的。在一个分层的多级系统里面,一个“父状态”下可以划分多个“子状态”,这些子状态共同拥有上级父状态的某些共性,同时又各自拥有自己的一些个性。<br /><br />状态机也可以是多维的。从不同的角度对系统进行状态的划分,这些状态的某些特性是交叉的。<br /><br />这部分思想曾经在《编程思路漫谈》中介绍过,这次就一笔带过。再次强调匠人的一贯主张——简单的,才是最有效的。<br /><br /><br />(未完待续,敬请帮顶!)<br />
 楼主| 程序匠人 发表于 2008-10-14 00:12 | 显示全部楼层

说明:前几天写得有点乱,今天重新整理了一下

要说写作这活儿,具体操作起来吧,有时就和大便一样,必须一心一意、一鼓作气、一气呵成、一**打响。<br /><br />否则就像便秘一样,出来的东西干巴巴的,没有水分,不够滋润,看着都难受。<br /><br />呵呵。。。。
zyok 发表于 2008-10-14 00:17 | 显示全部楼层

盖一楼

有时间再进来好好学习一下...
 楼主| 程序匠人 发表于 2008-10-14 08:23 | 显示全部楼层

本贴最新战况:

本贴最新战况:<br /><br />回复:169<br />点击:&nbsp;8213<br />
dlwlmlj 发表于 2008-10-14 15:51 | 显示全部楼层

支持了

努力学习
HWM 发表于 2008-10-14 16:15 | 显示全部楼层

还是对“次态”有点感冒。

“次”,主次?正次?优次?...,不太明白。<br /><br />状态机:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Y&nbsp;&lt-&nbsp;Fy(S,X)<br />&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&lt-&nbsp;Fs(S,X)<br /><br />注意,这里没用“=”而使用了“&lt-”。<br /><br />所谓状态迁移就是Fs,而动作就是Fy。察看状态机离不开时序概念,在S&nbsp;&lt-&nbsp;Fs(S,X)中右面的S就是迁移之“前”状态,而其左面的S就是迁移之“后”状态。就两个S而言,右面的S是当“前”态,而其左面的S相对于当前态称之为“后”续态。由此可见,其“前后”关系的重要性。<br />
 楼主| 程序匠人 发表于 2008-10-14 16:44 | 显示全部楼层

次态

(4)次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。<br />
HWM 发表于 2008-10-14 18:25 | 显示全部楼层

呵呵,只是不太喜欢此术语的中译版本。

Current&nbsp;State&nbsp;--&nbsp;现态<br />Next&nbsp;State&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;次态<br /><br />此“次”同“次日”中的次,而非主次,正次,优次...。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部