基于状态机模型的编程方法及其框架软件设计

来源:互联网 发布:网络分销渠道 编辑:程序博客网 时间:2024/04/29 04:11

1. 基于状态机模型的编程方法

        1.1 经典编程方法学

                结构化方法即所谓面对过程方法,将所有系统抽象(封装)成3个过程,即输入流+处理流+输出流(其实这是一种很优雅的模型,非常具有一般性,试想所有能被计算机解决的问题都可以被这个非常简单模型所描述,而OO想做到这一点可能需要使用更加复杂和更加多的模型),然后再对每个流程按照这个模式(输入+处理+输出)进行细分,直到细分到不需要在继续细分为止成为最终的系统构件级的模块。该方法学的封装工具就是过程,一般包括输入流、输出和处理3个过程。相应的系统动态(行为)建模工具就是数据流图和控制流图,数据流图模型用于捕捉系统的数据驱动行为,控制流图用于描述系统的事件驱动行为。

                 面对对象方法是将系统抽象成具体的对象,其静态建模工具是类,关系等,动态建模工具有顺序图,活动图等。面对对象的方法学最主要的优点是将计算模型与现实问题很直观的用对象和类的概念对应起来,使建模过程变得相对比较轻松,很容易被建模者接受。

       1.2 面对对象方法面临的编程挑战

                因为面对对象的方法跟现实问题之间表现的亲和性,导致了面对对象方法的盛行,也正因为如此,这种使用这种建模方法得到的模型从本质上来说不是最适合计算机处理的模型。OO使用类来封装数据和操作,换句话说就是将系统按照类的思想进行分解,最终得到一个个跟现实问题域对应的一个一个的类,这种模型虽然很容易被理解,但是这种分解方法很难保证最终的模块之间的数据独立性,当涉及到并发以后就很容易产生竞争、死锁等并发问题,这个时候就需要采取很多策略来保护共享数据,比如加锁等,这不仅增加了系统的开销而且可能会带来新的问题,比如饿死。要想完全避免死锁和饿死等数据冲突问题,就需要设定严格的加锁协议和解锁协议,使得原本简单的问题变得复杂。而所有问题的本质就是数据独立性,如果并发模块之间没有数据耦合的话就不需要考虑竞争问题,有没有可能从建模阶段就能保证模块具有这种性质呢?这就必须从方法学的层次来解决这个问题。

        1.3    基于状态机模型的编程方法

                状态机模型往往是作为面对对象方法中的一个建模工具而被人们所熟悉,其实该模型具有很强的描述系统行为的能力,尤其是针对具有事件驱动的并发的特征的问题,用状态机来建模是非常合适的,并且一个状态机可以直接映射成一个线程,很适合计算机处理。所以有没有可能将状态机作为一种构建系统的基本模块来对系统进行分解呢?或者说有没有一种基于状态机模型的软件设计方法?答案是肯定的,事实是将状态机提升到软件设计方法学的层次而不仅仅是一个建模工具的来使用,将会使很多原本复杂的问题都简单化。

原创粉丝点击