软件=数据结构+算法;这是经典的公式,指引着每一个软件开发活动;一个事物在系统中以各类类型的数据存在,这个数据须要有机的组合在一块儿,才能描述整个事物,这个有机的组合就是数据结构,对应在不一样的语言中有结构体、类、表等。算法做为一门独立的课程教授,我学习的算法课程中从未讲到状态机,这里我盗用经典公式:软件=数据结构+状态机。算法描述了数据计算的过程,整个过程当中,数据不会由于算法而改变。实际的软件系统中,数据计算的过程又是数据再加工的过程,即虽然在任意时间切片上看,事物的数据都是静止的、肯定的;可是从事物的生命周期看,数据是不断变化的。算法
描述数据不断变更的过程是状态机和流程图,二者都很是重要,这里强调的是状态机,只是看待问题的角度不一样。流程图的设计过程,关注点是模块或者子系统;而状态机的设计过程,关注点是数据结构;另外,从系统以外看,数据结构和状态机能够基本清楚的描述系统功能。数据结构
我所经历的项目中,有不少仅提供了PDM或者ER图,即便字段描述中写了状态枚举值,这是不够的;主要的不足有如下几点:学习
状态是动态变化的,不一样状态取值之间的变迁是有明确的业务含义的;枚举值之间不是能够随意改变的,变更的轨迹、条件缺乏必要的描述spa
不一样事物的状态之间是有关联、互动的;没有对应的说明,系统很难有效的划分事务颗粒;设计
有些状态标明的是量变到质变,仅经过枚举值很差说明;对象
经过状态机来补充静态数据结构描述的不足;对于一个业务对象而言,其全部改变数据值的业务功能都应该体如今状态机上。当两个业务对象之间的状态有关联时,则经过业务功能(描述或者编号)联系起来,提示开发人员这是要在一个事务中处理的。生命周期
通常系统中涉及算法设计几乎没有,大多数选用经典算法便可。因此软件设计中,数据结构+状态机的设计基本上是能够描述系统功能,再辅以实现方面的设计(序列图、类图等)。事务