《WF本质论02》.pdfVIP

  • 59
  • 0
  • 约5.56千字
  • 约 27页
  • 2015-11-01 发布于河南
  • 举报
《WF本质论02》.pdf

部 析 WF 17 对象的列表,那些语句将会一个接一个、有顺序地执行。我们发现,ProgramStatementBlock和 C# 的语句块只有一个区别,那就是ProgramStatementBlock使用了书签,而C#没有。这意味着 它业已成为可恢复的语句块,同时拥有了线程以及进程灵活性。 虚构运行时所执行的程序实际上就是一个ProgramStatement对象。这意味着现在可以开始 构建如下所示的“Open, Sesame ”了 : 对,就是这样!虚构运行时中的“Open, Sesame ”程序现在已经成为一组有层次结构的语 句组件了。这个层次结构就是一个由适当的语句组件列表所配置好的ProgramStatementBlock 对象。 1.3.1 复合语句组件 ProgramStatementBlock是一个用于可恢复程序控制流的通用语句组件。像C#这样的编程语 言还包括其他的控制流构造(比如if, switch, for, while和foreach ),对于编写一个比“Open, Sesame ”复杂的程序,这些都是必不可少的。 让我们来看看用其他的控制流结构来实现可恢复语句组件的情况,领略一下这是多么简单。 第一步,我们可以快速地为复合语句组件 (Composite Program Statements )(包含其他语句组 件的语句组件)建立一个基类: 基类建立之后,我们将ProgramStatementBlock改为派生自CompositeProgramStatement 类 表达式和属性(property )的数据绑定不是本章的议题。 18 第1 章 CompositeProgramStatement 类是从ProgramStatement 类继承下来的,它定义了一个 IListProgramStatement类型的属性(property ),用来存放复合语句所包含的语句集。集合中语 句的执行都是由CompositeProgramStatement管理的。 现在,我们可以轻松地编写类似的控制流结构了。以下是提供了分支结构的复合语句组件 (我们假设已经存在了BooleanExpression类的定义,这个类有个返回Boolean值的Evaluate成员 方法): 下面是另一个复合语句组件类,这个类提供了循环结构: 部 析 WF 19 看吧,只要这样做,我们就拥有了能够用于构造可恢复程序的可恢复分支和循环构造了。 1.3.2 控制流的健壮性 我们的ProgramStatementBlock和其他一些复合语句组件确实可以工作了,但这一切似乎来 得太快了些,以至于丧失了一些实现初衷。 为了让ProgramStatementBlock工作得正确无误,我们需要保证它所包含的语句组件按照既 定的顺序执行。坦白地说,ProgramStatementBlock 中的代码没有任何错误。但是,怎样来阻止 ProgramStatementBlock 以外的代码去调用Read (包含在ProgramStatementBlock 内)的Run方法 呢?又如何去阻止Read (或者其他任何包含在ProgramStatementBlock 内的语句对象)在发出已 完成的信号后继续执行呢? 我们需要如下保证: • 一个程序语句组件只能由包含它的(父)复合语句组件(包含在CompositeProgram- Statement.Statements集合中)执行。 • 在发出已完成的信号后,程序语句组件不能再做任何工作(不能有挂起的书签)。另一种 表述这些需求的途径是用先前介绍过的自动机来描述交互式语句组件的生命周期: • 只有语句组件的父亲才能将它从Latent状态迁移到Running状态。 • 语句组件的父亲需要知道它是何时从Running状态迁移到Done状态的。 • 在语句组件迁移到Done状态后,不能再做任何工作(不能有挂起的书签)。

文档评论(0)

1亿VIP精品文档

相关文档