数据结构与状态机

本文探讨了软件设计中的核心元素——状态机的作用及其实现方式。文章指出,在描述数据变化的过程中,状态机和流程图是两种重要的手段,但状态机更侧重于数据结构的变化。作者还分享了在项目实践中遇到的问题,并提出了使用状态机来补充数据结构描述的不足之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    软件=数据结构+算法;这是经典的公式,指引着每个软件开发活动;一个事物在系统中以各种类型的数据存在,这个数据需要有机的组合在一起,才能描述整个事物,这个有机的组合就是数据结构,对应在不同的语言中有结构体、类、表等。算法作为一门独立的课程教授,我学习的算法课程中从未讲到状态机,这里我盗用经典公式:软件=数据结构+状态机。算法描述了数据计算的过程,整个过程中,数据不会因为算法而改变。实际的软件系统中,数据计算的过程又是数据再加工的过程,即虽然在任意时间切片上看,事物的数据都是静止的、确定的;但是从事物的生命周期看,数据是不断变化的。

    描述数据不断变动的过程是状态机和流程图,两者都非常重要,这里强调的是状态机,只是看待问题的角度不同。流程图的设计过程,关注点是模块或者子系统;而状态机的设计过程,关注点是数据结构;另外,从系统之外看,数据结构和状态机可以基本清楚的描述系统功能。

    我所经历的项目中,有很多仅提供了PDM或者ER图,即使字段描述中写了状态枚举值,这是不够的;主要的不足有以下几点:

  • 状态是动态变化的,不同状态取值之间的变迁是有明确的业务含义的;枚举值之间不是可以随意改变的,变动的轨迹、条件缺少必要的描述

  • 不同事物的状态之间是有关联、互动的;没有对应的说明,系统很难有效的划分事务颗粒;

  • 有些状态标明的是量变到质变,仅通过枚举值不好说明;

    通过状态机来补充静态数据结构描述的不足;对于一个业务对象而言,其所有改变数据值的业务功能都应该体现在状态机上。当两个业务对象之间的状态有关联时,则通过业务功能(描述或者编号)联系起来,提示开发人员这是要在一个事务中处理的。

    一般系统中涉及算法设计几乎没有,大多数选用经典算法即可。所以软件设计中,数据结构+状态机的设计基本上是可以描述系统功能,再辅以实现方面的设计(序列图、类图等)。



转载于:https://my.oschina.net/u/1053238/blog/378079

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值