CN101443768A - 描述及开发动态行为应用系统的方法与系统 - Google Patents

描述及开发动态行为应用系统的方法与系统 Download PDF

Info

Publication number
CN101443768A
CN101443768A CNA2006800259838A CN200680025983A CN101443768A CN 101443768 A CN101443768 A CN 101443768A CN A2006800259838 A CNA2006800259838 A CN A2006800259838A CN 200680025983 A CN200680025983 A CN 200680025983A CN 101443768 A CN101443768 A CN 101443768A
Authority
CN
China
Prior art keywords
frame
event
activity
type
attached bag
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2006800259838A
Other languages
English (en)
Inventor
夏寿民
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN201210100410.4A priority Critical patent/CN102736919B/zh
Publication of CN101443768A publication Critical patent/CN101443768A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Computer And Data Communications (AREA)
  • Multi Processors (AREA)

Abstract

对动态应用系统行为进行建模的一套系统、过程和过程的运用方法以及开发这种动态行为模型的方法。一个动态系统以及相应的操作方法来对普遍的复杂而且动态的行为进行建模。为了对一个分布式环境中的应用系统进行建模,本发明采用了一个外部的DS来对这个系统的外部行为进行建模,而采用一个自主系统来对这个应用系统的反应式行为进行建模,以及一个内部DS来对这个应用系统的内部主动式行为进行建模。表示DS以及它的组件的图形化语言。一个系统化方法,从外部行为推导出反应式行为或者反过来,从反应式行为推导出外部行为。

Description

描述及开发动态行为应用系统的方法与系统
技术领域
本发明与流程图, 活动图, 业务流程, 流程建模, 工作流, 状态机, 协 议规程以及应用软件设计与实现有关。 背景技术
按照传统的做法, 可以有两种不同途径来对一个系统的行为进行建模。 —种途径是关注系统的内部主动式行为,而另一种途径则关注系统对外部事 件的反应式行为。这两种途径表现为 UML中两种不同风格的图画: 关注主动 式行为的"活动图 (Act ivi ty Diagram ) "和关注反应式行为的"状态图 ( Statechart ) "。我们把前一种途径称为"主动式行为建模"而把后一种途径 称为"反应式行为建模"。
主动式行为建模语言包括流程图, 业务流程建模符号 (BPMN ) , XML流 程定义语言( XPDL ), 业务流程执行语言( BPEL )和 UML活动图。 BPMN和 UML 活动图都在一个图画中使用节点来表示要执行的活动,而使用连接两个节点 的链接来表示这些活动的顺序。 在另一方面, XPDL和 BPEL用一个 XML句法 替代一个图形来定义这些活动节点和它们之间的链接。
虽然这些主动式行为建模语言在描述一个系统的内部主动式行为时有 用, 但它们在描述对随时可以发生的外部事件做出的反应式行为时有所不 足。 一般的解决办法是定义一些特殊的事件检测活动, 比如 BPMN 和 BPEL 中的"接收(receive) "活动, 来检测这些可能发生的外部事件。 由于这些外 部事件随时都可能发生,因此不得不在一幅图的各个地方插入各种事件检测 活动。 然而, 和一个状态机不同的是, 这些主动式行为的建模图画没有一个 能把事件检测活动集中在一起的"状态"机制。 结果导致这些事件检测活动散 布在图画中的各个地方,从而使得在运行时刻要想知道某个时刻一个应用系 统在等待哪些外部事件变得非常困难。 这种方法的主要缺点在于如杲在图画中的关键点没有插入正确的事件 检测活动,那么一些意外的事件会被漏掉,应用系统就有可能会因此而崩溃。 为了克服这个问题, 一个设计者会试图在整个图画中布满各种事件检测机 制。 而这样又会导致一个过度复杂的图画。
这种方法的另一个不足在于这些事件检测活动是按照一种随意、而没有 系统的方式布置在图中, 这使得验证各方行为是否一致的工作变得非常困 难。 许多重要的系统设计方面的问题就是由这个不足所造成的。
因为一个主动式行为的建模语言无法;艮好地支持对外部事件做出的反 应式行为, 所以也有针对反应式行为而设计的建模语言来解决这个问题。
反应式行为的建模语言包括有限状态机(FSM ), UML的状态图以及动态 状态机(Dynamic State Machine)。 一个纯粹的 FSM状态图包括若干个状态 及这些状态的向外的迁移 (Transi tion ), 而且每一个迁移的外部事件都定 义得非常清楚。 当处于某个状态时, FSM在等待所有可能的外部事件。 当收 到一个适当的外部事件时,会触发一个迁移, 而且伴随着这个迁移会执行一 个关联的动作。 当一个迁移发生之后, 当前状态就变成不活跃的, 而另外一 个状态会成为活跃的。然后这个 FSM会等待与这个新活跃的状态相关联的另 外一組事件。 因此, 在任何时候, 一个 FSM—般都处于某个状态在等待可能 发生的各种外部事件。
一个純粹的 FSM有几个缺点。比如,純粹的 FSM没有内存就是一个局限。 因为没有内存,所以纯粹的 FSM的用处就非常有限。因为它的状态没有内存, 任何状态变化或者历史信息, 比如一个筒单的计数器,都必须通过定义额外 的状态来保存这些变化。假如一个计数器有无限取值的可能,那么就会需要 无限多个的状态。
从一个纯粹 FSM 扩展出来的有限状态机 (EFSMs ) 或者寄存自动机 ( Regi s ter Automata )为每一个状态都增加了内存或数据变量以存值, 比 如数字和计数器等, 这克服了纯粹 FSM的一个主要问题。 因此 EFSM被广泛 地用于反应式系统建模。
当 EFSM被用来为现实世界的事件或行为进行建模时, 人们经常会发现 一个分层的状态或者嵌套的状态对减少状态的数量以及组织一组复杂的状 态有帮助。比如, UML的状态图(Statechar t)及 STATEMATE就是这样的例子。 状态图(S tatechar t)这个术语在这里就用来专指一个分层的有限状态机。
虽然一个反应式行为建模语言适合用来处理外部事件的,但它却忽略了 如何描述系统内部的一些复杂的主动式行为。正如我们已经从一些主动式行 为建模语言所了解到的,这些内部主动式行为可以是非常复杂的。 因此需要 能把反应式行为建模语言和主动式行为建模语言结合起来使用。
另外一个现有的主动式行为建模语言和反应式行为建模语言共有的缺 点是它们都只能描述一个单一系统的行为。它们无论用哪种方式都无法有效 地描述一个父系统内的组件间的复杂的内部消息交换。而一个分布式系统恰 恰就包含多个相互通信,彼此协调的子系统, 所以缺乏对多方行为的支持对 一个分布式系统的限制非常大。
除了上面提及的主动式行为建模和反应式行为建模,还有一些其它语言 用来描述两个交流系统之间的协议。 Web服务编排描述语言(WS- CDL )就是 这样的一个例子。 一种可能的应用系统开发过程是用 WS- CDL来定义协议, 然后用另一种语言来设计一个参与系统的行为,比如 BPEL, XPDL或者 BPMN。 但是, 由于这些语言间存在的差异, 从一个协议映射到两个参与系统, 而且 要保证这两个系统彼此协调, 是有很多问题的。
因此需要一个能把主动式行为建模语言和反应式行为建模语言都统一 起来的建模语言 ,并且它能够描述现代分布式计算环境中的多方参与的动态 行为。 本发明正是提供了这样一个建模语言的解决方法。
发明内容
本发明描述设计及开发具有动态行为的应用系统的方法和系统。
本发明是旨在改进我们用图画方式描述一个应用系统的动态行为的方 法, 以便用一个计算机软件或硬件来实现这个系统。
本发明还旨在提供必需的方法及过程来构造设计工具,代码生成器以及 运行平台来实现定义好的动态行为。
为了实现这些目的, 本发明提供了描述应用系统的动态行为的一套系 统、 过程和过程的运用方法以及开发这种动态行为模型的方法。
这个发明用一个动态系统(即 Dynamic System, 简称 DS )类型来描述 一个应用系统的动态行为。 一个 DS类型可以是简单的或组合的。 一个简单 的 DS类型有一个行为类型来描述这个应用系统的简单行为。 一个组合的 DS 类型 (模型 1的)有若干个阶段机 ( Phased Machine )类型用来描述复杂的 顺序和并行的行为以及一个结束情况集或一个结束函数。每个阶段机类型有 一个或多个阶段 ( Phase )类型和一个静态实例数(也可以可省略的)。 每个 阶段类型有一个子 DS类型以及零个或多个迁移。 每个迁移有一个迁移条件 和一个目标阶段。
如果定义了一个结束函数, 它会返回一个结束代码,该结束代码标识了 一个所述组合系统类型实例结束时的条件。如果定义了一个结束情况集,每 个结束情况包括一对结束条件和结束代码,该结束条件描述一个所述组合系 统类型实例结束时的条件, 而该结束代码则标识对应的结束条件;
一个阶段机类型可以用多个阶段类型来描述组合 DS中的顺序行为, 而 另一个阶段机类型可以只用一个阶段类型来描述所述组合 DS中的并行行为。
所述 DS类型可以特例化为一个自主系统 (即 Proact ive Sys tem, 简称 PS )类型来描述一个在分布式环境中与其他系统交流的系统的反应式行为。 一个 PS类型可以是简单的或者組合的。 一个简单的 PS类型是一个简单 DS 类型的特例, 它的行为包括一个外部 DS (即 Externa l DS , 简称 Ext- DS ) 类型以及跟在这个 Ext- DS 类型后面的内部 DS (即 Internal DS , 简称 Int-DS )„ Ext- DS类型描述了和另外一个系统通讯时会发生的外部事件。 而 Int-DS 类型则描述为响应所发生的那些外部事件而执行的内部动作。 一个 组合 PS类型是一个组合 DS的特例。 因此, 它和一个組合 DS类型是相同的, 除了它包含的是子 PS类型, 而不是子 DS类型。
一个 Ext- DS类型也是一个 DS类型的特例。 一个 Ext- DS类型可以是简 单的或组合的。一个简单的 Ext- DS类型是一个简单 DS类型的特例, 它的行 为是一个事件类型, 可以用来描述通讯协议中的一个向内的外部事件类型。 而一个组合 Ext- DS类型是一个组合 DS类型的特例。 因此, 它和一个组合 DS类型是相同的, 除了它包含的是子 Ext- DS类型, 而不是子 DS类型。
一个 Int- DS类型也是一个 DS类型的特例。 一个 Int- DS类型可以是简 单的或组合的。一个简单的 Int- DS类型是一个简单 DS类型的特例, 它的行 为是一个动作类型, 可以用来描述待执行的内部动作。 一个组合 Int- DS类 型是一个组合 DS类型的特例。 因此, 它和一个组合 DS类型是相同的, 除了 它包含的是子 Int- DS类型, 而不是子 DS类型。
在运行时, 一个 DS类型, 包括 PS类型, Ext- DS类型和 Int- DS类型, 可以生成多个 DS实例(Ins tance)。一个 DS实例可以是简单的或组合的。一 个简单的 DS实例有对它的 DS类型的一个引用(Reference)和对执行它的行 为的成果进行记录的一个结果。 一个组合 DS 的实例包含有对它的组合 DS 类型的一个引用,一个结果以及若干个阶段机。每一个阶段机都有对它的阶 段机类型的一个引用,一个当前阶段以及若干个阶段。每个阶段有一个对它 的阶段类型的引用和一个子 DS类型。
在一个 DS实例生成以后,在运行时刻,这个 DS实例的各个部分可以在 活跃状态和非活跃状态之间切换, 以反映现实世界中一个系统行为的演进。 和一个 DS实例类似, 在运行时刻, 一个 Ext- DS , Int- DS和 PS实例的各个 部分也都可以在活跃状态和非活跃状态之间切换,以表现现实世界中一个所 对应系统的行为的演进。
为了描述当一个简单 PS变成活跃状态后要立即执行的 Int- DS , 可以在 这个简单 PS类型的 Ext - DS中设定一个预定义的"开始"事件。 而为了描述当 一个简单 PS变成非活跃状态之前一瞬间要执行的 Int- DS, 可以在这个简单 PS类型的 Ext- DS中设定一个预定义的"结束"事件。
使用 DS模型的一个主要优点在于整个设计流程只使用了一个一致性的 通用模型,只是在不同的设计步骤会用到这个通用模型的某个特殊模型来关 注某个特定行为。
在本发明中提供了几种设计方法, 从而可以从协议规范 (protocol specif icat ion )推导出一个与其他系统有交流的系统的行为。 首先, 遵循 一个通用性的转换方法, 从一个角色的每一个协议都推导出一个参与者 PS。 然后, 把这些参与者 PS合并成一个角色 PS。 这些设计方法可确保协议规范 和通讯各方保持彼此一致。
这些设计方法中用到的某些组件可以被扩展得更具通用性,以用于其他 行为建模语言。一个尚待定义的 Ext-DS被扩展成一个尚待定义的外部活动, 用于描述要接收某些尚待定义的外部事件的活动。 而一个尚待定义的 Int-DS被扩展成一个尚待定义的内部活动, 用于描述要执行某些尚待定义 的内部动作的活动。
一个通用性的转换方法是用来把一个组合活动从协议规范转换为一个 参与者行为规范。这个方法包括把每一个描述参与者要接收事件的向内的简 单活动,替换成一个反应式组合活动,这个反应式組合活动把这个向内的简 单活动作为它的外部活动,而且用一个尚待定义的内部活动来描述为响应所 发生的向内的简单活动而执行的活动;并且把每一个描述参与者要发送事件 的向外的简单活动,替换成一个反应式组合活动,这个反应式组合活动有一 个尚待定义的外部活动,用于描述待接收的事件, 而且把这个向外的简单活 动作为它的内部活动, 以对发生的尚待定义的外部活动做出响应。
本发明提供了几种实施例以便用类似的方法分别采用 UML状态图、 UML 活动图、 BPMN和 BPEL语言来描述主动式行为和反应式行为。
本发明还提供了一个方法来从一个参与者组合活动推导出一个描述协 议的协议组合活动。这个方法包括: 复制一份描述一个参与者行为的参与者 组合活动;并且把所述参与者组合活动中既不接收向内事件也不发送向外事 件的各个简单活动改变为空 (Nul l )活动。
本发明中提供了一些 DS类型的图形化表示法, 包括 PS类型, Ext-DS 类型和 Int- DS类型。 一个 DS类型可以图形化地以一个包含框来表示。一个 代表組合 DS类型的包含框内可以有若干个子包含框, 若干个双向的交流链 接, 若干个生成箭头, 若干个迁移箭头以及若干个结束点。 每一个这些子包 含框代表了一个简单的或者组合的子 DS。 一个组合子 DS可以把它的子子包 含框画在它的框内。一个至少带有一个迁移箭头的子包含框代表了一个顺序 的子 DS, 而一个不带任何迁移箭头的子包含框则代表了一个并行的子 DS。
一个简单的子 PS可以图形化地用一个带有两个子包含框的包含框来表 示。 其中之一的子包含框代表了描述待接收外部事件的 Ext- DS, 而另一个 子包含框则代表了用于描述为响应所发生的外部事件而执行的内部行动的 Int-DS。
借助本文的其他部分, 包括附图及权利要求,可以体现本专利的其他特 征和优势。
下面会结合附图更进一步详细介绍本发明的特性和优势,以及各种实施 例的结构和操作。
附图说明
图 1表示的是一个简化的框图, 代表了一个分布式计算环境的例子; 图 2 表示的是一个简化的框图, 展示了一个可以用来实施本发明的计 算机系统;
图 3表示的是一个包含子 DS树图的 DS;
图 4 表示的是一个简单 DS;
图 5 表示的是一个组合 DS;
图 6 表示的是一个结束情况, 它包括一对结束条件和结束代码。 图 7 表示的是一个 DS常见的生命周期;
图 8 表示的是协议, 参与者 PS和角色 PS;
图 9 表示的是一个简单的 Ext- DS;
图 10表示的是一个简单的 PS;
图 11表示的是一个简单的 Int- DS;
图 12 表示的是用图形语言表示的事件检查函数 (Matching procedure) 的伪代码;
图 13表示的 ^图形语言表示的 函数 (React procedure)的伪^马; 图 14 表示的是用图形语言表示的动作执行函数(Act procedure)的伪 代码;
图 15A表示的是用没有任何迁移的并行阶段机来模拟一个并行单元; 图 15B表示的是用只有一个迁移的并行阶段机来模拟一个并行单元; 图 16 表示的是一个模型 1的组合 DS;
图 17 表示的是一个用图形语言表示的 DS例子;
图 18 表示的是另一个用图形语言表示的 DS例子;
图 19 表示的是一个用图形语言表示的组合 PS例子;
图 20 表示的是一个組合 PS的例子, 它包含了一个子 PS, 而这个子 PS 又包含一个组合的 Ext-DS和一个组合的 Int- DS;
图 21 表示的是一个包含了 "开始"、 "结束 "预定义事件的组合 PS;
图 22 表示的是一个没有包含"开始"预定义事件的 X- Server参与者 PS; 图 23表示的是一个包含了 "开始"预定义事件的 X- Server参与者 PS; 图 24 表示的是一个简单 DS的类型(Type )属性(propert ies ) 和实 例 ( Ins tance )属性;
图 25 表示的是用 UML 类图 (class diagram )来定义的一个简单 DS 的类型属性和实体属性
图 26 表示的是一个简单 Ext-DS的类型属性和实例属性; 图 27 表示的是一个用 UML类图来定义的筒单 Ext- DS的类型属性和实 例属性;
图 28 表示的是一个筒单 PS的类型属性和实例属性;
图 29表示的是一个用狐类图来定义的筒单 PS的类型属性和实例属性; 图 30 表示的是一个筒单 Int- DS的类型属性和实例属性;
图 31 表示的是一个用 UML类图来定义的筒单 Int-DS的类型属性和实 例属 >)·生;
图 32A表示一个带有一个结束情况集的模型 1的组合 DS的类型和实例; 图 32B表示一个带有一个结束函数的模型 1的组合 DS的类型和实例; 图 32C表示模型 1的组合 PS类型和实例。
图 33 表示的是基于 DS模型来设计,编译和运行一个应用软件的流程。 图 34 表示的是基于 DS模型来设计一个应用软件, 然后在不同平台上 编译和运行这个应用软件的流程;
图 35 表示的是一个用 UML类图来定义的模型 1的组合 DS的类型属性 和实例属性;
图 36 表示的是图 23中参与者 PS "X- server"的组合 PS类型; 图 37 表示的是一个与客户端和服务端有交流的系统" X";
图 38 表示的是协议的例子 "协议 0"和"协议 1";
图 39 表示的是从图 38中"协议 0"推导出来的" X- server"的参与者 PS; 图 40表示的是从图 38中"协议 1"推导出来的" X- cl ient"的参与者 PS; 图 41 表示的是协议 "协议 2";
图 42 表示的是如何把参与者 PS合并成一个角色 PS;
图 43 表示的是如何加上内部的交流与行为;
图 44 是使用一个组合协议 "协议 2"的" X"的角色 PS;
图 45 表示的是用 UML活动图描述的 "协议 0"和"协议 Γ;
图 46 表示的是用 UML 活动图表示的从图 45 中"协议 0"推导出来的 "X- server";
图 47 表示的是用 UML 活动图表示的从图 45 中"协议 1"推导出来的 "X-cl ient";
图 48 表示的是用 UML 活动图的"分叉"和"汇合"节点来描述由 "X- server"和" X - cl ient"合并而成的角色 PS;
图 49 表示的是用 BP腿来描述的"协议 0"和"协议 1";
图 50 表示的是用 BP丽来描述从"协议 0"推导得到的" X-server";
图 51 表示的是用 BP丽来描述从"协议 Γ推导得到的" X- cl ient";
图 52 表示的是用 BPM 的"分叉 ( Fork ) "和"汇合 ( Join ) "并行网关 ( Paral lel Gateway )来描述由" X- server"和" X - cl ient"合并得到的角色 PS; 图 53 表示的是用 BPMN 的并行框图 (Paral lel Box ) 来描述由 "X- server"和" X- cl ient"合并得到的角色 PS;
图 54 表示的是用状态图描述的"协议 0"和"协议 Γ;
图 55 表示的是用状态图描述的由 "协议 0"推导出的" X- server";
图 56 表示的是用状态图描述的由 "协议 Γ推导出的" X - cl ient";
图 57 表示的是用状态图描述的由 "X- server"和" X- cl ient"合并得到的 角色 PS;
图 58 表示的是由" X-server"参与者组合活动推导出的一个协议; 图 59 表示的是如何遵循本发明所描述的设计流程来设计一个应用系 统, 然后在不同的运行平台上运行这个应用系统。
图 60表示的是一个组合活动,它包含有顺序的子组合活动和并行的子 组合活动。 其中有一个子组合活动是一个反应式组合活动;
图 61 表示的是一个组合活动,它包含有顺序的子组合活动和并行的子 组合活动以及一个交流链接;
图 62 表示的是一个组合活动, 它包含有子组合活动,一个交流链接以 及两个结束点; 图 63表示的是一个组合活动,它包含有顺序的子组合活动和并行的子 组合活动。 外部活动是通过一个箭头和内部活动相连; 具体实施方式
下面会通过一个或多个实施例来描述本发明。下面的描述中会提供很多 细节来更加透彻地阐明本发明。但是显然对一个本领域的技术人员而言, 即 使没有这些描述, 他也可以实施本发明。 另一方面, 本文没有对一些众所周 知的特性进行详细描述以免使得本发明重点不清。
现实世界中的许多系统都有复杂而动态的行为。一个行为之所以是复杂 的, 是因为它会涉及许多系统单元, 而一个行为之所以是动态的, 则是因为 它会随着时间而演变。对一个复杂行为建模的基本指导原则是先对复杂行为 进行分解然后再各个击破 (建模)。 本发明用动态系统 ( DS )和它的子系统 (子 DS )来对任何的复杂行为进行分解与建模。 这些复杂行为可以在很广 的的范围内适用, 既可以是图 1中所描述的实时的或者分布式的软、硬件系 统, 也可以是现实世界中像人和组织这样的实体。
一个分布式的环境一般都是由多个通过网络互联的硬件系统组成。每个 硬件系统如图 2所示, 包含有一个中央处理单元(CPU ), 存储器(ROM, RAM 和磁盘) 以及输入输出设备。
这硬件系统是一种计算机,它可以是 PDA ( Personal Data Ass i s tant ), 笔记本、 桌面机, 也可以是工作站、 主机、 实时控制设备、 网络设备或者任 何具有计算能力和输入输出能力的设备。
在本发明中, 类型 (Type )或者类 (Class )与实例 (Instance )是有 区别的。 类型或类是一个设计阶段的概念, 用来设定一个实体(Ent i ty )的 某些行为属性。 而实例是运行时刻的概念, 它的行为属性是由所属的类规定 好的。 除了特别申明为类的, 本发明中所用的术语一般都指具体的实例。 用 DS模型描述动态行为 为了把复杂的系统行为分解成更小的组件, DS模型借助了这样一个常 识, 即我们所在的宇宙有两个基本的时间和空间维度这一事实。 沿着时间维 度一个复杂的系统可以分解为顺序的子 DS, 而沿着空间维度一个复杂的系 统分解为并行的子 DS。 在时间和空间的任何一点上, 一个 DS可以被分解为 多个并行子 DS和多个顺序子 DS。 而且每个子 DS都可以沿着这两个维度继 续分解为它自己的子 DS。
一般而言, 一个 DS可以包含一组顺序的子系统和一组并行的子系统。 因为每个子系统又可以包含它自己的子系统, 因此一个 DS—般可以分解成 由子系统构成的树状图。 在这棵树上处于中间层次的 DS对它的子系统而言 是父系统, 而对它的父系统而言又成了子系统。 因此根据不同的角度一个 DS可以被称作 DS, 父 DS或者子 DS。 如图 3所示, DS0 是 DS1和 DS2的父 系统。 因此 DS1是 DS0的子系统, 而同时它又是 DS3和 DS4的父系统。
当描述互联世界里一个系统的行为时,需要同时考虑外部和内部准备就 绪的情况。 一般而言, 只有当一个系统自己准备就绪, 并且某个外部条件后 被满足后才能执行一个特定的动作。本发明也会反映出系统间的这些相互依 赖关系。
一个 DS可以是简单的或者组合的。 一个简单的 DS (如图 4所示)有一 个行为和一个结果。 这个行为就是用来描述 DS的行为, 而结果则可以被这 个行为用来记录行为执行完毕后的最终成果。一个行为的例子可以是当特定 条件满足时, 一个 DS就执行一个特定的动作。
请注意:在图 4中一个筒单的 DS是用一个在顶部有标签的框来表示的。 而 DS的组件则用画在大框内部的小框表示。 本文档都会使用这个规范。 一个组合的 PS (如图 5所示)有如下组件:
• 零个或者多个阶段机 501 , 是用来表示这个组合 DS内的顺序行为。
• 每个阶段机都有一个或者多个阶段 502, 以及一个 ^ 503。
• 当一个阶段机变成活跃状态时, 它的多个^^中的一个就会 成为活跃状态。 当阶段机处于活跃状态时, 它的各个阶段会 根据,自己的迁移定义在活跃状态和非活跃状态间切换。 一般 情况下, 当阶段机处于活跃状态时, 它最多只有一个阶段能 处于活跃状态。
• 一个正常的阶段有一个顺序的子 DS 504 及零个或多个迁移
( Trans i t ion ) 505。
• 这个顺序的子 DS 包含了这个阶段的行为。 它可以是一 个简单的 DS, 或者一个组合的 DS。
• 每个迁移都有一个迁移条件 506和一个目标阶段 507。
• 在^; n 变为非活跃状态时, 另一个^^就会 被选中并成为活跃状态。 一个迁移会指明如果它 的迁移条件得到满足, 它的目标阶段就是在迁移 结束后下一个成为活跃状态的阶段。 这迁移条件 可以使用顺序子 DS结果中的信息或者它在运行时 刻可以获得的任何其他信息来做判断。
• 迁移中指定的目标阶段必须是同一个阶段机中的 阶段。 换言之, 迁移不能够跨越阶段机的边界。 请注意, 一个阶段可以作为多个源阶段的目标阶 段。 另外, 还允许循环迁移, 当前阶段 自己的迁移。 这样就可以描述循环重复的行为。 • 因为任何时候都最多只能有一个阶段处于活跃状 态, 所以从同一个源阶段出来的各个迁移条件必 须是彼此排他的 (mutual ly exclus ive)。
• ^ ·ζ^%^是在运行时刻指向阶段机中处于活跃状态的阶段的 一个指针 ( Pointer )或者一个引用 (Reference ) 。
• 当前阶段, 阶段机可以有两种特殊的阶段。 • 其中一种特殊阶段是初始阶段。 一个阶段机最多可以 有一个初始阶段。 初始阶段的作用是在阶段机成为活 跃状态时选择最先成为活跃状态的阶段。 这个初始阶 段有一个空的顺序子 DS和一组初始迁移。
• 另外一种特殊的阶段是空(Nul l ) 阶段。 当一个阶段机 的^ ; n 指向一个空阶段时, 整个阶段机就变成非 活跃状态。 一个阶段机可以有一个默认的 (defaul t) 空阶段以及零个或多个用户定义的空阶段。 一个空阶 段是不包含任何子 DS 和任何迁移的阶段, 它只有一个 和其他空阶段相区别的独特标识(ID ) 。 默认的空阶段 所预定义的 ID和任何用户定义的空阶段的 ID都不会相 同。 空阶段的这个 ID可以被结束情况或结束条件(在 下文会有描述)用来判定一个组合 DS是否应当结束。 零个或多个并行单元 508
• 每个并行单元包含一个并行的子 DS 509 来代表组合 DS中的并行行 为, 一个静态实例数(也可以可省略的) 510 以及一个用来指明运 行时刻这个并行子 DS是否处于活跃状态的凝 mode ) 511 。 • 这个静态实例数(也可以可省略的)是一个数字, 用来指明当生成 包含它的组合 DS时, 会静态地生成多少个并行子 DS的实例。 如果 省略了静态实例数, 静态实例数的取值默认为 1。 当生成包含它的 组合 DS时, 总会静态地生成一个并行子 DS的实例。 除了这些静态 生成的实例, 在组合 DS 中也可以在运行时刻^^据用户定义的行为 而动态地生成这些并行子 DS 的实例。 动态生成的被称为动态子 DS, 而那些伴随父 DS生成的被称为静态子 DS。 在并行子 DS实例的 数目无法事先确定的情况下, 动态子 DS会 ^艮有用。
• 当一个并行子 DS 在运行时刻变成活跃状态时, 它的 就会被设 置成"活跃的"。 当它变成非活跃状态时, 它的 又会被设置成"非 活跃的"。
• 当一个组合 DS成为活跃状态时, 它所有的并行子 DS的实例都会成 为活跃状态。
• 这些并行子 DS每一个都可以是简单的或者是组合的。
一个包含零个或多个结束情况的结束情况集 512 , 其中每一个结束情况 600 用来指明在哪种情况下整个组合 DS应该变成非活跃状态。 每一个结 / 可以显式地定义为一对 ^疹/ 601 和与之对应的 602 (如图 6所示)。 这个结束条件可以用一个逻辑表达式, 一个数学公式或 者数学符号, 甚至是一段文字描述来设定。 同一个组合 DS中的每一个结 束代码都是不同的。 结束代码通常是由设计工具生成或者由设计人员设 定的一个数值。 当某一个结束条件测试为"真"时, 组合 DS就会结束并且 把对应的结束代码记录在组合 DS的结果中。 根据在结果中记录的结束代 码我们就可以知道組合 DS是在哪种情况下结束的。 另外, 结束情况集也 可以定义为一个结束函数, 这个函数既可以是一个面向函数程序语言的 函数, 也可以是一个面向对象程序语言的方法。 这结束函数会在内部用 到一组隐式定义的结束条件来判断是否满足了某个结束情况, 并返回一 个结束代码以说明具体是哪个结束条件被满足了。
• 一个结束条件的实施例可以是当任何阶段机或者并行子 DS 结束 时, 这个组合 DS就结束;
• 另一个结束条件的实施例是当某一个特定的并行子 DS 结束时, 这 个组合 DS就结束;
• 如果在结束情况集中没有指明结束情况, 默认的结束情况是当所有 的阶段机和并行子 DS成为不活跃状态时, 包含它们的组合 DS就变 成不活跃状态, 同时会把一个预定义的默认结束代码记录在结果 中。 这个默认的结束情况是对任何一个組合 DS都有效的。 • 一个属于整个组合 DS的结果 513 。 这个结果是用来记录一个结束函数返 回的结束代码。 或者, 如果定义了一个结束情况集, 则结果会记录那个 判断为真的结束条件所对应的结束代码。
请注意,如果允许某个組件有多个实例,这个组件就用带阴影的图画表 示。 比如, 在一个组合 DS中可以有若干个阶段机和并行单元。 在一个阶段 机中又可以一个或多个阶段。每个阶段还可以有多个迁移。因此如图 5所示, 每个阶段机, 并行单元, 阶段和迁移都用有阴影的图画表示。
许多现实世界中的系统会随着时间的推移有不同的行为表现。为了表现 这种随时间推移的行为变化, DS 的某些部分会随着时间推移在活跃状态和 非活跃状态之间切换, 但是在任何一个时间点上只有活跃的那部分是生效 的。 因此在 OS内部控制子 DS活跃与否就可以控制系统的行为变化了。
一个 DS的常见生命周期如图 7所示:在一个 DS生成以后, 它会成为活 跃状态或者非活跃状态。 一个活跃状态的 DS在它的行为完成或者结束以后 会变成非活跃状态。 当一个 DS (不管它是活跃的还是非活跃的) 不能再次 成为活跃状态时可以被销毁。在图 7中, 一个长方形代表一个阶段, 这个阶 段可以有一个标签(比如 "已生成")。 一个箭头代表了从一个阶段向另一个 阶段的迁移。一个在长方形边框上的空心小长方形代表一个初始阶段或一个 空阶段, 它表明这个 DS不存在(要么是还没有生成, 要么是已经被销毁)。 一个阶段还可以包含子阶段。 比如, 阶段"已生成 "就包含 "活跃"和"非活跃" 两个子阶段。
在运行时刻可以通过装载相关代码和数据到内存或者持久存储设备来 生成一个 DS类所定义的 DS实例。 然而生成和销毁 DS的具体过程对本发明 来说不是 ^[艮重要, 因此, 这个过程留给实施本发明的应用系统去决定。 应用 系统只需要确保一个 DS实例生成以后它所有的静态组件都会生成, 并且为. 进入活跃状态或非活跃状态做好了准备, 一直到这个 DS最后被销毁。 一个 DS变为活跃(或非活跃)状态的具体过程描述如下: 在运行时刻一个简单的 DS (如图 4所示) 变为活跃(或非活跃)状态 的过程如下:
• 当一个简单的 DS变成活跃状态时, 它的行为就会被执行;
• 当简单的 DS完成它的行为以后, 执行的成果被记录在结果中, 随后这个 简单的 DS就变成非活跃状态。
在运行时刻一个组合的 DS (如图 5所示)变为活跃(或非活跃)状态的过 程如下:
• 当一个組合的 DS变成活跃状态时, 它所有的阶段机和静态的并行单元都 会变成活趺状态;
• 当一个并行单元变成活跃状态时, 它的并行子 DS会变成活跃状态, 而且 这个并行单元的凝/ ^会被设成"活跃的";
• 当一个阶段机变成活跃状态时, 它的阶段之一(并包括该阶段所包含的顺 序子 DS )会变成活跃状态。
• 阶段机中最先成为活跃状态的阶段是根据以下方法加以选定的: 如果阶 段机中只有一个阶段, 这个阶段会被选为当前阶段, 并成为活跃状态。 否则这些阶段之一必须是设定为初始阶段。 在一个阶段机变成活跃状态 时会对初始阶段的这些初始迁移的迁移条件进行判断。 如果某一个迁移 条件被满足了, 对应的目标阶段会被选作为当前阶段, 并成为活跃状 态。
• 当一个顺序的或者并行的子 DS (它可以是简单的或者组合的)成为活跃 状态时, 前文针对筒单或组合 DS 的行为会递归性性地重复发生在子 DS 身上。
• 当一个并行的子 DS后来变成非活跃状态时, 它的^ ^被设置为"非活跃的"; • 当一个顺序的子 DS后来变成非活跃状态时, 它的阶段随之也变成非活跃 状态, 同时这个阶段的迁移条件也会被评估。 如果有一个迁移条件判断 为"真", 相应的目标阶段(可以是空阶段)会变成活跃状态, 而 当前阶 会指向这个目标阶段。 如果没有迁移条件判断为"真", 会默认地把^ 前阶段 向默认的空阶段。
• 当一个阶段机的^ 指向一个空阶段时, 整个阶段机会变为非活跃 状态。
• 任何时候, 当任何一个阶段机或并行单元变成非活跃状态时, 它的组合
DS 的结束情况集将会被评估。 如果显式地定义了一个包含结束条件和结 束代码的集合(如图 6所示), 则任何时候当一个结束条件判断为 "真"时, 对应的结束代码就会被记录在结果中, 然后组合 DS会变成非活跃状态。 如果定义了一个结束函数, 它会测试每一个结束情况, 如果有任何一个 结束情况被满足, 一个对应的结束代码就会被记录在结果中, 然后这个 组合 DS就会变成非活跃状态。 否则, 这个组合 DS会继续保持活跃状态。 • 当一个组合 DS变成非活跃状态时, 它所有的阶段机(包括它们处于活跃 状态的顺序子 DS ) 以及并行单元 (包括它们的并行子 DS )都会变成非活 跃状态。
重复性的行为可以用重复性的阶段来描述。 一个重复性的阶段是一个 阶段, 它的某一个迁移会把它自己作为迁移的目标阶段。
在本发明中支持递归性的 (recurs ive ) DS。 一个递归性的 DS有一个 或多个子 DS具有和递归性 DS 相同的类型, 或者与递归性 DS的直接或间接 父 DS有相同的类型。 有了递归性的 DS, —个相同的行为会在越来越小的范 围内重复。 一般情况下, 当选择不再进一步生成新的递归性子 DS时, 递归 就会被终止。
用 DS来进行行为建模的优点在于:
• DS 的组合结构直接反映了我们所生活的世界是由时间维度和空间维度所 构成的。
• 从时间维度和空间维度来观察东西对人类是一种很自然的事。 它较于现 有的其他行为建模语言所定义的节点和链接赋予了更重要的含义。 因此 DS模型更易于学习和理解。
• 通过控制各种子 DS变成活跃状态和非活跃状态, 一个 DS的行为可以随着 时间非常有序地演进;
• 由若干结束条件与结束代码构成的结束情况集为控制一个组合 DS什么时 候应该结束提供了一种强大而灵活的机制;
• 和许多采用分叉节点和汇合节点的现有技术不同的是, 一个组合的 DS呈 现出来的块状结构組织为它的所有组件定义了一个清晰的生命周期。 • 因为每个子 DS都可以是组合的, 所以 DS模型支持以递归的方式不断细化 对系统行为的描述。
• 通过重复阶段和动态的并行子 DS还可以描述重复的行为和动态的行为; 特殊的 DS: Ext-DS, PS, Int-DS
尽管 DS是一个描述动态行为的强有力的工具, 但为了充分描述一个分 布式环境中与多个对端系统交流的应用系统的行为, 我们还需要使用三种 DS的特例。 第一种是外部 DS (Ext- DS) , 用于描述一个应用系统必须处理的 外部活动, 包括向内的消息和事件。 第二种是内部 DS ( Int - DS ), 用于描述 一个应用系统为了完成某些工作要执行的内部活动。 第三种是把 Ext- DS和 Int-DS集成在一起的自主系统( PS ), 用于描述一个应用系统的反应式行为 和自主行为。
外部 DS ( Ext-DS )
一个 Ext- DS 来定义一个 PS在执行内部动作之前所等待的外部事件。 Ext-DS是 DS的一个特例, 它可以是简单的或者组合的。 作为一个简单 DS的特例, 一个筒单的 Ext- DS (如图 9所示)也有一个行为和一个结果。 它的行为就是一个事件类型。 而事件类型是用来描述一个 PS可能接收的信 号、 消息或者事件的类型。 一个事件类型可以下列语言之一来描述: 1 )一 种程序语言, 比如 C和 JAVA; 2 )—种数据标记语言, 比如 ASN. 1 ( Abs tract Syntax Nota t ion One ); 3 )一种基于 XML的语言, 或者 4 )一种图形语言。 在运行时刻一个简单的 Ext- DS变为活跃(或非活跃)状态的过程如下: • 当一个简单的 Ext- DS变成活跃状态时, 它的事件类型也变成活跃状态。 • 如果随后这个简单的 Ext- DS收到了一个和它的事件类型相符的消息, 那 么这个消息就会被保存下来备以后使用, 然后这个简单的 Ext- DS就会变 成非活跃状态。 否则, 如果这个消息和 Ext- DS的事件类型不相符, 它将 被抛弃掉, 而这个筒单的 Ext- DS会继续保持活跃状态。
一个组合的 Ext- DS和一个组合的 DS相似 (如图 5所示), 只是子 DS 换成了子 Ext- DS而已。 所有这些子 Ext- DS (不论是顺序的还是并行的)都 可以是简单的或者组合的。
因为一个组合的 Ext- DS是组合 DS的一个特例, 前文关于一个组合的 DS变成活跃(或非活跃)状态的过程同样适用于一个组合的 Ext- DS。 只需 将文字中的 DS替换成 Ext- DS就可以了。
当一个简单 PS在运行时刻收到一个向内的事件时,它会调用函数"检查 事件 0 "去检查这个事件是否是它的 Ext-DS中定义的类型相符。这个检查事 件 0函数返回下列值之一:
• 不匹配, 这表示事件类型不相符
• 部分匹配, 这表示事件类型相符, 这个向内的事件已被保存起来供以后 处理, 但是 Ext- DS尚未结束, 因为 Ext- DS还在等待更多的事件; 或者
• 完全匹配, 这表示事件类型相符, 这个向内的事件已被保存起来供以后 处理, 而且 Ext- DS已经结束。
下面用伪代码提供了一个处于活跃状态的 Ext- DS的运行时刻事件检查 函数的范例。 其中参数 "Ext- DS"是用来描述待接收的向内的外部事件的外部
DS , 而参数"事件"是待检查的向内的事件。
请注意, 方括号" [ ] "之间的内容是注释。
检查事件(Ext- DS, 事件) {
如果 Ext- DS是简单的, 检查收到的事件的类型和 Ext- DS的事件类型是否相同; 如果是"否", 返回"不匹配";
否则 [事件类型是正确的]
保存这个事件;
返回"完全匹配";
否则 [Bxt- DS是组合的],
[检查全部阶段机]
对每一个"当前阶段"不是空的阶段机, 执行以下步骤:
为顺序的子 Ext- DS , 递归地调用检查事件 0函数; 如果它返回"部分匹配", 即返回 "部分匹配"
否则, 如果它返回"完全匹配",
逐个检查每一个迁移; '
如果任何一个迁移条件是 "真",
把当前阶段指向迁移的目标阶段; ; 否则 [如果没有一个迁移条件为"真"] ,
把当前阶段的取值设为默认的空阶段; 如果当 不是空阶段,
返回"部分匹配";
否则 是空阶段],
检查结束情况集;
如果有任何结束情况得到满足,
把结束代码记录在结果中;
返回"完全匹配";
否则 [没有结束情况被满足] ,
返回"部分匹配";
否则 [返回 "不匹配"] , 去检查下一个阶段机; [如果 1^亍到 所有阶段才 是"不匹配", 去检查所有的并行单元〗 为每一个活跃状态的并行单元, 执行以下步骤,
对于并行子 Ext-DS递归地调用检查事件 0函数;
如果它返回"部分匹配",返回"部分匹配";
否则, 如果它返回"完全匹配",
设置模状为"非活跃的";
检查结束情况集;
如果有任何结束情况被满足,
在结果中记录结束代码;
返回"完全匹配";
否则 [没有结束情况被满足] , 返回"部分匹配";
否则 [返"不匹配"],去检查下一个并行单元;
[如果执行到这里, 这个事件和所有顺序的 Ext- DS和并行的子 Ext-DS 都不相符, ]返回"不匹配";
}
为了清楚起见,这个事件检查函数也会用本发明后面将介绍的图形语言 表示在图 12中。
内部 DS ( Int-DS )
一旦一个简单的 PS被一个与 Ext- DS完全匹配的事件所触发, 对应的 Int-DS就会被执行。 因此, 一个 Int- DS可以看作一个 PS的行为中主动的 那一部分行为, 或者 PS的主动式行为。
一个 Int- DS是 DS的一个特例, 它可以是简单的或者组合的。作为一个 简单 DS的特例, 一个筒单的 Int-DS (如图 11所示)也有一个行为和一个 结果。这个行为就是一个动作。在本发明中的动作是指不能再进一步分解的 最基本的行为单元。一个动作可以是读写一段信息, 也可以是查找或匹配信 息, 还可以是读 Bxt- DS所保存的事件, 或者是构建、 发送事件, 或者是生 成、 销毁 DS实例, 或者是调用由其它系统执行的复杂动作。 一个动作可以 用面向函数程序语言(比如 C语言)的一个函数来实现, 也可以用面向对象 程序语言(比如 JAVA语言)的一个方法来实现,或者用脚本语言(比如 Linux 的 Shel l语言)的一个脚本来实现。 一个动作也可以用脚本语言、程序语言 的一个代码片断来实现, 或者是用字节代码(比如 Java的字节代码), 甚至 包括汇编语言来实现。 它的执行成果则可以记录在结果中。
在运行时刻一个简单的 Int- DS变成活跃(或非活跃)状态的过程描述 如下:
• 当一个简单的 Int- DS变成活跃状态时, 它的动作也变成活跃状态, 并且 被执行;
• 在它的动作被执行完以后, 这个简单的 Int- DS随之变成非活跃状态。
一个的组合 Int- DS和一个组合的 DS相似(如图 5所示), 只是^;子 DS 换成子 Int- DS而已。 这些子 Int- DS (不管是顺序的还是并行的)都可以是 简单的或者是组合的。
因为一个组合的 Int- DS是一个组合 DS的特例, 前文关于一个组合的 DS变成活跃(或非活跃)状态的过程同样适用于一个组合的 Int- DS。 只需 将文字中的 DS替换成 Int- DS就可以了。
当一个简单 PS在运行时刻收到一个向内的事件时, 它会调用检查事件 函数去检查这个事件是否是它的 Ext- DS中所定义的类型。如果返回值是 "完 全匹配 ",这个简单 PS会调用动作执行函数 "动作() "去执行它的 Int- DS中所 定义的内部活动。 "动作 0 "函数返回下列值之一:
• 错误, 这表示发生了一个错误; 或者
• 正确, 这表示内部活动已经被成功执行
下面用伪代码描述了一个处于活跃状态的 Int- DS的动作执行函数的范 例, 其中参数" Int- DS"是定义要执行的内部活动的内部 DS:
动作(Int- DS) { 如果 Int- DS是简单的,
执行 Int- DS的动作来对保存的事件进行处理;
如果检测到错误, 返回"错误";
否则, 返回"正确";
否则 [Int- DS是组合的],
[检查全部阶段机]
为每一个 不是空阶段的阶段机, 执行以下步骤:
为顺序的子 Int-DS递归地调用动作 0函数; 如果子 Int- DS返回"错误", 返回"错误";
否则, 逐个检查每一个迁移;
如果有任何一个迁移条件是"真",
把当前阶段指向迁移的目标阶段;
否则, 把当前阶段指向默认的空阶段;
如果^ ^^不是空阶段, 对新的 "当前阶段"重复这个过程; 否则,
检查结束情况集;
如果任何结束情况被满足,
ί巴结束代码记录到结果中;
返回"正确"; ' 否则, 去检查下一个阶段机;
[检查所有的并行单元]
为每一个活跃状态的并行单元执行以下步骤,
对并行子 Int- DS递归地调用动作()函数;
如果并行单元返回"错误", 则返回 "错误"; ' 否则,
设置模态为"非活跃的"; 检查结束情况集;
如果有任何结束情况被满足,
把结束代码记录到结果中;
返回"正确";
否则, 去检查下一个并行单元;
}
为了清楚起见,这个动作函数也会用本发明在后面将介绍的图形语言表 示在图 14中。
自主系统(PS )
一个在外部交流或外部事件触发下能做出反应式行为的应用系统可以 用一个自主系统 (即 Proact ive Sys tem, 简称 PS )来定义。
一个 PS是一个 DS的特例, 它可以是简单的或者组合的。作为一个简单 的 DS的特例, 一个简单的 PS也有一个行为和一个结果。这个行为包括一个 外部 DS ( Ext-DS ) 以 面跟着的一个内部 DS ( Int-DS )0 Ext-DS描述了 要发生的外部事件,而 Int- DS描述了为响应所发生的 Ext- DS中定义的外部 事件而执行的内部活动。 Ext- DS和 Int- DS都可以是简单的或组合的。 结果 则可以被 Int- DS用来记录动作执行的成果。
在运行时刻一个简单的 PS变成活跃(或非活跃)状态的过程描述如下: • 当一个简单的 PS变成活跃状态时, 它的 Ext- DS也变成活跃状态; • 当这个简单 PS的 Ext- DS随后接收到一个完全匹配的事件(如前文所述), 这个简单 PS的 Int- DS就变成活跃状态, 并且会被执行;
• 当它的 Int- DS被执行完以后, 这个简单的 PS也随之变成非活跃状态; 一个組合的 PS和一个组合的 DS相似(如图 5所示),只是子 DS被换成 子 PS而已。 这些子 PS (不管是顺序的还是并行的)都可以是简单的或者组 合的。
因为一个组合的 PS是一个组合 DS的特例, 前文关于一个组合 DS变成 活跃(或非活跃)状态的过程同样适用于一个组合的 PS。 只需将文字中的
DS替换成 PS就可以了。
当一个 PS在运行时收到一个向内的事件时, 它会调用反应 0函数去处 理这个事件。 反应函数返回下列值之一:
*未做任何事情, 这表示没有执行任何内部活动;
*未作部分完成, 这表示内部活动的一部分被完成了, 但是 PS 尚未结束; 或者
•完成, 这表示内部活动被全部完成, 而且 PS已经结束。
下面用伪代码描述了一个处于活跃状态的 PS在收到事件后的反应函数 的范例, 其中参数" PS"是做出反应的 PS, 参数"事件"是待处理的事件: 反应 (PS,事件) {
如果 PS是简单的,
用事件作为参数, 为 PS的 Ext-DS来调用检查事件 ()函数;
如果返回结果是"不匹配", 返回"未做任何事情";
否则如果返回结果是"部分匹配", 返回"部分完成";
否则 [返回结果是"完全匹配"],
调用动作 0函数, 执行 Int-DS;
返回"完成";
否则 [PS是組合的],
[检查全部阶段机]
为每一个当前阶段不是空阶段的阶段机执行以下步骤:
对于顺序的子 PS递归地调用反应()函数;
如果顺序的子 PS返回"部分完成", 返回"部分完成"; 否则如果它返回"完成", 检查每一个迁移;
如果有任何一个迁移条件为"真",
把当前阶段指向迁移的目标阶段; 否则 [没有迁移条件为真]
把当前阶段设置为默认的空阶段;
如果当前阶段不是空阶段, 返回"部分完成"; 否则 [当前阶段是空阶段] ,
检查结束情况集;
如果有任何结束情况被满足,
把结束代码记录在结果中;
返回"完成";
否则 [没有结束情况被满足] ,
返回"部分完成";
否则 [返回 "未做任何事"],去检查下一个阶段机 ; [如果执行到这里, 所有的阶段机都是返回 "未作任何事情" , 去检查所有的并行单元]
为每一个活跃状态的并行单元执行以下步骤:
对于每一个并行子 PS递归地调用反应 0函数 如果并行子 PS返回"部分完成", 则返回"部分完成"; 否则如果它返回"完成",
设置模态为"非活跃的";
检查结束情况集;
如果有任何结束情况被满足,
把结束代码记录在结果中;
返回"完成";
否则 [没有结束情况被满足] , 返回"部分完成"; 否则 [返回 "未作任何事情"] ,去检查下一个并行单元.
[如果执行到这里, 未做任何事情] 返回 "未做任何事情";
} 为了清楚起见,上述反应函数也会用本发明后面将介绍的图形语言表示 在图 13 中。
在不同的步骤中使用 Ext- DS, PS和 Int- DS这些特殊的 DS , 比用一个 通用性的 DS有很多额外的好处:
• Ext-DS , PS和 Int- DS提供了多种层面的抽象方法, 使得定义分布式环境 中的复杂系统行为更加方便, 因为它们中的每一个都以一种特殊的方式 帮助设计者专注在系统行为的某一个方面。
• PS 是对基于状态机的传统技术(比如状态图技术)来做扩展和改进的。
而 Int-DS是对基于流程图的传统技术(比如 BPMN技术和 UML2. 0活动图 技术) 来做扩展和改进的。
• 因为 Ext- DS, PS和 Int- DS中的每一个都是同一个 DS模型的特例, 所以 在设计的每个层面上都有很强的一致性, 使得本发明更加容易学而且容 易懂。
• 正如在本发明后面会展示的, 因为这种一致性, 可以系统化地、 机械地 从一个用 DS所定义的通讯协议来推导出来一个用 PS所定义的反应式行 为。 因此本发明为解决如何保证通讯协议以及参与各方彼此一致的难题 提供了一种解决方案。
DS, Ext-DS, PS和 Int-DS的筒化模型
到目前为止, 我们已经描述了 DS的基本模型以及它的一些特例, 比如
Ext-DS , PS和 Int- DS。 在本发明中它们都被称为 DS模型。 这个基本的 DS 模型 (以后我们称之为"模型 0" )可以通过用并行阶段机来模拟并行单元进 而筒化。 这个筒化后的模型我们将称之为"模型 Γ;
一个模型 G的组合 DS中的一个并行单元可以用一个只有一个阶段及一 个空迁移的阶段机来模拟。这个用来模拟并行单元的阶段机,我们在本发明 中称之为"并行阶段机 "。一个并行阶段机的阶段只有一个子 DS。 它的空迁移 可以由下面几种方法之一来实现: • 不定义任何迁移, 如图 15A所示;
• 只有一个标识为空的迁移;
• 只有一个迁移, 而它的迁移条件设置为真, 它的目标阶段指向一个空 阶段 1502 , 如图 15B所示。
这个并行阶段机还增加了一个组件"静态实例数"(也可以可省略的) 1604。和并行单元的静态实例数类似,这个阶段机的静态实例数用来指明当 包含阶段机的 DS生成时, 要生成多少个这种阶段机的静态实例。 如果没有 设定静态实例数, 静态实例数的取值默认为 1, 因此当包含它的组合 DS生 成时, 总会生成一个阶段机的实例。
一个并行阶段机的子 DS的行为是和该阶段机所模拟的并行单元的并行 子 DS的行为相同。
在本发明中, 用术语"顺序的阶段机"来表示一个没有受上述并行阶段机 限制的正常的阶段机。 一个顺序阶段机的静态实例数通常是被设置为 T , 因此当包含它的组合 DS生成时, 会生成一个顺序阶段机的实例。
在用了并行阶段机来模拟组合 DS中的并行单元后, 一个模型 1的组合 DS 就只需要有若干个阶段机 1601 , 一个结束情况集 1602 以及一个结果 1603。 其中的这些阶段机有些是顺序的, 有些则是并行的 (如图 16所示)。
因为每一个并行单元都是用一个阶段机来模拟, 所以一个组合的 DS变 成活跃(或非活跃)状态的过程对模型 0和模型 1都是一样的, 只是模型 1 的组合 DS不再有任何并行单元, 所以和并行单元有关的那部份代码不会再 被执行。
同样地, 一个組合的 Ext- DS, 组合的 PS或组合的 Int- DS也是一个模 型 1的組合 DS的特例 ύ因为每一个并行单元都被替换成一个并行阶段机了, 这些模型 1的 DS组件变成活跃(或非活跃)状态的过程和模型 0的相同, 只是和并行单元有关的那部分代码不会再执行。类似的, 前文描述的一个活 跃的 Ext- DS的事件检查函数,一个活跃的 Int- DS的动作函数以及一个活跃 的 PS的反应函数对模型 1还是同样适用。
图形化表示法
本发明的一种实施例是用人可以读懂的一种图形语言来表示 PS , Ext-DS , Int-DS或者任何其他由 DS导出的组件(我们将把这些都称为 組件、
作为一个这种图形语言的例子,一个 DS或子 DS可以用一个包含框,或 者带标签的包含框表示。 这种包含框可以是各种形状的, 比如多边形, 圆形 或者椭圆形等。 一个包含若干子 DS (可以是顺序的或者并行的)的父 DS可 以用一个大框 (代表父 DS )里包含若干个小框 (代表子 DS )来表示。 如果 一个 DS可以有多个实例, 这个框就会带有阴影。 另外, 一个初始阶段或空 阶段可以用组合 DS框边上一个小框或者一个符号来表示。
图 17描述了用一种图形语言表示的组合 DS的一个例子: 组合 DS "DS0" 1700有三个顺序的子 DS (它们是子 DS "s O" 1701 , "s i" 1702 , 和" s 2" 1703), 3个并行的简单子 DS (它们是子 DS "ρθ" 1706 , "p3" 1709和 "p5" 1708 ) 以 及两个并行的组合子 DS (它们是子 DS "pi" 1705和 "p2" 1708 )。 请注意, 子 DS "p2" 1708和" p3" 1709带有阴影, 这表示它们在运行时刻可以有多个实 例。
在本例中, 一个简单的 DS用一个内部带有名字或者一个简单的行为描 述的长方框来表示。 图 17中的子 DS " θ" 1706和 "p5" 1704就是两个简单 DS的例子。
一个迁移是用一根链接或者箭头(我们称之为迁移箭头)来表示, 箭头 指向的是迁移的目标阶段,而迁移条件则显示在靠近箭头旁作为迁移的一个 标签。 图 17中有一个从子 DS"s 2" 1703指向子 DS"s O"1701 (目标阶段) 的 用"迁移条件 5"作为标签的迁移箭头。 每一个具有一个或多个迁移箭头 (向 内或向外的) 的子 DS是一个顺序的子 DS, 而没有迁移箭头的子 DS则是一 个并行的子 DS。 一个生成箭头可以用来指向一个动态生成的动态组件。尽管一个生成箭 头在图 17中是用一个粗的虚线箭头 1707作为图形语言的范例,它也可以用 其他种类的链接表示, 只要这种链接能够和迁移箭头区别开。 正如图 17所 示, 子 DS "ρθ" 1706 可以动态地生成多个子 DS"p2" 1708 的实例, 而且子 DS"p2" 1708可以动态地生成子 DS" 3" 1709的多个实例。 一个带有向内的生 成箭头的并行子 DS, 比如图 17中的子 DS " p2" 1708和 "p3"1709, 是一个动 态的并行子 DS, 它的并行单元中的静态实例数会被设置成 0。 而不带有向内 的生成箭头的并行子 DS, 比如图 17中的子 DS"pO" 1706和" pl"1705 , 则 是静态的并行子 DS, 相应的静态实例数会被设置成 1, 表示当 "DS 0" 1700 生成时, 只会生成一个子 DS"pO" 1706和" pi" 1705的实例。
请注意, 在图 17中的 DS 0 1700没有显式地定义任何结束情况。 正如 前面所讲, 默认的结束情况是当 DS0 1700的所有子 DS结束时, DS0才结束。
图 18表示的是如何用可视化的方式显式地表示初始阶段, 空阶段, 结 束条件和结束点。 在图 18 中, 初始阶段 1801用左边框上的一个小框代表, 它有两个迁移, 其中一个指向包含子 DS"s O" 1802的阶段, 另一个指向包含 子 DS"s l" 1803的阶段。 子 DS"s O" 1802有一个迁移指向子 DS"s2" 1804 , 这 个迁移的条件永远为"真"。 子 DS"s2" 1804有 3个迁移, 其中一个标签为"迁 移条件 2"的迁移指向空阶段 1806 , 标签为 "迁移条件 3"的迁移指向它自己, 而标签为"迁移条件 4"的迁移则指回到包含子 DS "s O" 1802的阶段。 DS0还 包含一个并行的子 DS "pi" 1805 和两个结束点。
每个结束点代表了一个结束情况来指明在哪种情况下一个组合 DS会结 束。 一个结束情况有一对结束条件和结束代码。 一个结束点可以用组合 DS 的包含框的边框内或者边框上的一个符号或者小框来表示。 作为一个例子, 在图 18 中每一个结束点用边框上的一个小的黑框 1807表示, 并且用相关 的结束条件作为小黑框的标签。
一个结束条件可以用一段文字,一个逻辑表达式或者一个数学公式来描 述在哪种情况下一个组合 DS会结束。 结束条件"子 DS P1 已经结束"就是一 个文字条件的例子, 表示当子 DS P1结束后, 组合 DS "DS 0" 1800就会结 束。结束条件 "□"是一个逻辑表达式的例子,表示当所有组件都结束后, "DS0" 1800 才会结束。 结束条件"年龄 <10"是一个数学公式的例子, 表示当"年龄" 取值小于 10的时候, "DS0"1800就会结束。
为了简化行为模型和对应的图形语言, 下面定义了一些默认情况的范例: • 一个永远为真的迁移条件可以被省略。
• 如果一个阶段只有一个和初始阶段相连的向内的迁移, 而且它的迁移条 件永远为"真", 那么这个迁移可以被完全省略。
· 如果一个阶段只有一个和空阶段相连的向外迁移, 而且它的迁移条件永 远为"真", 那么这个迁移也可以完全省略。
图 19描述了一个用图形语言表示的组合 PS例子。 在这个范例图画中, 组合的 "PS0" 1902 包含两个顺序的子 PS (即子 PS "s O" 1903和子 PS"s l" 1904 )、三个并行的子 DS(即子 PS"pO" 1905 ,子 PS"pl" 1906和子 PS" p2" 1911 ) 和两个结束条件分别为"结束条件 0"和"结束条件 1"的结束点 1913和 1915。
一个简单的 PS 1906用一个包含它的 Ext- DS 组件 1908和 Int- DS组件 1910的框表示。 为了区分一个简单 PS的 Ext- DS和 Int- DS , 在这两个组件 之间画了一才艮分隔线(一根垂直线 1909或者一才艮水平线 1907 )。 子 PS "ρθ" 1905和" ρΓ 1906就是两个这样的例子。
两个 PS之间的交流可以用一个连接它们的双向链接来表示 (我们称之 为交流链接)。 图 19表示的是组合 "PS 0 " 1902和" PS 1" 1900有交流, 子 PS "s i" 1904和子 PS "p2" 1911有交流, 子 PS "ρθ" 1905和子 PS "pi "1911 有交流。在这个例子中,一个交流链接是用虚线表示的(图 19中的"协议 0" 就 是这样的一个例子)。 然而, 它也可以用其他种的链接来表示, 只要它在视 觉上能够和一个迁移箭头和生成箭头区分开来。这些交流链接还可以加上一 个或两个箭头(也可以可省略的)来指明交流的方向。 一个只发送一个方向 的事件的简单交流可以用只带一个箭头的虛线表示(图 I9中的"协议 2"就是 这样的一个例子)。 一条两端都有箭头的交流链接表示有双向的交流(图 19 中的"协议 Γ就是这样的一个例子)。一个交流链接还可以有一个标签或标识 符(也可以可省略的)来指明这个交流所必须遵循的协议规范。图 19中的"协 议 0", "协议 Γ和"协议 2"就是这样的标签。
在本发明中, 一个组合 DS 中的任何子 DS都可以是简单的或组合的。 甚至一个筒单子 PS中的 Ext- DS或 Int- DS也都可以是简单的或者组合的。 因此一个包含框可以有多个子包含框, 而且这些子包含框中的任何一个又 都可以包含多个子子包含框。 这些子子包含框中有些是顺序的, 因此, 它 们之间连着迁移箭头。 而有些子子包含框是并行的, 因此没有与任何其他 子子包含框相连。 图 20表示了一个组合 PS的例子 "PS0"。 组合 PS"PS0"2000 包含一个子 PS"s O" 2001 , 子 PS "s O" 又有一个组合的 Ext- DS 2002和一个 组合的 Int-DS 2006。 组合的 Ext-DS 2002还包含了两个顺序的 Ext-DS (即 "Ext-DS s O" 2003和 "Ext- DS s i" 2004 )及一个并行的 Ext-DS "Ext-DS ρθ" 2005。 组合的 Int- DS 2006包含两个顺序的 Int- DS 2007和 2008, 以及一 个并行的 Int- DS 2009。
用图形语言表示 DS, Ext-DS, PS和 Int-DS有以下好处: (为了简捷起 见, 这里用术语"系统"代表 DS, Ext-DS , PS或 Int - DS )
• 能够很清晰地同时展现一个组合系统内的顺序组件和并行组件。
· 包含框可以清晰地表明当一个父系统变成非活跃状态或者被销毁时, 它 所有的組件都会变成非活跃状态或者被销毁。
• 结束点可以清楚地表明一个组合子系统的内部操作会如何影响它的父系 统改变当前阶段的方式。
• 一个组合系统里只有关键的单元才被画出来。 而阶段机, 阶段和并行单 元都没有画在图中, 因为它们在图中对人们理解系统的行为不是很重 要。 这样做会极大地筒化了表明一个系统行为的图形。 • Ext-DS ? PS和 Int-DS图形的一致性会让人们更容易学习和理解一个复杂 行为的描述。
请注意, 上文的描述只给出了一种描述 DS , Ext-DS, PS, Int- DS及其 组件的方法。 然而根据在这里披露的技术和给出的指导, 一个本领域的技 术人员可以很容易明白, 只要保持以下关键点不变, 可以用各种图形表示 方法来表示与本发明一致的机制:
•—个组合的 DS 用一个包含框表示, 包含框里包含了它的组件, 比如顺序 的子 DS, 并行的子 DS, 初始阶段, 空阶段, 结束点, 迁移箭头, 生成箭 头以及交流链接等。
合 DS的包含框里的每一种组件必须要能够在视觉上彼此区分;
·—个简单 PS的包含框里包含一个 Ext- DS组件和一个 Int- DS组件, 并且它 们能在视觉上彼此区分;
预定义的事件类型
有些系统需要在 PS一变成活跃状态时就执行某一个 Int- DS的动作。本 发明支持一个预定义的"开始"事件, 每当一个 PS 刚刚变成活跃状态时, 这 个事件就会被分发给这个 PS。 图 21中的一个組合 PS范例 2100包含一个用 "开始 "事件作为其 Ext- DS 2102的筒单的子 PS 2101。 当組合 PS2100变成活 跃状态时, 它所有的并行子 PS也会变成活跃状态。 因此, 与"开始"事件对 应的 Int-DS会在组合 PS 2100变成活跃状态后立即被执行。
有些系统需要在 PS变成非活跃状态前一瞬间执行某一个 Int- DS的动 作。 本发明支持一个预定义的"结束"事件, 每当一个 PS 即将变成非活跃状 态时, 这个事件就会被分发给这个 PS。 图 21中的一个组合 PS范例 2100包 含一个把"结束"事件作为其 Ext- DS 2105的筒单的子 PS 2104。当组合 PS 2100 变成非活跃状态时, 它所有的并行子 PS也会变成非活跃状态。 因此, 与"结 束"事件对应的 Int- DS会在这个组合 PS 2100变成非活跃状态前一瞬间立即 被执行。 预定义的"开始"和"结束"事件的好处在于:
• UML 状态图需要提供额外的特殊机制才能实现一个状态的开始动作和结 束动作, 而有了 "开始 "和"结束"事件类型, 用同一个简单的 PS机制就可以 用来实现同样的功能。 因此用户在本发明中不需要学习额外的特 ^制。 • 在有些时候需要把某个特定的 Int- DS与一个 Ext- DS分离开来。 比如, 在 根据协议推导参与者 PS时(这一部分本发明后面会有进一步描述) , 参 与者 PS最好能保持和协议同一样的组合结构。 以图 39 中的 X- server的 参与者 PS为例, 它应该具有和图 38所示协议 "协议 0"—样的组合结构。 然而, 如果尚未定义的 Ext-DS "??" 3905 并没需要接收一个额外的向内 的事件, Int-DS "答复 0" 3906 就只得和 Ext-DS "请求 0" 3902绑定在一 起, 这样就破坏了同样的组合结构 (如图 22所示) 。 但是如果为尚未定 义的 Ext - DS "??"加上了一个"开始"事件, 则同样的组合结构可以得到保 持(如图 23所示) 。
实现中的问题
一些 DS, Ext-DS, PS和 Int- DS的属性会在运行时刻频繁改变, 然而有 些静态的设计阶段的属性则在整个生命周期都不会变化。 另外, 同一种类型 在运行时也可以有多个实例。因此把这些类或类型结构中的设计时属性与实 例结构中的运行时属性分离开是有意义。
在本专利的一种实施例中, 一个筒单 DS的实例结构 2402 包含有一个 指向它的类型结构 2400的指针或引用 2403 以及一个结果組件 2404(如图 24所示)。 一个简单 DS的类型结构 2400 包含一个行为类型的组件 2401。 如图 24所示, 可以有多个简单 DS的实例共享同一个简单 DS的类型。 图 25 用 UML类图来表示同一个简单 DS的类型结构和实例结构。
在本专利的一种实施例中, 一个简单 Ext- DS的实例结构包含一个指向 它的类型结构的指针或引用以及一个结果组件(如图 26 所示)。 一个简单 Ext- DS的类型结构包含一个事件类型的组件。 如图 26所示, 可以有多个简 单 Ext- DS的实例共享同一个简单 Ext-DS的类型。 图 27用 UML类图来表示 同一个简单 Ext- DS的类型结构和实例结构。
在本专利的一种实施例中, 一个筒单 PS的实例结构包含一个指向它的 类型结构的指针或引用以及一个结果組件(如图 28所示)。 一个简单 PS的 类型结构包含一个 Ext- DS类型组件(它可以是简单的或者组合的)和一个 Int-DS类型组件(它可以是简单的或者组合的)。 如图 28所示, 可以有多 个筒单 PS的实例共享同一个简单 PS的类型。 图 29用 UML类图来表示同一 个简单 PS的类型结构和实例结构。
在本专利的一个实施例中, 一个简单 Int- DS的实例结构包含一个指向 它的类型结构的指针或引用和一个结果组件 (如图 30 所示)。 一个简单 Int-DS 的类型结构包含一个动作类型组件, 它可以是一段代码, 一个函数 (对 C语言这样的面向函数程序语言而言)或者一个方法 (对; TAVA这样的 面向对象程序语言而言), 甚至可以是一个脚本(对 L inux She l l这样的脚 本语言而言)。 如图 30所示, 可以有多个简单 Int- DS的实例共享同一个筒 单 Int-DS的类型。 图 31用 UML类图来表示同一个简单 Int-DS的类型结构 和实例结构。
組合 DS类型和实例
如图 32A所示,模型 1的组合 DS的类型 3200包含有若干个阶段机类型 3201 , 以及一个如图 32A所示的结束情况集 3202或者一个如图 32B所示的 结束函数 3218。 如果定义了一个结束条件集, 那么它至少包含一个结束情 况, 而且每一个结束情况都包含一对结束条件和结束代码,其中结束条件描 述在何种情况下一个组合 DS类型的实例会结束, 而结束代码则用来标识对 应的结束条件。如果定义了一个结束函数,这结束函数会返回一结束代码以 标明在何种情况下一个组合 DS类型的实例会结束。 每个阶段机类型有一个 静态实例数 3203 (也可以可省略的) 以及一个或多个阶段类型 3204。 每个 阶段类型有一个子 DS类型 3205, 以及零个或多个迁移 3206。每个迁移有一 个迁移条件 3207和一个目标阶段 3208。每个子 DS类型可以是简单 DS类型 或者組合 DS类型。
如果在一个阶段机类型中定义了静态实例数,它定义了这个阶段机类型 的静态实例个数。如果没有定义静态实例数,这个阶段机类型则默认仅有一 个静态实例。
请注意,每一个阶段机类型都可以是顺序的或者并行的阶段机。如前文 所述, 一个并行的阶段机类型只有一个阶段类型, 如图 15A和图 15B所示. 一个模型 1的组合 DS 的实例结构 3209有一个对它的 DS类型结构的引 用 3210, 若干个阶段机 3211 , 以及一个结果 3212。 每个阶段机有一个对它 的阶段机类型结构的引用 3213, 若干个阶段 3214以及一个当前阶段 3215。 每个阶段有一个对它的阶段类型结构的引用 3216 和一个子 DS 实例结构 3217。 这个子 DS实例可以是简单的或者组合的。 如果它是简单的, 如图 24 中 2402所示, 那么它包含一个对它的简单 DS类型 2400的引用 2403, 以及 一个结果 2404用于记录执行它的筒单 DS类型的行为 2401的成果。 如果这 个子 DS实例是组合的, 则它的结构和图中 3209—样。
请注意, 图 32A, 32B 及 32C中实例结构的阴影表示可以有多个組合 DS 的实例来共享同一个组合 DS的类型。
图 35 是用 UML类图表示的同一个组合 DS的类型结构和实例结构。 作为一个模型 1的組合 DS的一个特例,一个模型 1的组合 Ext-DS也可 以类似地分为类型结构和实例结构两部分。 在用 "Ext- DS"替代每一个 "DS"以 后, 图 32A或 32B中所示的组合 DS的类型结构、 实例结构即变成一个模型 1的组合 Ext- DS的类型结构、 实例结构。
作为一个模型 1的组合 DS的特例,一个模型 1的组合 PS也可以类似地 分为类型结构和实例结构两部分。 因为一个模型 1的组合 PS的类型结构和 组合 DS的类型结构完全相同, 在用" PS"替代每一个" DS"以后,图 或 32B 中所示的即变成一个模型 1的组合 PS的类型。 请注意, 一个阶段类型中的 子 PS类型可以是简单的或者组合的。图 32C表示一个包含一个简单 PS类型 3220的组合 PS类型 3219。这个简单的 PS类型包括一个 Ext- DS类型用于描 述待发生的外部事件和一个 Int- DS类型用于描述为响应所发生的所述外部 事件而执行的内部动作。
在用" PS"替代每一个" DS"以后, 图 32A或 32B所示的组合 DS的实例即 变成一个模型 1的组合 PS的实例。请注意,一个阶段中的子 PS可以是简单 的或者组合的。 如图 32C中表示, 一个組合 PS实例 3221 包含了一个简单 PS 实例 3222。 这个简单的 PS实例包括了一个 Ext- DS实例和一个 Int-DS 实例。
图 36表示了如何用一个包含了一个默认结束情况集和一个阶段机类型
"0" 3601的组合 PS的类型结构 3600来定义图 23中的" X- server" 参与者 PS 类型。 阶段机类型 "0"有一个静态实例数, 和三个阶段类型。 它们是 "初 始" 3615 , "0" 3602和" Γ 3605。 它的静态实例数取值为 1 , 表明当这个组合 PS 生成时, 会生成一个这种类型阶段机的实例。 阶段类型"初始" 3615 是一 个带有迁移 3616的初始阶段。 迁移 3616的迁移条件 3617永远为真, 它的 目标阶段是类型" 0"的阶段 3618。 请注意, 图 36中没有画出空的顺序子 DS。 阶段类型" 0" 3602有一个迁移 3603和一个子 PS类型 3604。而子 PS类型 3604 以"请求 0"作为它的 Ext-DS类型,以"??"作为它的 Int-DS类型。阶段类型" Γ 36054巴一个空阶段作为它的目标阶段 3606,并且在它的子 Ext-DS类型 3607 中定义了一个预定义的"开始"事件类型。
图 36还表示了一个 "X- server"参与者 PS类型的实例 3608。这个实例有 一个结果,一个指向它的类型 3600 的引用 3609, 和一个阶段机" 0" 3610。 阶段机 "0" 3610包含有一个指向它的阶段机类型" 0" 3601的引用, 一个当前 阶段以及两个阶段, 即阶段 "0" 3611和阶段 ' 3613。 阶段" 0"有一个指向它 的阶段类型" 0" 3602的引用以及一个子 PS 3612。 子 PS 3612包含了一个指 向它的 PS类型 3604的引用及一个结果。 同样地, 作为一个模型 1的组合 DS的特例, 一个模型 1的组合 Int-DS 也可以类似地分为类型结构和实例结构两部分。 在用 "Int-DS"替代每一个 "DS"以后, 图 32A或图 32B所示的组合 DS的类型结构、 实例结构即变成一 个模型 1的組合 Int- DS的类型结构、 实例结构。
尽管把类型信息从实例信息中抽象出来了,但只要在运行时刻能够访问 到这些类型信息和实例信息 ,在前文所描述的那些执行函数都还是可以照用 的, 包括一个处于活跃状态的 Ext- DS的事件检查函数, 一个处于活跃状态 的 PS的反应函数, 以及一个处于活跃状态的 Int- DS的动作执行函数。
尽管把实例结构与类型结构清晰地分割开有它的好处,但具体实现时也 可以选择把二者联合在一起或者按某种方式进行混合。本发明并不会限制具 体的实现方法。
在本发明前面描述的那些执行函数可能需要在执行过程中保存一些临 时的中间数据。在本发明的一种实施例中, 除了这些定义在实例结构中的数 据以外, 一个 DS组件的实例结构中还可以加上一些本地使用的数据。
本发明包括了对一个应用软件的整个开发生命周期都有用处的方法和 組件。 在本发明的一种实施例中, 可以用一个设计工具来设计一个基于 DS 組件的应用软件 ,然后用代码生成器来生成准备在运行平台上执行的机器可 读的二进制代码。 如图 33所示, 设计工具的产出是 DS类型定义, 而这个 DS 类型定义可以传送到代码生成器或者保存在存储设备中供代码生成器以 后访问。 代码生成器的产出是代表 DS类型的一组二进制代码, 这些二进制 代码可以被一个运行平台装载到内存中去执行。这个运行平台也可以提供一 些为实现基本动作或已存在的 Int- DS的所需要的二进制代码。
这个设计工具可以支持图形用户界面 (GUI ) 以便设计者用前面描述的 图形语言来定义 DS组件。 在设计流程结束后, 设计工具会生成一組用户定 义的 DS类型或者 DS类的详细说明, 比如 PS类型, Ext- DS类型和 Int-DS 类型。 在设计阶段, 设计工具只会涉及类型信息而不需要涉及实例结构。 一个代码生成器读入这些保存在存储设备上的 DS类型详细说明, 然后 生成代表 DS类型的二进制代码。 这个代码生成器的输出可以保存在存储设 备上, 也可以直接传送给运行平台去执行。
在执行过程中, 运行平台把这些代表 DS类型的二进制代码装载到内存 中, 生成本发明中描述的实例结构并引用它们的类型结构。 这些 DS组件的 实例是根据 DS类型详细说明中的信息来生成并进行初始化的。这些 DS组件 也能够根据本发明所描述的过程动态地变成活跃状态和非活跃状态以完成 它们各自的功能。
在本发明的一种实施例中,一个运行平台可以实现上面所述的动作执行 函数以便处理每一个用 Int- DS类型来定义的组合 Int- DS, 而在另一种实施 例中, 每一个组合的 Int- DS类型也可以被编译成一个底层、 而更高效的执 行代码, 然后再在一个运行平台上运行。一种底层的代码可以是能够被虚拟 机直接执行的字节码格式, 比如可以被 JAVA虚拟机执行的 JAVA字节码。还 有另一种底层的代码可以是一种程序语言 (比如 C/JAVA ) 的目标代码。 在 这种情况下, 可以先为每个组合 Int- DS类型生成相应的程序语言源代码, 然后再编译成目标代码。
本发明中描述的类型结构和实例结构是抽象的结构,也就是说它们并不 依赖于某一种具体的实现。当实现在一个工具里, 这些抽象的结构需要映射 到工具所实现的各种具体结构上去。 比如, 这些 DS组件可以按照一种具体 的外部格式保存在存储设备中,而按照另一种具体的内部格式装载到内存中 进行处理。 这种具体的外部格式可以是下面任何一种: 1 )一种程序语言, 比如 C或者 JAVA; 2 )一种数据描述语言, 比如 ASN. 1 ( Abs tract Syntax Notat ion One ); 3 )一种基于 XML的语言; 或者 4 )一个可视化设计工具可 以支持的任何表示方法。具体的内部格式则可以是一种数据单元的形式, 而 这种数据单元可以用数据描述语言,或者用基于 XML的语言,或者用脚本语 言, 或者用像 C或 JAVA这样的程序语言, 以及任何程序语言的二进制代码 或机器码来表示。
实现本发明所描述的抽象结构时, 并没有必要一字不变地照 *抽象结 构的定义。 比如阶段机类型或并行单元类型中的"静态实例数"就可以采用一 个标识的形式来指明当一个阶段机的父组合 DS生成时, 是否会静态地生成 这个阶段机的静态实例。 这个标识甚至可以用另一个变量的特殊字位来实 现。 另外一个例子是一个 DS实例结构中的结果, 它可以被实现为一个整数, 或者一个包含各种结果信息的复杂的数据结构。 简而言之,作为本发明的一 种实施例的具体格式不需要完全参照本文所描述的抽象结构。
尽管本发明用 PS, Ext-DS和 Int- DS来描述一个与其他系统有交流的系 统的行为, 但并不需要同时都用到 Ext- DS, PS和 Int-DS , 它们中的任何一 个都可以被替换成使用现有的或者未来的行为描述技术,脚本语言或程序语 言所定义的组件。
在本发明的另外一种实施例中, 只在设计阶段和代码生成阶段用到 DS 组件。 如图 34所示, 一个应用系统可以基于 DS组件来设计, 然而一个代码 生成器可以将输出的应用系统的 DS类型用来为另一个不支持 DS组件的运行 平台生成代码。 这个代码生成器只要遵循某种合适的方式把本发明描述的 DS类型结构映射为运行平台所支持的另一种机制就行了。
设计方法
要设计一个分布式的、彼此有交流的多个应用系统是一个有挑战性的任 务。如果我们分别地来设计两个交流的应用系统,要确保它们的行为完全协 调是比较困难的。 一个更好的办法是, 先定义这些交流系统间的通讯协议, 然后用一种系统化的、 机械的方法把这些协议规范转换成每一方的行为规 范, 从而避免了设计过程中产生不一致的可能性。
在本发明的一种实施例中, 一个应用系统可以扮演多个角色, 而且每个 角色可能需要同时和多方进行交流。 为了清楚起见, 本发明用术语 "角色 PS" 来特指这个应用系统所扮演的角色的行为。对每一个协议而言都会有两个交 流参与方。 "参与者 PS "这个术语指的是一个交流参与者的那部分行为。 因 此一个系统中一般有多个"角色 PS", 而每个角色 PS又会有多个参与者 PS, 其中每个参与者 PS对应了该角色所支持的一个协议。 图 8所示例子中"系统 0" 800和"系统 1" 801,"系统 2" 802及"系统 3"803之间有交流。 "系统 0"扮 演两个角色,即"角色 PS0" 804和"角色 PS1"805。其中"角色 PS0"会与"系统 1" 和"系统 2"交流, 而"角色 PS1"会与"系统 3"交流。
为了说明这个理想的设计过程, 我们使用了一个应用系统的例子" X"。 图 37 表明系统" X"有一个角色 PS同时与一个客户端和一个服务器端有交流。 "X"内部有一个参与者 PS"X- server"通过协议"协议 0"和客户端进行交流, 而 另一个参与者 PS "X- cl ient"通过协议"协议 1" 和服务器端进行交流。 遵循 这个设计过程, 我们首先定义协议"协议 0"和"协议 1", 然后我们把"协议 0" 转换成参与者 PS"X- server", 而把"协议 1"转换成参与者 PS"X- cl ient;"。 最 后, 我们把 "X- server"和" X - c l ient"合并成一个角色 PS'T'.。
本发明最提倡的设计过程描述如下:
*第一步, 为一个角色可能与之交流的每一个对端系统都定义一个协议; 这 个协议是用一个 DS 类型来定义, 它包含了该角色和一个对端系统间两个 方向上可能发生的所有外部事件。
*第二步, 遵循一个转换方法, 把第一步得到的每一个协议转换成该角色的 一个参与者 ps;
*第三步, 遵循一个合并方法, 把第二步得到的同一个角色的所有参与者 PS合并成一个角色 PS;
•最后一步, 通过增加一些内部的交流和内部的主动式行为, 让这个角色的 行为规范变得完整。 每一个这些内部交流都用一个 DS 类型来定义, 而每 一个这些内部主动式行为都用一个 int-DS类型来定义。
•当设计有变化时, 可以重复以上这几个步骤。
在本发明中, 一个协议是用一个 DS类型来定义, 它只描述了一个参与 者要接收的向内事件和要发送的向外事件(其他与收发事件无关的内部活动 都可以被忽略)。这个协议 DS类型也可以被视为一个处于通讯双方中间, 能 接收双向事件的一个实体的行为。
图 38描述了用 DS类型定义的协议例子 "协议 0"和"协议 1"。 "协议 0"规 定客户端首先向 X- server发送一个"请求 0"的事件, 然后" X- server"回送一 个"答复 Q"事件。 "协议 1"规定" X-cl ient"首先向服务器发送一个"请求 1"事件, 然后服务器回送一个 "答复 1"事件。 请注意, "→ "和"—"符号是用来使得在图 中更容易看出事件流的方向。
把一个描述协议的 DS 类型转换为一个描述参与者的反应式行为的 PS 类型的转换方法说明如 Ύ:
• 对协议 DS 类型中描述每一个参与者要接收事件的向内的简单子 DS 类 型, 用一个简单的子 PS类型来替代这个简单子 DS类型, 这个简单的子 PS类型把这个向内的简单子 DS类型作为它的 Ext-DS类型, 并包括一个 尚待定义的 Int- DS 类型;
• 对协议 DS 类型中描述每一个参与者要发送事件的向外的简单子 DS 类 型, 用一个筒单的子 PS类型来替代这个简单子 DS类型, 这个筒单的子 PS类型包括一个尚待定义的 Ext-DS类型, 并把这个向外的简单子 DS类 型作为它的 Int- DS类型;
基于上面描述的转换方法, 可以按照下面的步骤得到 X- server 的参 与者 PS 3900 (如图 39所示) :
• 因为"请求 0"对 "X- server"而言是一个向内的简单子 DS类型, 所以它被替 换成一个简单的子 PS类型 3901 , 这个简单的子 PS类型 3901把"请求 0" 作为它的 Ext-DS类型 3902 , 并包含一个尚待定义的 Int-DS类型 3903 (在图 39中用"??"表示) 。
• 因为"答复 0"对" X- server"而言是一个向外的简单子 DS类型, 所以它被替 换成了一个简单的子 PS类型 3904, 这个简单的子 PS类型 3904包括一 个尚待定义的 Ext- DS类型 3905 (在图 39中用"??"表示) , 并把这个向外 的简单子 DS类型"答复 0"作为它的 Int- DS类型 3906。
基于上面描述的转换方法, 可以按照下面的步骤得到 X- cl ient 的参 与者 PS 4000 (如图 40所示) :
• 因为"请求 1"对" X- cl ient"而言是一个向外的简单子 DS类型, 所以它被替 换成了一个筒单的子 PS类型 4001 , 这个简单的子 PS类型 4001包括一 个尚待定义的 Ext- DS类型 4002, 并把这个向外的简单子 DS类型"请求 1" 作为它的 Int-DS类型 4003。
• 因为"答复 Γ对" X-cl ient"而言是一个向内的简单子 DS类型, 所以它被替 换成一个简单的子 PS类型 4004, 这个简单的子 PS类型 4004把"答复 1" 作为它的 Ext- DS类型 4005 , 并包含一个尚待定义的 Int- DS类型 4006。
在本专利的一种实施例中, 也可以不用图 38、 39和 40所示的 DS类型 的图形语言而直接在 DS类型的数据结构的基础上实现上述转换方法。
把所得到的属于同一个角色的所有参与者 PS并成一个角色 PS的合并方 法是先定义一个父 PS,然后把这些参与者 PS都作为它的并行子 PS。图 42 表 示出如何将 X-server和 X - cl ient的参与者 PS合并成一个角色 PS"X"。
在本专利的一种实施例中,也可以不用图 42所示的 PS类型的图形语言 而直接在参与者 PS 类型的数据结构的基础上实现这个合并方法。
这样得到的角色 PS—般是不完整的, 因为会有很多尚待定义的 Ext - DS 和 Int- DS。 下一步就是用内部的交流和行为来替换这些尚待定义的 Ext - DS 和 Int-DS。
我们假定" X"系统的行为是: 在收到 "请求 0"以后, X- server会完成部分 的工作, 然后通过发送 "请求 Γ给服务器, 让服务器完成余下的工作。 我们 还假定在收到来自服务器的 "答复 1"后," X- cl ient"会把服务器的工作结果通 知" X— server", 然后由 "x— server^巴"答复 0"送回给客户端。
为了达成这些内部交流的需要, X-server 可以发送一个事件" aa"给 X - cl ient以请求服务器完成余下的工作。 然后 X- cl ient可以发送一个事件 "bb"给 X- server以通知服务器的工作结果。在替换了这些尚待定义的 Ext-DS 和 Int-DS后, 新的角色 PS如图 43所示。
这个例子用了两个非常简单的内部协议(每个协议只有一个事件), 比 如" aa"和" bb", 来完成这项工作。 本发明还支持在两个内部子 PS间用一个组 合的 DS来定义复杂的协议。 事实上,可以用同一个例子来举例说明这一点。 图 44描述的是同一个例子, 只是内部协议用一个组合的 DS"协议 2" (如图 41所示)来定义。
使用本发明描述的各种设计方法的好处在于:
• 通过机械地由一个外部行为推导出内部的反应式行为, 本发明可以确保 协议和通讯各方是一致的。
• 因为 Ext - DS, Int-DS和 PS都是 DS的特例, 并且共享同样的组合结构, 所以很容易识别哪些是在机械式推导出的反应式行为之上增加的内部行为。 • 通过从外部行为机械地推导出内部反应式行为, 可以极大地减少描述复 杂行为的工作量。
上述的这些设计方法可以扩展到其他基于节点和链接的建模语言(比如 UML活动图, BP匪, XPDL, WS- CDL和 BPEL或者这些技术的结合)。 相对应于 本发明中的一个组合 DS 的等同物, 在 UML 活动图中称为一个活动
( act ivi ty ),在 BPMN, XPDL和 BPEL中称为一个流程( proces s ),在 WS- CDL 称为一个流程编排(choreography )。 为了简化描述, 我们将这些组合 DS 的等同物都称作组合活动。 相对应于本发明中的一个简单 DS的等同物, 在 UML活动图中称为一个动作(act ion ) , 在 BPMN和 XPDL 中称为一个任务
( task ) , 在 BPEL和 WS-CDL中称为一个活动(act ivi ty )。 它们都将被称 作简单活动。 另外, 我们用术浯" ' 乏称一个简单的或者组合的活动。
一个简单的 PS可以映射到这些建模语言中的一个反应式的组合活动, 这个组合活动包含一个外部活动, 用于描述待接收的外部事件, 以及一个 内部活动, 用于描述为响应所发生的这个外部活动而执行的内部动作。 因 为一个组合的 PS和一个组合的 DS有相同的结构, 一个组合的 PS可以被直 接映射到一个组合活动。
这些设计方法中用到的其他一些组件也被扩展得更具通用性, 因此它 们也可以用于其他行为建模语言。 一个尚待定义的 Ext- DS被扩展成一个尚 待定义的外部活动, 用于描述要接收某些尚待定义的外部事件的活动。 而 一个尚待定义的 Int-DS被扩展成一个尚待定义的内部活动, 用于描述要执 行某些尚待定义的内部动作的活动。
使用了以上这些通用性的构件, 以上这些设计方法可以扩展成通用性 的方法使用其他行为语言来做设计, 它的的过程可以描述如下:
,笫一步是用 UML活动图, BPMN, XPDL, WS-CDL或者 BPEL的组合活动来描 述一个角色所支持的每一个协议。
•第二步是使用通用性的转换方法, 将每一个描述协议的组合活动转换成一 个参与者的组合活动。
*笫三步是把那些属于同一个角色的参与者组合活动合并成一个用 I L活动 图, BP丽, XPDL, WS- CDL或者 BPEL表示的角色组合活动。
•第四步是把上一步得到的角色组合活动中尚待定义的外部活动和尚待定义 的内部活动替换成内部的交流和行为, 从而使这个角色的规范变得完整。
一个协议可以用 UML活动图, BPMN, XPDL, WS- CDL或者 BPEL描述成一 个组合活动, 它包含了一系列只描述交流双方之间的双向的外部事件(其他 与收发事件无关的活动可以被忽略)的简单活动。 因为这些建模语言的每一 种都有用于接收外部事件的简单活动, 所以一个协议可以用一些接收事件 的简单活动来描述。 换言之, 这个协议组合活动可以看作是被用来描述一 个处于通信双方中间, 能接收两个方向事件的一个实体的行为。 才艮据这个 方法, 一个协议可以用 UML 活动图的组合活动来定义, 并且用 "AcceptEventAc t ion"来接收双向的外部事件。 比如, 图 38 中用 DS类型定 义的协议"协议 0"和''协议 1"可以用 UML活动图表示在图 45中。
转换成一个参与者組合活动
可以用这个 才 把一个组合活动从一个协议规范转换成一个 参与者的行为规范。 这个方法包括:
• 对所述组合活动中每一个描述参与者待接收事件的向内的简单活动, 把 这个向内的筒单活动替换成一个反应式的组合活动, 而这个反应式的组 合活动把所述向内的简单活动作为它的外部活动, 这个外部活动后面跟 着一个尚待定义的内部活动, 以描述为响应所发生的向内的简单活动而 执行的活动。
• 对所述组合活动中每一个描述参与者待发送事件的向外的简单活动, 把 这个向外的简单活动替换成一个反应式组合活动, 这个反应式组合活动 包含一个尚待定义的外部活动用于描述要接收的事件, 然后跟着这个尚 待定义的外部活动后面, 用这个向外的简单活动作为它的内部活动, 以 响应所发生的这个尚待定义的外部活动。
图 46 是用 UML 活动图表示的由图 45 中"协议 0" 4500 转换得到的 "X - server"的参与者组合活动 4600。 简单活动"请求 0" 4501是一个向内的 待接收事件, 因此, 它被替换成一个反应式的组合活动 4601, 而这个反应 式的组合活动包含一个外部活动用以接收向内的 "请求 0" 事件 4602 , 以及 跟在这个外部活动后面的尚待定义的内部活动 4603用以响应 "请求 0"事件。 这个内部活动可以用 UML 活动图中的一个动作 (ac t ion ) 或一个活动 ( Ac t ivi ty )来定义。 "协议 0" 4500中的简单活动 "答复 0" 4502是一个向 外的待发送事件, 因此, 它被替换成一个反应式的组合活动 4604 , 而这个 反应式的组合活动包含一个尚待定义的外部活动 4605用以接收尚待定义的 向内事件,以及跟在这个外部活动后面发送向外的"答复 0"事件 4606的内部 活动。'这些外部活动和内部活动中的每一个都可以用一个动作或一个 UML 活动图中的活动来定义。 图 47 是用 UML 活动图表示的由图 45 中"协议 Γ 4503 转换得到的 "X- cl ient"的参与者組合活动 4700。 简单活动"请求 1" 4504是一个向外的 待发送事件, 因此, 它被替换成一个反应式的组合活动 4701 , 而这个反应 式的组合活动包含一个尚待定义的外部活动 4702用以接收尚待定义的向内 事件,以及跟在这个外部活动后面发送向外的"请求 1"事件 4703的内部活动 用以响应尚待定义的向内事件"??"。 这些外部活动和内部活动中的每一个都 可以用 UML活动图中的一个动作或一个活动来定义。 "协议 Γ 4503中的简 单活动 "答复 1" 4505是一个向内的待接收事件, 因此, 它被替换成一个反 应式的组合活动 4704 , 而这个反应式的组合活动包含一个外部活动 4705用 以接收向内的 "答复 1"事件, 以及跟在这个外部活动后面的尚待定义的内部 活动 4706。 这个外部活动可以用 UML活动图中的一个动作或一个活动来定义。
当使用基于节点和链接的建模语言时, 可用一 通用性的合并方法 以上得到的属于同一个角色的所有参与者组合活动合并成一个描述单一角 色行为的组合活动, 具体步骤描述如下:
• 增加一个父组合活动, 然后把所有这些得到的参与者组合活动作为它的 并行子活动。 这可以通过增加一个分叉节点和一个汇合节点来实现, 而 这个分叉节点会有一个链接指向每一个参与者组合活动, 这个汇合节点 则是每一个参与者组合活动的目标节点。
图 48 用 UML 活动图表示如何把得到的参与者组合活动 "X- server"和
"X- cl ient"合并成 "X"角色組合活动。请注意,分叉节点 4800和汇合节点 4801 用 UML活动图中的竖线表示。
当把这个通用性的设计过程用于 BPMN建模语言时,具体过程描述如下:
• 用 BPMN定义协议组合活动 (如图 49所示) , 它只包含接收双向外部事件 的事件接收任务。
• 作如下修改把它转换成一个参与者组合活动 (如图 50和图 51所示) : • 为每一个从参与者角度看是接收向内事件的"接收(Receive ) "任务 4901 , 把"接收"任务替换成一个反应式流程 5001, 这个反应式流程 把该"接收"任务 5003作为它的外部活动, 而后面跟着一个尚待定义 的内部活动 5004 (是 BPMN 的一个子流程(Sub- process )或任务 ( Task ) )作为响应所发生的向内事件时执行的内部活动。 • 为组合活动中每一个从交流对端系统看来是接收事件, 而从参与者 角度看来是发送事件的"接收"任务 4902 , 把"接收"任务替换成一个 反应式流程 5002 , 这个反应式流程包含一个尚待定义的外部活动 5005 (是 BPMN的一个子流程或任务), 用来描述待接收的尚待定义 的外部事件, 后面跟着一个发送这个事件的任务作为响应所发生的 尚待定义的外部活动时执行的内部活动 5006。
• 为了把这些参与者组合活动合并成一个角色组合活动, 我们定义一个父 流程, 它用一对并行的"与分流 "网关(AND- Spl i t Gateway ) 5200 和"与汇 合"网关 (AND- join Gateway ) 5201 (如图 52 所示) 或者一个并行框 ( Paral lel box ) 5300 (如图 53所示)把这些参与者组合活动作为它的 并行子流程整合在一起。 与一个组合 PS的并行子 PS类似, 当父流程开始 运行时, 这些子流程就会开始并行运行
随后可以通过用内部交流和行为来替换尚待定义的外部活动和尚待定 义的内部活动让所得到的流程定义变得完整。
当: tail个通用性的设计过程用于 BPEL建模语言时, 的过程描述如下: • 用 BPEL定义一个协议组合活动, 它只包含用 BPEL"接收(receive )"或"拾 取(pick ) "活动来定义的接收双向外部事件的事件接收任务。
• 如果用了"拾取 ( pick ) "活动来定义一个协议, 那么它的 <onMessage> 结 构应该 4巴这个事件的名称描述在它的" operat ion"中, 而且把它的活动定 义为 "Etnpty"。 举个例子, "协议 0"的 BPEL伪代码应该是下面这样的:
<sequence . . . >
<pick … > <onMessage opera tion="RequestO" .··> empty
</onMessage>
</pick>
<pick ...〉
<onMessage .. operation="ReplyO > em ty
</onMessage>
</sequence>
如果用了 "接收 ( receive ) "活动来定义一个协议, 应该把这个事件的名 称描述在它的 "operation"中。 举个例子, "协议 Γ的 BPEL伪代码应该是 下面这样的:
<sequence ... >
<receive … operat ion="Requestl " ...>
</ receive>
<receive ... operation="Replyl " ..,>
</ receive>
</ seq ence>
请注意, 尽管在本例中用到了 "sequence"来定义顺序的活动, BPEL 中还 可以用 "f 1 ow"和" 1 i nk"来定义顺序的活动。
作以下修改来得到一个参与者组合活动: 为协议组合活动中的每一个"接 (receive ) "或"拾取 ( pick ) " 活动执行下面的步骤:
• 如果这个活动描述的是参与者要接收的向内的事件, 把它替换成一 个反应式组合活动, 这反应式组合活动把这个向内的活动作为它的 外部活动, 后面跟着一个尚待定义的内部活动(BPEL中的一个子活 动)作为响应所发生的向内活动时执行的内部活动。
• 对"拾取(pick ) "活动, 在 <onMessage>结构中的事件应该由 "empty" 变 成 一 个 尚 待 定 义 的 内 部 活 动 "Interna l Ac t ivi ty??", 并且
• 对"接 4欠 ( receive ) "活动, 它后面应该跟着一个在" sequence" 里面尚待定义的内部活动" Internal Act ivi ty??"。
• 如果这个事件是向外的, 则定义一个反应式组合活动, 这反应式组 合活动包含一个尚待定义的外部事件用来描述要接收的事件, 后面 跟着一个发送这个向外事件的活动, 作为响应所发生的尚待定义的 外部事件时执行的内部活动。
• 如果用了"拾取(pick ) "活动, 一个尚待定义的外部活动的 <onMessage *构应该等待一个尚待定义的向内事件"??", 而 它的内部活动则应该包含这个向外的事件。
• 如杲用了"接收(receive ) "活动, 尚待定义的外部活动应该 等待一个尚待定义的事件, 而且后面跟着一个在 "sequence" 里面发送这个向外事件的内部活动。
• 比如, 使用1 '拾取 ( pick ) "活动的 X- server 参与者组合活动, 用 BPEL伪代码应该 ^下所示:
<sequence … >
<pick… >
<onMessage … opera t ion="RequestO" . . . > InternalActivi ty??
</onMessage>
<pick ... >
<onMessage ... ... >
<invoke ... opera tion=" Reply 0"
</invoke>
</onMessage>
</ sequence>
• 又比如, 使用 "接收( receive ) "活动的 X- client参与者组合活动, 用 BPEL伪代码应该如下所示:
<sequence … >
<receive … operat ion="?? " … >
</ receive>
< invoke … operation="Requestl "
</ invoke>
<receive ... operation="Replyl " ... >
</ receive>
InternalActivity??
</sequence>
为了定义一个角色组合活动, 我们增加一个父流程, 通过用 "flow"结构 把这些参与者组合活动作为这个父流程的并行子流程进行合并。 • 举个例子, 这个合并后的角色组合活动用 BPEL伪代码可以表示如下: <f low>
<sequence …〉
<pick … >
<onMessage … opera t i on= " Reque s 10 " ...>
InternalActivity??
</onMessage>
</pick>
<pick … >
<onMessage ... operation=" ?? 11 ...>
< invoke … operat ion=" Reply 011
</ invoke>
</onMessage>
</pick>
</ sequence
<sequence ... >
<receive … operat ion="??" ... >
</ receive>
< invoke … operation 'Requestl 11
</invoke>
<receive ... operation="Replyl " ...>
</ receive> InternalAct ivi ty??
</ sequence>
</f low>
随后可以通过用内部的交流和行为来替换那些尚待定义的外部活动和 尚待定义的内部活动让得到的流程定义变得完整。 >
请注意, 上述的实施例中实用了" operat ion-"??"" 来表示尚待定义的 外部活动, 以及"内部活动?? "来表示尚待定义的内部活动。 每一个尚待定义 只要它们能够与正常的活动区分开。
尽管上面所述的通用性设计方法的实施例是基于 BPEL来描述一个协议 组合活动和一个参与者组合活动,但是类似的方法可以被本领域的技术人员 用于任何基于 XML并且支持"顺序 (sequence ) "活动的行为描述语言, 比如 XPDL 和 WS- CDL。 一般而言, 上述的一个反应式组合活动可以定义成一个顺 序活动,而这个顺序活动包含一个等待向内事件的外部活动以及一个为响应 所发生的这个向内事件而执行的内部活动。下面的 XML表示一个用顺序活动 来定义的反应式组合活动。
<sequence>
ExternalAct ivi ty
InternalAct ivi ty
</ sequence>
对于一个用 WS- CDL定义的反应式组合活动, 它的外部活动可以是用一 个 WS- CDL的交流活动 ( Interact ion act ivi ty )来描述要等待的向内事件, 而它的内部活动可以是一个用来描述一些待执行动作的活动。 尽管 WS- CDL 目前还不支持内部活动, 但可以想像得到, WS - CDL是可以被才广展来支持内 部的活动的。本发明描述的这些通用性的设计方法可以被用于这样一个扩展 了的行为描述语言。 生成一个参与者状态机
当把这个通用性的设计过程用于一个状态机建模语言(比如状态图), 具体的过程描述如下:
• 把每一个协议定义为一个状态机(State machine ) (如图 54中的"协议 0" 5400和"协议 1" 5403 ) , 这个状态机只把向内或向外的事件定义为它的 状态迁移的事件或者触发器 ( Tr igger ) , 比如"协议 0"中的"请求 0"5401 和"答复 0" 5402 , 以及"协议 1"中的"请求 1" 5404和"答复 Γ 5405 , 但没 有为这个状态迁移定义任何动作或迁移效果( Effect )。 一个协议状态机 可以被视为是用来定义一个处于通讯双方之间, 能接收两个方向的事件 的一个实体的行为。 每一个像这样的事件都可被定义为它所对应的状态 迁移中的一个触发器。
• 按如下步骤修改每一个协议状态机来转换得到一个参与者状态机 (如图 55和图 56所示) :
• 对这个协议状态机中的每一个迁移, 如果它的触发器中包含一个向 内的事件(从参与者角度来看) , 则在这个迁移上增加一个尚待定 义的迁移效果(如图 55中的"??" 5501和图 56中的"??" 5603所示)。 • 对这个协议状态机中的每一个迁移, 如果它的触发器中包含一个向 外的事件(从参与者角度来看) , 则在这个迁移上增加一个迁移效 果来发送这个向外事件。 然后把这个迁移的触发器改成等待一个尚 待定义的向内事件(如图 56中的"??"所示) 。
为了生成一个角色状态机, 一个父状态可以被定义来把所有这些参与 者状态机合并到一个单一的角色状态机。 这个父状态把所有这些得到的参 与者状态机都当作它的正交区域(or thogona l regions ) 。 如图 57所示, 参与者状态机 "X- server" 5701和" X- c l ient"5702变成合并在父状态" X" 5700 内的两个正交区域。 请注意, 状态机中的正交区域类似于一个组合 PS中的 并行子 PS。 随后可以通过用内部的交流和行为替换那些尚待定义的触发器和迁移 效果以使得到的角色状态机定义变得完整。
尽管图 54, 55, 56 和 57是用状态图 (S tatechar t ) 图画来表示的, 它们也可以被替换成其他的状态机(s tate machine ) 图画而不会失去本发 明的精髓。
有时候, 一个设计者需要定义一个需要和一个已存在应用系统进行交 流的新的应用系统的行为。 因为不太可能改变已存在应用系统的^"为, 所 以需要根据已存在应用系统的行为来推导出已存在应用系统所支持的协 议。 然后应用上述转换方法来生成新应用系统的参与者组合活动。 这样得 到的参与者组合活动就可以和已存在应用系统正确地进行交流。
生成一个1"办议组合活动
下面说明如何从一个描述参与者行为的参与者组合活动来生成一个描 述两个参与者之间的协议的协议组合活动的方法:
•把所述参与者组合活动复制为一个协议組合活动;
•把所述协议组合活动中既不接收向内事件也不发送向外事件的各个简单活 动改变为空活动, 但是保持原有向外的链接不变。
下面用 UML 活动图作为行为建模语言来举例说明如何应用这个方法。 图 46是用 UML活动图表示的 "X- server"参与者組合活动。 遵循上述的协议 生成方法可以推导出一个协议组合活动。
• 把图 46中的" X- server"参与者组合活动 4600复制一份为图 58中协议组 合活动 5800;
• 因为简单活动 "??" 4603既不接收向内事件也不发送向外事件, 所以把它 变成一个空活动 5803;
• 因为简单活动 "??" 4605既不接收向内事件也不发送向外事件, 所以把它 变成一个空活动 5805 ;
请注意, 除了不包含任何要执行的实际动作以夕卜,这个空活动和一个普 通节点是一样的。 如果用 BPEL来描述一个組合活动, 则可以用一个 "empty" 活动来表示空活动。 如果用 WS- CDL 来描述一个组合活动, 则可以用一个 "noAct ion"来表示一个空活动。 如果一个组合活动是用不支持空活动的行为 建模语言来表示的, 比如 BPMN, XPDL和環 L活动图, 则需要为这个行为建 模语言增加一个特殊的空活动。
以上所生成的协议组合活动可能包含了许多空活动。这些空活动可以根 据以下规则加以清除:
• 对每一个空活动, 可以将它的目标活动和源活动直接相连, 从而把空活 动删除;
• 如果一对分叉、 汇合节点之间没有链接, 或者只剩下一个链接, 那么这 对分叉汇合节点可以删除。
• 如果一个组合活动只剩下一个子活动, 那么这个組合活动可以用这个剩 下的子活动来替代。
在清除完这些空活动后, 图 58 中的协议就变成了图 45 中的"协议 0" 4500。
实现上文这些通用性设计方法的一个设计工具或者一个运行平台需要 用一种具体的形式来表现所述的通用性组件,比如尚待定义的外部活动和尚 待定义的内部活动,协议组合活动和参与者组合活动。一个具体的形式可以 是下面的任何一种:
1 ) 一种程序语言, 比如 C 和 Java; 2 )一种数据描述语言, 比如 ASN. 1 ( Abs tract Syntax Notat ion One ) ; 3 )—种基于 XML的语言, 比:^ XPDL, BPEL和 WS- CDL; 或 4 )一种图形语言, 比如 BPMN, UML活动图, 或该设计 工具可以支持的任何专有表示方法。
在这些设计方法的一种实施例中,可以用同一种具体形式来表示协议组 合活动和参与者组合活动。 而在另一种实施例中,可以用一种具体形式来表 示协议组合活动, 而采取另一种具体形式来表示参与者组合活动。 结论
本发明包括了对一个应用软件的整个开发生命周期都有用处的方法和 組件。
在本发明的一种实施例中, 本发明所描述的 DS組件和方法可以用于设 计阶段, 代码生成阶段以及执行阶段。 而在另一种实施例中, 这些 DS组件 和方法会用在设计阶段和代码生成阶段。 还有一种实施例中, 这些 DS组件 和方法仅被设计工具使用。
还有一种实施例中可以把本发明所描述的通用性的方法和图形语言与 UML状态图, UML活动图, BPMN , XPDL和 BPEL等建模语言结合起来用在设 计阶段。如图 59所示, 一个设计工具可以通过使用这些通用性的方法和指 导来描述一个应用系统的内部行为和外部行为,从而支持一个应用系统设计 流程。本发明描述的全部或部分图形语言可以被一个设计工具采用以方便设 计流程。 然而这样设计出来的行为是可以用另外一种机制来描述的, 比如 UML状态图, UML活动图, BPMN , XPDL和 BPEL。 然后它可以经过一个代码 生成器来生成二进制代码, 再被运行平台装载执行。
本发明描述的图形语言是很灵活而且模块化的,一个设计工具不必支持 全部的组件。因此一个设计工具可以只选用本发明所描述的组件的一部分来 用于各种目的。 在下面三幅图中表示了一些这样的实施例。
图 60中的包含框 6000代表了一个应用系统,而该应用系统的动态行为 是用一个包含了 3个子包含框 6001 , 6002和 6003的组合活动来描述的。其 中两个子包含框 6001 , 6002代表顺序的子活动, 而子包含框 6003代表一个 并行子活动。 有一个迁移箭头从子包含框 6001指向子包含框 6002, 而并行 子活动 6003则没有任何迁移箭头。 那两个顺序子活动中的一个是一个反应 式组合活动 6001 , 6001包含一个事件子子包含框 6004作为它的外部活动以 描述待发生的外部事件, 以及一个动作子子包含框 6005作为它的内部活动 以描述响应所发生的外部事件时执行的内部活动。 一个双向的交流链接 6006代表了顺序子活动 6001和并行子活动 6003之间的一组交流。 这个交 流协议用标识符"协议 0"来表示。附注: 这个交流协议的 DS在此图中并没有 显示出来。
图 61中的一个包含框 6100代表一个应用系统,而该应用系统的行为是 用一个包含了三个子包含框 6101 , 6102和 6105的组合活动来描述,每一个 子包含框代表了一个子活动。 一个双向的交流链接 6106 代表了子包含框 6101和 6105之间的一组交流。 这个交流链接用一个标识符"协议 0"来表明 这个交流集所要遵循的协议规范。 组合活动 6100有两个结束点, 其中的一 个结束点 6103 有一个没有显示出的默认的结束条件。 另一个结束点 6104 有一个结束条件"迁移条件 1"。
图 62中的一个包含框 6200代表一个应用系统,而该应用系统的行为是 用一个组合活动 6200来描述的, 它有两个顺序的子活动 6201和 6202, 一 个并行的子活动 6205 , 以及一个在顺序子活动 6201和并行子活动 6205之 间的交流链接 6206。 有一个迁移箭头 6208从源子包含框 6201指向目标子 包含框 6202。 还有一个生成箭头 6207指向一个在运行时可以被顺序子活动 6202生成的动态组件 6205。一个子包含框 6201则代表了一个反应式组合活 动, 这个反应式组合活动包含一个事件子子包含框 6209用来描述待发生的 外部事件和一个动作子子包含框 6210用来描述为响应发生的所述外部事件 而执行的内部活动。
在本发明的另外一种实施例中, 可以采用有向链接, 而不用图 60中的 分割线来区别一个反应式组合活动中的外部活动和内部活动。 图 63表示了 和图 60同样的组合活动例子,只是在反应式组合活动 6300内部多了一个连 接外部活动 6301和内部活动 6302的有向链接 6303。
除了使用可视化的设计工具,也可以在本发明的基础上用其他工具来生 成用户定义的 DS类型。 比如可以使用计算机辅助的软件工程工具(CASE )。 一个 CASE工具可以在整个开发方法学中综合了本发明的功能以支持生成和 编辑用户定义的 DS組件。
一个 CASE工具也可以为用户定义的 DS类型提供分析和验证功能,而另 一个 CASE工具更可以通过提供一个 DS类型的分类和目录以及支持对 DS类 型的查询和匹配来帮助重复使用用户已定义的 DS类型。
其他的 CASE工具可以对基于 DS组件的应用程序进行模拟,甚至可以提 供自动测试功能, 而测试用例则可以根据 DS类型的定义自动生成。
在本发明的另一种实施例中可以用一个集成开发环境(IDE )来支持基 于本发明的软件开发, 包括软件设计, 编译和执行。 特别是, 执行时刻可以 通过带有软件库函数的运行平台来支持 DS组件。
类似于一个运行平台, 本专利还有一种实施例是在一个软件的虚拟机 里或者一个完全基于硬件和固件的计算设备上支持 DS 組件和它的执行函 数。
另一方面,并不是所有的 DS组件都需要被自动化或者通过软件来执行。 本发明的另外一种实施例是一个设计者通过一个设计工具用 DS的组件或组 合活动来定义人的行为, 业务流程或者是行动计划。 这些 DS组件或组合活 动中的一部分可以是要人去完成的工作。
尽管上面的描述都带有某些特性,但这不能被看作是对本发明范围的限 制, 而只能看作是本发明的一些实施例。根据本文所披露的信息和所指导的 内容,一个本领域内的技术人员应该可以意识到在本发明的范围内还可以有 4艮多其他实施例和进一步的汙生例。
本发明的应用将是非常广泛的,因为大多数解决现实世界问题的系统都 可以看作为一个反应式的系统。 比如, 在一个 3层架构中, 数据库管理系统 可以看作一个对数据库管理系统的上一层服务器的输入做出反应的系统。而 这些服务器又可以看作对这些服务器的上一层输入做出反症的系统。表示层 ( presentat ion t ier )则可以看作对人类的输入故出反应的系统。 换言之, 几乎所有的计算系统都可以用本发明描述的 DS, PS, Ext- DS和 Int- DS来建 模, 并获益于它们所具有的先进特性。
本发明还可以用来为高度复杂的通讯协议进行建模。尤其是利用一个组 合 DS的特性, 一个协议不仅可以支持单个会话, 还可以支持多个并发的、 嵌套的会话。
本发明还可以用来为人机界面建模。 一个人可以同时处理很多件事情。 为了和人类的这种' '多进程"能力相称, 一个基于图形用户界面的应用可以用 一个组合的 DS来定义它与人的界面,而用一个组合的 PS来定义它的反应式 行为。
因为本发明所具备的高度完善的建模能力 ,它甚至可以用来对人类行为 或者组织行为进行建模。 比如,一个组织的整个业务流程可以用一个组合的 PS来建模, 这个组合的 PS包含有多个层次的子 PS来实现部门, 团队和雇 员的行为。计划流程,决策流程以及解决问题的流程也可以用 DS, PS , Ext-DS 和 Int- DS来建模。
一个通用的业务运行环境, 比如一个业务流程管理平台,一个工作流引 擎或者一个通用的业务运营框架, 也可以通过承载各种业务流程和活动的 DS , PS , Ext- DS和 Int- DS来实现。
有些现实世界的东西, 它们具有多个状态, 比如机器, 顾客记录, 订单 项, 也可以用 DS或者 DS的扩展来建模。
用本发明的方法来建模并设计各种应用系统, 比如上文描述的那些系 统, 可以定义出 DS, PS, Ext- DS和 Int- DS的规范。 这些规范的一部分也可 以通过其他途径来得到。 不管是采用哪种途径, 所得到的这些应用系统的 DS , PS , Ext- DS和 Int- DS规范可以由一台实施本发明的设备或机器, 比如 一台计算机来执行。
一般而言,本发明可能以方法的形式实施或者以执行这些方法的设备的 形式来实施。 本发明也可以通过有形媒体(比如磁盘, 光盘, 磁盘驱动器或 者任何其它机器可读的存储介质 )上的程序代码来实施。 当这些程序代码被 一个设备, 比如计算机, 装载并执行时, 这个设备就成了一个实施本发明的 设备。 本发明也可以通过在某些传输介质 (比如电缆, 光纤或者电磁辐射) 来传输程序代码而得到实施。 当这些程序代码被一个设备或机器, 比如计算 机, 装载并执行时, 这个机器就成了一个实施本发明的设备。
因此, 可以看到本发明所描述的 DS組件以及相关的方法和过程是定义 系统的行为和通讯协议的非常强大的方法和技术。特别是它对现有技术, 比 如 BPMN, BPEL, XPDL, WS- CDL或丽 L在以下几个主要方面都进行了扩展并 力口以改良。
第一个方面的改良在于 DS模型反映了我们所在宇宙中的时间维度和空 间维度,从而在现有技术所描述的一堆节点和链接的基础上增加了重要的含 义和结构。第二个方面的改良是通过在图画中使用包含顺序组件与并行组件 的包含框,省去了各种分叉节点和汇合节点以及链接。 第三个方面的改良是 使用结果与结束情况为组合 DS 的结束提供了非常强大而且灵活的控制机 制。 第四个方面的改良是使用 DS的特例, 比如 Ext- DS, PS和 Int- DS来以 一种一致的方式分别描述系统的外部行为,系统的反应式行为和系统的内部 行为。 第五个方面的改良是可以描述多个系统间的复杂的交流行为。 第六方 面的改良是提供了系统化的方法从协议导出角色 PS , 从而确保了相关规范 的一致性。
应该可以理解的是,在本文中描述的例子和实施例都仅仅是为了说明本 发明,对本领域的技术人员来说还会出现许多修正,但这些修正都应包含在 本专利申请以及权利要求的范围以内。进一步可以理解的是,本领域的技术 人员可以在不偏离权利要求中所表达的本发明的原则和范围的条件下,出于 阐释本发明的本质的目的, 对一些细节, 材料或者编排做出修改。 在此不管 出于何种目的而引用的出版物,专利或专利申请都会被看作对相关内容的完 整引用。

Claims (33)

  1. 权 利 要 求
    1. 一种包括至少一个用于描述应用系统动态行为的组合系统类型的计 算机系统, 各所述至少一个的组合系统类型包括:
    一个结束情况集和一个结束函数之一, 其中
    所述的结束情况集, 包括至少一个结束情况,每个所述的结束情况包括 一对结束条件和结束代码,该结束条件描述出一个所述至少一个的组合系统 实例结束的条件, 而该结束代码标识出所述结束奈件; 并且
    所述的结束函数,用于返回结束代码,该结束代码标识出一个所述至少 一个的组合系统实例结束的条件;
    以及
    至少一个阶段机类型,各所述至少一个的阶段机类型包括至少一个阶段 类型; 其中各所述至少一个的阶段类型包括一个子系统类型和至少一个迁 移;
    并且所述的子系统类型是一个所述至少一个的组合系统类型和一个描 述出所述计算机系统的一个组件的行为类型的简单系统类型之一;
    并且各所述至少一个的迁移包括一个用于描述出何种情况下迁移会发 生的迁移条件和一个用于描述出在所述迁移发生之后下一个成为活跃阶段 的目标阶段。
  2. 2. 根据权利要求 1所述的计算机系统, 其特征是, 至少一个所述至少 一个的阶段机类型进一步包括:静态实例数, 用于描述出该所述至少一个的 阶段机类型的静态实例的数量。
  3. 3. 根据权利要求 1所述的计算机系统, 其特征是, 至少一个所述至少 一个的阶段机类型仅具有一个所述至少一个的阶段类型。
  4. 4. 根据权利要求 1所述的计算机系统, 其特征是, 所述的简单系统类 型进一步包括:
    第一个所述子系统类型, 用于描述出待发生的外部事件; 以及 第二个所述子系统类型,用于描述出为响应发生的所述外部事件而执行 的内部动作。
  5. 5. 根据权利要求 4所述的计算机系统, 其特征是, 至少在一个所述阶 段机类型中的所述筒单系统类型中的第一个子系统类型包括了一个预定义 的, 当所述筒单系统实例变成活跃状态后立即发生的 "开始 "事件类型。
  6. 6.根据权利要求 4所述的计算机系统,其特征是,在所述简单系统类型 中的第一个子系统类型是一个所述至少一个的组合系统类型和一个所述简 单系统类型之一。
  7. 7.根据权利要求 4所述的计算机系统,其特征是,在所述简单系统类型 中的第二个子系统类型是一个所述至少一个的组合系统类型和一个所述简 单系统类型之一。
  8. 8. 根据权利要求 1所述的计算机系统, 其特征是, 至少一个所述至少 一个的组合系统类型是以一种程序语言、 一种数据描述语言、 一种基于 XML 的语言和一种图形语言之一来描述。
  9. 9. 根据权利要求 1所述的计算机系统, 其特征是, 进一步包括: 至少一个组合系统实例 (Ins tance) ,各所述至少一个的组合系统实例包 括:
    一个对所述至少一个的组合系统类型的引用 (Reference) ;
    一个结果用来记录该所述至少一个的组合系统实例结束时的情况;以及 至少一个阶段机;
    其中各所述至少一个的阶段机包括:对所述至少一个的阶段机类型的一 个引用、 一个当前阶段和至少一个阶段;
    其中各所述至少一个的阶段包括:对所述至少一个的阶段类型的一个弓 ] 用和一个子系统实例;
    其中所述子系统实例是一个所述至少一个的组合系统实例和一个简单 系统实例之一; 其中所述简单系统实例包括:对所述简单系统类型的一个引用和一个对 执行所述简单系统类型行为的成果进行记录的结果。
  10. 10.一种包括至少一个用于描述一个应用系统的反应式行为的反应式组 合活动的计算机系统, 各所述至少一个的反应式组合活动包括:
    一个外部活动, 用于描述要接收的外部事件; 和
    一个内部活动, 用于描述为响应发生的所述外部活动而执行的内部动 作, 其中
    至少一个所述的外部活动是一个尚待定义的外部活动,用于描述一个要 接收尚待定义的外部事件的活动, 并且
    至少一个所述的内部活动是一个尚待定义的内部活动,用于描述一个要 执行尚待定义的内部动作的活动。
  11. 11. 据权利要求 10所述的计算机系统,其特征是,每个所述的尚待定 义的外部活动和所述的尚待定义的内部活动是用一种程序语言,一种数据描 述语言, 一种基于 XML的语言和一种图形语言之一来描述。
  12. 12.根据权利要求 11 所述的计算机系统, 其特征是, 所述图形语言是 UML活动图和 BPMN之一。
  13. 13.一种用计算机实现的,用于把组合活动从协议规范(specif icat ion) 转换为参与者行为规范的方法, 包括:
    对所述组合活动中的每一个描述所述参与者要接收事件的向内的简单 活动,由描述第一反应式行为的第一反应式组合活动来替代所述向内的简单 活动, 所述第一反应式组合活动包括作为其第一组件的所述向内的简单活 动,和作为其第二组件的一个尚待定义的内部活动,用于描述当所述向内的 简单活动发生后做出响应时执行的活动; 和
    对所述组合活动中的每一个描述所述参与者要发送事件的向外的简单 活动,由描述第二反应式行为的第二反应式组合活动来替代所述向外的简单 活动,所述第二反应式组合活动包括作为其第一组件的一个尚待定义的外部 活动, 用于描述待接收的事件, 和作为其第二组件的所述向外的简单活动, 用于响应发生的所述尚待定义的外部活动时执行。
  14. 14. 一种用计算机实现的,用于生成描述出两个参与者之间协议的协议 组合活动的方法, 包括:
    把描述一个参与者行为的参与者组合活动复制为所述协议组合活动;并 且,
    把所述协议组合活动中既不接收向内事件也不发送向外事件的各个简 单活动改变为空活动。
  15. 15. 一种用计算机实现的,用于产生描述出参与者的行为的参与者状态 机的方法, 包括:
    定义一个描述出协议的协议状态机,其中在所述协议状态机中的各个迁 移(trans i t ion)的触发器(trigger)是一个向内事件和一个向外事件之一; 针对在其触发器中具有所述向内事件的各所述迁移,添加一个尚待定义 的迁移效果 (effect) ; 并且
    针对在其触发器中具有所述向外事件的各所述迁移,添加一个迁移效果 以发送各所述向外事件, 以及
    改变所述触发器, 以等待一个尚待定义的向内事件。
  16. 16. 根据权利要求 15 所述的方法, 其中所述状态机是以状态图 (Statechar t) 来描述的。
  17. 17.—种包含了用于描述出一个应用系统的动态行为的图形语言的计算 机系统, 包括:
    至少一个包含框,用于可视化地表示所述应用系统的一部分,至少一个 所述至少一个的包含框包括多个子包含框;
    至少一个连接两个所述多个子包含框而且包含一个标识符的双向链接, 用以表示所述多个子包含框之所述两个子包含框之间的一组交流;而所述标 识符则标明了所迷的一组交流必需遵循的一个协议规范。 和 至少一个把所述多个子包含框之第一个子包含框连接到所述多个子包 含框之第二个子包含框的迁移箭头,
    而其中所述多个子包含框之第三个子包含框不由所述迁移箭头与任何 所述多个子包含框之其它的子包含框有连接, 以及
    其中所述多个子包含框之中至少一个子包含框包括一个用于描述出待 发生的外部事件的事件子子包含框和一个用于描述出为响应发生的所述外 部事件而执行的内部活动的动作子子包含框。
  18. 18. 根据权利要求 17所述的计算机系统, 其特征是, 各所述至少一个 的包含框是可视化地表示为一个多边形, 一个圆形和一个椭圆形之一。
  19. 19. 根据权利要求 17所述的计算机系统, 其特征是, 所述多个子包含 框中至少有一个子包含框包括多个子子包含框,
    其中至少有一个迁移箭头连接所述多个子子包含框中的一个子子包含 框与所述多个子子包含框中的另外一个子子包含框, 并且
    所述多个子子包含框中至少有一个子子包含框不通过所述迁移箭头与 任何其他所述多个子子包含框连接。
  20. 20. 根据权利要求 17所述的计算机系统, 进一步包括至少一个用于指 向动态组件的生成箭头。
  21. 21. 根据权利要求 17所述的计算机系统, 其特征是, 所述事件子子包 含框和所述动作子子包含框是通过一个有向链接而相连。
  22. 22. 根据权利要求 17所述的计算机系统, 其特征是, 至少一个所述至 少一个的包含框进一步包括多个结束点组件;
    其中所述多个结束点组件中至少有一个结束点组件具有一个用于描述 出在何种条件下那个包含框会结束的结束条件组件。
  23. 23. 根据权利要求 22所述的计算机系统, 其特征是, 所述结束条件组 件可视化地表示为一段文本, 一个逻辑表达式和一个数学公式之一。
  24. 24. 根据权利要求 22所述的计算机系统, 其特征是, 各所述多个结束 点组件都可视化地表示为一个符号和一个框之一。
  25. 25.一种包含了用于描述出一个应用系统的动态行为的图形语言的计算 机系统, 包括:
    至少一个包含框,用于可视化地表示所述应用系统的一部分,至少一个 所述至少一个的包含框包括多个子包含框,
    至少一个带有标识符的默向链接组件用于表示所述多个子包含框之两 个子包含框之间的一组交流,而所述标识符标明了所述的一组交流必需遵循 的一个协议规范。 和
    多个结束点組件;
    其中所述多个结束点组件中至少有一个组件具有一个用于描述出该包 含框在何种条件下会结束的结束条件组件。
  26. 26. 根据权利要求 25所述的计算机系统, 其特征是, 所述结束条件组 件可视化地以一段文本, 一个逻辑表达式和一个数学公式之一来表示。
  27. 27. 根据权利要求 25所述的计算机系统, 其特征是, 所述多个结束点 组件中至少一个结束点组件可视化地以一个符号和一个框之一来表示。
  28. 28. 根据权利要求 25所述的计算机系统, 其特征是, 各所迷至少一个 的包含框可视化地以一个多边形, 一个圆形和一个椭圆形之一来表示。
  29. 29.根据权利要求 25所述的计算机系统,其特征是,进一步包括至少一 个迁移箭头用于连接所述多个子包含框之一个子包含框和所述多个子包含 框之另外一个子包含框。
  30. 30. 根据权利要求 25所述的计算机系统, 其特征是, 至少一个所述至 少一个的子包含框包括多个子子包含框,以及至少有一个迁移箭头连接所述 多个子子包含框中之一个子子包含框与所述多个子子包含框中之另一个子 子包含框;其中所述多个子子包含框中至少有一个子子包含框不通过所述的 迁移箭头与任何其它所述多个子子包含框连接。
  31. 31. 根据权利要求 25所述的计算机系统, 其特征是, 进一步包括至少 一个用于指向动态组件的生成箭头。
  32. 32. 根据权利要求 25所述的计算机系统, 其特征是, 所述多个子包含 框中至少有一个子包含框进一步包括一个用于描述出待发生的外部事件的 事件子子包含框和一个用于描述出为响应发生的所述外部事件而执行的内 部活动的动作子子包含框。
  33. 33. 根据权利要求 32所述的计算机系统, 其特征是, 所述事件子子包 含框和所述动作子子包含框是通过一个有向链接而相连。
CNA2006800259838A 2005-05-16 2006-05-16 描述及开发动态行为应用系统的方法与系统 Pending CN101443768A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210100410.4A CN102736919B (zh) 2005-05-16 2006-05-16 描述及开发动态行为应用系统的方法与系统

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US68142005P 2005-05-16 2005-05-16
US60/681,420 2005-05-16

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201210100410.4A Division CN102736919B (zh) 2005-05-16 2006-05-16 描述及开发动态行为应用系统的方法与系统

Publications (1)

Publication Number Publication Date
CN101443768A true CN101443768A (zh) 2009-05-27

Family

ID=37430934

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201210100410.4A Active CN102736919B (zh) 2005-05-16 2006-05-16 描述及开发动态行为应用系统的方法与系统
CNA2006800259838A Pending CN101443768A (zh) 2005-05-16 2006-05-16 描述及开发动态行为应用系统的方法与系统

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201210100410.4A Active CN102736919B (zh) 2005-05-16 2006-05-16 描述及开发动态行为应用系统的方法与系统

Country Status (3)

Country Link
US (2) US8117597B2 (zh)
CN (2) CN102736919B (zh)
WO (1) WO2006122494A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103902766A (zh) * 2014-03-14 2014-07-02 西北工业大学 基于脑力负荷模型和模糊逻辑的动态功能分配方法

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8914770B2 (en) * 2006-01-26 2014-12-16 International Business Machines Corporation Generating compatible partner processes in BPEL
US7669187B2 (en) * 2006-03-22 2010-02-23 Sun Microsystems, Inc. Pluggable debugging interface for graphical notation diagrams
US20080109283A1 (en) * 2006-11-03 2008-05-08 Business Objects, S.A. Apparatus and method for mixing business intelligence and business process workflows
US8930890B2 (en) * 2006-12-05 2015-01-06 International Business Machines Corporation Software model skinning
US8756561B2 (en) * 2006-12-05 2014-06-17 International Business Machines Corporation Software model normalization and mediation
US8266584B2 (en) * 2007-04-20 2012-09-11 National Instruments Corporation Statechart development environment with a plurality of user-selectable event modes
US8473910B2 (en) * 2007-08-09 2013-06-25 Infonovus Technologies, Llc Method and system for defining a software application as a complete and consistent specification in a software development process
US8250534B2 (en) * 2007-08-09 2012-08-21 Infonovus Technologies, Llc Method and system for constructing a software application from a complete and consistent specification in a software development process
CN101589367A (zh) * 2007-09-11 2009-11-25 夏寿民 复合断言和动态系统的系统定义和gui
FI121906B (fi) * 2007-09-17 2011-05-31 Goeran Mikael Bergholm Menetelmät, tietokoneohjelmat, transaktiopalvelin ja tietokonejärjestelmä transaktioiden prosessoimiseksi
US20090138249A1 (en) * 2007-11-28 2009-05-28 International Business Machines Corporation Defining operational elements in a business process model
US8392469B2 (en) * 2008-06-11 2013-03-05 Microsoft Corporation Model based distributed application management
US8543975B2 (en) * 2008-12-18 2013-09-24 Microsoft Corporation Behavior-first event programming model
US9069559B2 (en) 2010-06-30 2015-06-30 International Business Machines Corporation Modularizing steps within a UML user model interaction pattern
US10528906B2 (en) * 2011-04-22 2020-01-07 Progress Software Corporation System and method for responsive process management driven by business visibility and complex event processing
US8457996B2 (en) * 2011-05-27 2013-06-04 Sap Ag Model-based business continuity management
US8661441B2 (en) * 2011-11-04 2014-02-25 Sap Ag Transaction load reduction for process completion
US9195457B1 (en) * 2014-06-11 2015-11-24 Amazon Technologies, Inc. Interactive application programming interface documentation
US9225776B1 (en) 2014-08-11 2015-12-29 International Business Machines Corporation Distributing UI control events from a single event producer across multiple systems event consumers
CN105912338A (zh) * 2016-04-15 2016-08-31 中国人民解放军海军航空工程学院 面向用户操作流程的软件设计方法
WO2019246630A1 (en) * 2018-06-22 2019-12-26 Otsuka America Pharmaceutical Inc. Application programming interface using digital templates to extract information from multiple data sources
US20210142234A1 (en) * 2019-11-07 2021-05-13 International Business Machines Corporation Transforming parallel process models into statecharts
US11201951B2 (en) 2020-04-29 2021-12-14 So-ming Daniel Shia Multi-role group inheritance for interacting computer systems

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7131070B1 (en) * 1999-05-13 2006-10-31 Ricoh Company, Ltd. Application unit monitoring and reporting system and method
US5297057A (en) * 1989-06-13 1994-03-22 Schlumberger Technologies, Inc. Method and apparatus for design and optimization for simulation of motion of mechanical linkages
CA2025160A1 (en) * 1989-09-28 1991-03-29 John W. White Portable and dynamic distributed applications architecture
US5257363A (en) * 1990-04-09 1993-10-26 Meta Software Corporation Computer-aided generation of programs modelling complex systems using colored petri nets
US6275843B1 (en) * 1994-12-22 2001-08-14 Unisys Corporation Method and apparatus for processing multiple service requests within a global transaction by a single server application program instance
US6983227B1 (en) * 1995-01-17 2006-01-03 Intertech Ventures, Ltd. Virtual models of complex systems
US5831853A (en) * 1995-06-07 1998-11-03 Xerox Corporation Automatic construction of digital controllers/device drivers for electro-mechanical systems using component models
GB9518540D0 (en) * 1995-09-11 1995-11-08 Nokia Mobile Phones Ltd Radio telephones and methods of operation
US5878036A (en) * 1995-12-20 1999-03-02 Spartz; Michael K. Wireless telecommunications system utilizing CDMA radio frequency signal modulation in conjunction with the GSM A-interface telecommunications network protocol
US5913065A (en) * 1997-01-31 1999-06-15 Sun Microsystems, Inc. System, method and article of manufacture for creating hierarchical folder components for use in a java application or applet
US6807583B2 (en) * 1997-09-24 2004-10-19 Carleton University Method of determining causal connections between events recorded during process execution
GB9725742D0 (en) * 1997-12-04 1998-02-04 Hewlett Packard Co Object gateway
JP3892558B2 (ja) * 1997-12-16 2007-03-14 富士通株式会社 エージェント装置及びプログラム記録媒体
US6161051A (en) * 1998-05-08 2000-12-12 Rockwell Technologies, Llc System, method and article of manufacture for utilizing external models for enterprise wide control
US7451447B1 (en) * 1998-08-07 2008-11-11 Arc International Ip, Inc. Method, computer program and apparatus for operating system dynamic event management and task scheduling using function calls
CA2369723A1 (en) * 1999-04-07 2000-10-12 Joel R. Phillips Method and system for modeling time-varying systems and non-linear systems
US6550057B1 (en) * 1999-08-31 2003-04-15 Accenture Llp Piecemeal retrieval in an information services patterns environment
US6993456B2 (en) * 1999-09-30 2006-01-31 Rockwell Automation Technologies, Inc. Mechanical-electrical template based method and apparatus
US6556950B1 (en) * 1999-09-30 2003-04-29 Rockwell Automation Technologies, Inc. Diagnostic method and apparatus for use with enterprise control
US6662225B1 (en) * 1999-11-16 2003-12-09 Ricoh Company, Ltd. Remote system usage monitoring with flexible packaging of data
US20030121027A1 (en) * 2000-06-23 2003-06-26 Hines Kenneth J. Behavioral abstractions for debugging coordination-centric software designs
US20020065950A1 (en) * 2000-09-26 2002-05-30 Katz James S. Device event handler
US6951022B1 (en) * 2001-03-14 2005-09-27 Microsoft Corporation Delegate-based event handling
US20030050983A1 (en) * 2001-09-12 2003-03-13 Johnson Paul A. External event processor system and method
US7350146B2 (en) * 2001-10-25 2008-03-25 Aol Llc, A Delaware Limited Liability Company Help center and condition-based applications
US20030109271A1 (en) * 2001-11-16 2003-06-12 Lewis John Ervin Telecommunications system messaging infrastructure
US7428597B2 (en) * 2002-03-28 2008-09-23 Sap Ag Content-based routing system and method
EP1508089A2 (en) * 2002-05-29 2005-02-23 Enigmatec Corporation Generation of executable processes for distribution
US20040006652A1 (en) * 2002-06-28 2004-01-08 Prall John M. System event filtering and notification for OPC clients
AU2003272404A1 (en) * 2002-09-16 2004-04-30 Clearcube Technology, Inc. Distributed computing infrastructure
US7512531B1 (en) * 2002-12-30 2009-03-31 Daniel Shia Method and apparatus for specifying reactive systems
US6944834B2 (en) * 2003-01-22 2005-09-13 Stmicroelectrontronics, Inc. Method and apparatus for modeling dynamic systems
US7072807B2 (en) * 2003-03-06 2006-07-04 Microsoft Corporation Architecture for distributed computing system and automated design, deployment, and management of distributed applications
US7559060B2 (en) * 2003-06-10 2009-07-07 National Instruments Corporation Time-bounded program execution
US7519960B2 (en) * 2003-12-19 2009-04-14 International Business Machines Corporation Method and system for debugging business process flow
US7367025B1 (en) * 2003-12-30 2008-04-29 Sap Ag Byte code modification for testing, debugging and/or monitoring of virtual machine based software
US20060184410A1 (en) * 2003-12-30 2006-08-17 Shankar Ramamurthy System and method for capture of user actions and use of capture data in business processes
US7506315B1 (en) * 2003-12-30 2009-03-17 Sap Ag System and method combining application tracing and distributed statistical records
US7323970B1 (en) * 2004-01-21 2008-01-29 Numerex Corporation Method and system for remote interaction with a vehicle via wireless communication
US7657234B2 (en) * 2004-02-05 2010-02-02 Qualcomm Incorporated Transparent broadcast services for a multi-mode wireless device
US7797669B1 (en) * 2004-02-13 2010-09-14 Microsoft Corporation Analysis of distributed software systems via specification substitution
US7680888B1 (en) * 2004-03-31 2010-03-16 Google Inc. Methods and systems for processing instant messenger messages
US20060167771A1 (en) * 2005-01-25 2006-07-27 Meldahl Robert A Financial event software engine
US8180029B2 (en) * 2007-06-28 2012-05-15 Voxer Ip Llc Telecommunication and multimedia management method and apparatus

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103902766A (zh) * 2014-03-14 2014-07-02 西北工业大学 基于脑力负荷模型和模糊逻辑的动态功能分配方法
CN103902766B (zh) * 2014-03-14 2016-08-17 西北工业大学 基于脑力负荷模型和模糊逻辑的动态功能分配方法

Also Published As

Publication number Publication date
WO2006122494A1 (fr) 2006-11-23
US8117597B2 (en) 2012-02-14
US20060259289A1 (en) 2006-11-16
CN102736919A (zh) 2012-10-17
US8539441B2 (en) 2013-09-17
US20120203834A1 (en) 2012-08-09
CN102736919B (zh) 2015-10-07

Similar Documents

Publication Publication Date Title
CN101443768A (zh) 描述及开发动态行为应用系统的方法与系统
Medvidovic et al. Modeling software architectures in the unified modeling language
Raistrick Model driven architecture with executable UML
Froehlich et al. Using object-oriented frameworks
Kienzle et al. Aspect-oriented design with reusable aspect models
Cossentino et al. Introducing pattern reuse in the design of multi-agent systems
Pinto et al. Specifying aspect-oriented architectures in AO-ADL
Chiprianov et al. Extending enterprise architecture modeling languages for domain specificity and collaboration: application to telecommunication service design
Meier et al. Classifying approaches for constructing single underlying models
Tolk et al. M&S within the model driven architecture
Kraemer Engineering reactive systems: A compositional and model-driven method based on collaborative building blocks
Bendraou et al. Achieving process modeling and execution through the combination of aspect and model‐driven engineering approaches
Kandé et al. From AOP to UML: Towards an aspect-oriented architectural modeling approach
Cabac Modeling agent interaction protocols with AUML diagrams and petri nets
Azaiez et al. An approach for multi-agent metamodelling
Ponder Component-based methodology and development framework for virtual and augmented reality systems
Correia et al. Software Reengineering at the Architectural Level: Transformation of Legacy Systems
Aliee Modelling the behaviour of processes using collaborating objects
Kulankhina A framework for rigorous development of distributed components: formalisation and tools
Friesen et al. Composing web-service-like abstract state machines (asm)
Kessi et al. An approach oriented viewpoints for cooperative information system eliciting requirements
Kirchhof From Design to Reality: An Overview of the MontiThings Ecosystem for Model-Driven IoT Applications
Falkenthal A method for pattern application based on concrete solutions
Hahn et al. A platform-independent model for agents
Vanderperren Combining Aspect-Oriented and Component-Based Software Engineering

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20090527