CN101630253A - 基于面向对象Petri网的并发软件开发方法和系统 - Google Patents

基于面向对象Petri网的并发软件开发方法和系统 Download PDF

Info

Publication number
CN101630253A
CN101630253A CN200910088870A CN200910088870A CN101630253A CN 101630253 A CN101630253 A CN 101630253A CN 200910088870 A CN200910088870 A CN 200910088870A CN 200910088870 A CN200910088870 A CN 200910088870A CN 101630253 A CN101630253 A CN 101630253A
Authority
CN
China
Prior art keywords
oopn
model
concurrent
net
oriented
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
CN200910088870A
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 CN200910088870A priority Critical patent/CN101630253A/zh
Publication of CN101630253A publication Critical patent/CN101630253A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明是有关于一种基于面向对象Petri网的并发软件开发方法和系统,该方法包括:对于待描述的并发系统,根据用户需求,创建OOPN模型系统;对已建立的OOPN模型系统进行死锁检测分析;对已建立的OOPN模型系统进行模型转化;对转化后的OOPN模型系统进行定制代码;对转化及定制后生成的OOPN模型系统代码进行编译及语法检测;以及对已建立的OOPN模型系统进行系统仿真。该系统包括建模模块、死锁检测模块、代码转换模块、编译模块、OOPN代码库以及仿真模块。本发明以图形方式描述并发系统的不同需求,可自动生成并发系统控制程序,降低开发成本。

Description

基于面向对象Petri网的并发软件开发方法和系统
技术领域
本发明涉及一种并发软件开发方法和系统,特别是涉及一种基于面向对象Petri网(Object-Oriented Petri Nets,简称OOPN)的并发软件开发方法和系统,可以用于一般性的并发系统建模与仿真,以生成并发程序。
背景技术
当今,并行计算和处理已逐渐成为计算机技术发展的一个重要方向,要实现并行计算,不仅需要并行的硬件,更重要的是要有相应的软件环境。在诸多现实应用领域中,都需要进行并发软件的设计与开发。
Petri网是迄今为止最好的并发模型之一。它可以清楚、简捷地表达并发、并行、异步等性质,有图形化的表示,可以进行数学分析,且是可执行的。使用Petri网描述并发系统不仅有可视化的优点,而且可以进行静态的性质分析及动态的仿真检测。所以,将Petri网引入来辅助并发软件的开发是一个极好的思路。
然而,Petri网的主要缺点是复杂性问题,它对复杂系统的描述出现了一系列问题,如建模时单个模型过大、状态爆炸等。面向对象的Petri网技术,由于同时融合了传统Petri网技术的分析能力和面向对象技术的模块化建模能力,因而有效地解决了之前出现的问题,获得了广泛的研究和应用。
该发明提出一种基于Petri网并结合面向对象思想来进行并发系统设计的开发方法,从而达到正确、方便、快捷地进行并发软件开发的目的。
单从并发软件的编程方式上看,并发软件的开发可分为三类:基于操作系统提供的系统调用;基于程序设计语言;基于并行或并发虚拟环境。这三种方法是逐层提高的,使得并发程序的开发向着容易的方向发展。然而,使用当前的这些开发方法都很难开发高质量的软件,因为:
1.编程困难:如上的方法均需要程序员首先熟悉程序运行所处环境提供的并发机制,通常是一些琐碎的应遵循的原理或库方法的定义,如线程或进程的定义、创建与启动及进一步地控制。其次,在使用所提供的机制时,必须符合某些原则以避免由于并发性的存在造成某些问题,如由于对资源的占有和申请处理不当而出现的死锁。
2.调试困难:并发程序具有随机和不确定的性质,程序的某次执行出现的问题很难使之重现。本来对顺序程序来说调试就非常麻烦,再加入多个控制流,无疑是难上加难。
由此可见,传统的并发程序开发方式无法使编程人员按照并发的特点直观、自然地进行并发程序设计,反而更容易造成设计错误。因此,为了解决这些问题需要在上述开发环境的基础上进一步完善,提出一种更有效、更可靠、更直观的方法,并提供相应的支持工具简化并行程序设计以及提供可靠的并发软件结构。作为一种描述能力很强的并发模型,Petri网模型无疑是并发软件开发的一种极佳选择,而面向对象Petri网模型又在更高抽象层次上简化了Petri网模型,解决了Petri网模型本身造成的状态爆炸问题。
发明内容
本发明的目的在于,克服现有的基于面向对象Petri网的并发软件开发方法存在的缺陷,而提供一种新的基于面向对象Petri网的并发软件开发方法和系统,所要解决的技术问题是使其以图形方式描述不同需求,自动生成并发系统控制程序,可以降低开发成本。
本发明的目的及解决其技术问题是采用以下技术方案来实现的。依据本发明提出的一种基于面向对象Perti网的并发软件开发方法,其包括以下步骤:步骤10:对于待描述的并发系统,根据用户需求,创建OOPN模型系统;步骤20:对已建立的OOPN模型系统进行死锁检测分析;步骤30:对已建立的OOPN模型系统进行模型转化;步骤40:对转化后的OOPN模型系统进行定制代码;步骤50:对转化及定制后生成的OOPN模型系统代码进行编译及语法检测;以及步骤60:对已建立的OOPN模型系统进行系统仿真。
本发明的目的及解决其技术问题还可采用以下技术措施进一步实现。
前述的基于面向对象Petri网的并发软件开发方法,其中所述的步骤10还包括:步骤101:确定组成该待描述的并发系统的各个对象的结构;步骤102:构成该待描述的并发系统静态结构;以及步骤103:确定该待描述的并发系统的初始标识。
前述的基于面向对象Petri网的并发软件开发方法,其中所述的步骤101进一步包括:步骤1011:提取该待描述的并发系统对象类;以及步骤1012:依次确定所述对象类的自身行为及与其它类的联系,并用消息队列表示对象类的外部接口,将内部控制中的变迁与相应的消息队列相连;所述的步骤102进一步包括:步骤1021:确定类之间的通讯关系;以及步骤1022:根据步骤1021中所述的类之间的通讯关系,使用门将类之间对应的输入消息队列与输出消息队列相连;所述的步骤103进一步包括:步骤1031:确定构成该待描述的并发系统的各类的对象实例;步骤1032:确定该各类的对象实例的初始状态;以及步骤1033:将代表所述对象实例的各个托肯放入各自初始状态中。
前述的基于面向对象Petri网的并发软件开发方法,其中所述的步骤20还包括:步骤201:同步分析;步骤202:局部分析;以及步骤203:层次抽象分析。
前述的基于面向对象Petri网的并发软件开发方法,其中所述的步骤30,是根据基于面向对象Petri网模型系统与高级程序设计语言之间的映射关系,对应生成高级程序设计语言的代码,将基于面向对象Petri网模型系统转化为基本的可运行的应用程序。
前述的基于面向对象Petri网的并发软件开发方法,其中所述的待描述的并发系统为电梯调度系统。
本发明的目的及解决其技术问题还采用以下技术方案来实现。依据本发明提出的一种基于面向对象Perti网的并发软件开发系统,其包括:建模模块801,用于根据面向对象Petri网的网规则建立待描述的并发系统的OOPN模型系统;死锁检测模块802,是从该建模模块801获取该OOPN模型系统,然后对该OOPN模型系统进行死锁检测分析;代码转换模块803,通过该死锁检测模块802获取最终的用户建模信息,将该OOPN模型系统转化成高级程序设计语言的代码;编译模块804,是从该代码转换模块803获取所生成的高级程序设计语言代码,然后进行编译处理;OOPN代码库805,是用于保存与管理该编译模块804所生成的高级程序设计语言代码仓库;以及仿真模块806,用于对该OOPN代码库805中的该OOPN模型系统进行模拟与仿真验证。
本发明的目的及解决其技术问题还可采用以下技术措施进一步实现。
前述的基于面向对象Petri网的并发软件开发系统,其中所述的建模模块801包括图形建模和树形建模两种建模方式。建模具体操作包括模型打开、模型关闭、模型编辑、模型保存、模型导入、模型导出及模型删除。
前述的基于面向对象Petri网的并发软件开发系统,其中所述的仿真模块806包括系统仿真运作和动态死锁检测。
前述的基于面向对象Petri网的并发软件开发系统,其中所述的待描述的并发系统为电梯调度系统。
本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明基于面向对象Petri网的并发软件开发方法和系统至少具有下列优点及有益效果:
1、本发明以面向对象的图形方式描述需求,自动生成控制程序,可以降低开发成本,减少程序员的工作量,提高开发速度。
2、面向对象Petri网所描述的需求适用的领域广泛,既可以描述法律条文,又可以描述控制系统的需求。总之,任何一个并发系统都可以使用这种图形化的语言来描述。
3、本发明中的面向对象Petri网可以简洁、清晰、高效的表述需求,是一种具有图形描述的形式化数学语言,具有死锁检测的数学理论支持,可为并发系统的安全可靠提供保证。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明可用图形方式描述实时系统需求,并能自动生成控制程序,对设备进行操作的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
图1为本发明基于面向对象Petri网的并发软件开发方法的流程图。
图2为本发明一较佳实施例电梯调度系统的控制面板对象子模型结构示意图。
图3为本发明一较佳实施例电梯调度系统的控制中心对象子模型结构示意图。
图4为本发明一较佳实施例电梯调度系统的电梯对象子模型结构示意图。
图5为本发明一较佳实施例电梯调度系统的OOPN模型系统示意图。
图6为本发明基于面向对象Petri网的并发软件开发方法的死锁检测算法流程图。
图7为本发明一较佳实施例电梯调度系统的控制面板对象的IE网示意图。
图8为本发明一较佳实施例电梯调度系统的控制中心对象的IE网示意图。
图9为本发明一较佳实施例电梯调度系统的电梯对象的IE网示意图。
图10为图7至图9合并后的IE网示意图。
图11为基于面向对象Petri网的并发软件开发系统的结构示意图。
步骤701:从OOPN模型系统中提取死锁检测模型
步骤702:判断OOPN模型结构是否为简单模型类
步骤703:对模型进行简化
步骤704:获取可达树的根节点
步骤705:根据可达树构造算法,构造可达树
步骤706:根据得到的可达树,判断是否存在死锁
步骤707:结束
步骤708:遍历所有的子模型,判断是否存在死锁
步骤709:判断子模型是否存在并发
步骤710:形成IE网,加入栈中
步骤711:判断子模型是否为伪并发
步骤712:消除伪并发,形成IE网,加入栈中
步骤713:将子模型作为一个IE网,加入栈中
步骤714:合并栈中所有的IE网
具体实施方式
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的基于面向对象Petri网的并发软件开发方法及工具其具体实施方式、方法、步骤、结构、特征及其功效,详细说明如后。
有关本发明的前述及其他技术内容、特点及功效,在以下配合参考图式的较佳实施例的详细说明中将可清楚呈现。通过具体实施方式的说明,当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图式仅是提供参考与说明之用,并非用来对本发明加以限制。
请参阅图1所示,为本发明基于面向对象Petri网(OOPN)的并发软件开发方法的流程图,包括以下步骤:
步骤10:对实际待描述的并发系统,根据用户需求,创建OOPN模型系统
对于实际中待描述的并发系统,用户首先需要根据需求分析所获取的业务信息,对待描述的并发系统的业务进行抽象,创建面向对象Petri网(OOPN)模型系统。用Petri网中的库所(state)来描述系统的状态,用Petri网的变迁(transition)来描述系统的行为(动作)。对象之间的消息传递(触发)可以通过面向对象Petri网(OOPN)中的消息队列(mesQueue)和门(gate)来描述。
本发明的一较佳实施例是以电梯调度系统做为待描述的并发系统,该电梯调度系统描述如下:有一座高楼,每层提供一组按钮(“上”或“下”),用于请求电梯的到达;该高楼有两部电梯,每部电梯内部提供一个控制面板,提供用户对目标楼层的选择,并显示电梯当前所处楼层、运行方向。两部电梯由一个电梯调度器统一进行调度。如果没有请求,并超过一定时限,电梯回到一层。希望能实现一个系统来模拟电梯的上述过程,对电梯的调度准则不做特别要求。
创建该电梯调度系统的OOPN模型系统做详细说明,它包括以下三个步骤:
步骤101:确定组成电梯调度系统的各个对象的结构。
首先进入步骤1011:提取电梯调度系统对象类:控制面板、控制中心和电梯。
然后执行步骤1012:依次确定控制面板、控制中心和电梯对象类的自身行为及与其它类的联系,并用消息队列表示对象类的外部接口,将内部控制中的变迁与相应的消息队列相连,如下所示:
(a)控制面板对象类:请参阅图2所示,为本发明一较佳实施例电梯调度系统的控制面板对象子模型结构示意图,其中,类的内部状态为:Initial:初始状态;Key_Waiting:等待面板按键状态。类的内部变迁为:Init:初始化面板;Rcv_Key:接收按键。类的消息队列为:Snd_Cmd:输出消息队列,发送面板按键命令消息。
(b)控制中心对象类:请参阅图3所示,为本发明一较佳实施例电梯调度系统的控制中心对象子模型结构示意图,其中,类的内部状态为:Initial:初始状态;Idle:空闲状态;Msg_Dealing:消息处理分发状态;State_Dealing:命令处理状态。类的内部变迁为:Init:初始化控制中心;Rcv_Msg:接收消息;Do_Queue:排队消息命令;Snd_Cmd:发送消息命令;Update_State:更新状态;Cont_Schedule:继续执行调度;Get_Queue_Cmd:获取排队命令。类的消息队列为:Panel_Req:输入消息队列,面板请求消息;Sync_Step:输入消息队列,电梯楼层同步消息;Motion_Cmd:输出消息队列,命令动作执行消息。
(c)电梯对象类:请参阅图4所示,为本发明一较佳实施例电梯调度系统的电梯对象子模型结构示意图,其中,类的内部状态为:Initial:初始状态;Idle:空闲状态;Cmd_Dealing:命令处理状态;Cmd_Judge:命令状态判断。类的内部变迁为:Init:初始化电梯;Rcv_Cmd:接收命令;Exec_One_Step:执行一步;Process_New_Cmd:产生新的命令;Cont_Exec:继续执行;Finish_Cmd:结束命令。类的消息队列为:Action_Cmd:输入消息队列,命令动作消息;Sync_Step:输出消息队列,电梯楼层同步消息。
步骤102:构成电梯调度系统静态结构。
首先进入步骤1021:确定类之间的通讯关系:控制面板对象接收到按键消息后,须向控制中心发送按键命令消息;控制中心对象接收到面板请求后,发送调度命令给电梯,同时要接收来自于电梯的楼层同步消息;电梯对象接收来自控制中心的调度命令,完成调度后向控制中心发送楼层同步消息。
然后执行步骤1022:根据步骤1021中所述的类之间的通讯关系,使用门(gate)将类之间对应的输入消息队列与输出消息队列相连:门gate0将控制面板对象的输出消息队列Snd_Cmd和控制中心对象的输入消息队列Panel_Req连接;门gate1将控制中心对象的输出消息队列Motion_Cmd和电梯对象的输入消息队列Action_Cmd连接;门gate2将电梯对象的输出消息队列Sync_Step和控制中心对象的输入消息队列Sync_Step连接。
步骤103:确定电梯调度系统的初始标识。
首先进入步骤1031:确定构成电梯调度系统的各类的对象实例:控制面板实例Panel、控制中心实例Control_Center和电梯实例Elevator。
然后进入步骤1032:确定电梯调度系统中各实例的初始状态:Panel初始时处于初始状态(Initial),Control_Center初始时处于初始状态(Initial),Elevator初始时处于初始状态(Initial)。
最后执行步骤1033:将代表电梯调度系统中实例的各个托肯(token)放入各自初始状态中:在Panel实例的Initial状态中添加一个token实例;在Control_Center实例的Initial状态中添加一个token实例;在Elevator实例的Initial状态中添加两个token实例,表示有两个待调度的电梯。
至此,完成了整个电梯调度系统的OOPN模型系统(如图5所示),图5清楚地表示了电梯调度系统涉及的控制面板、控制中心以及电梯相互之间的通讯关系。
上述电梯调度系统的OOPN模型系统包含了实际系统中的基本元素:控制面板、控制中心、电梯,而且通过图形化的方式用面向对象Petri网(OOPN)建模语言描述实际系统,符合实际中电梯调度系统的一般运作流程。
步骤20:对已建立的OOPN模型系统进行死锁检测分析。
对步骤10中已建立的OOPN模型系统,需要进行静态死锁检测分析,如果存在死锁,则提示用户改进OOPN模型系统以避免死锁的存在。
基于面向对象Petri网(OOPN)的死锁检测过程是基于Petri网中的可达树理论,首先根据对象的内部结构,提取出对其输入/输出门的发生次序的要求,构造出接口等价网(IE网),然后将不同对象的IE网合并,构成整个并发系统的IE网,通过建立IE网的可达树,分析其中是否存在死锁。
死锁检测过程分为以下三个步骤进行:
步骤201:局部分析。
即首先对每一个基本对象的内部行为进行可达树分析;然后利用可达树中各变迁(transition)的发生次序来确定通过消息队列(mesQueue)与各变迁(transition)相联系的输入/输出门的发生次序;最后根据门的发生次序构造出接口等价网,即IE网。
步骤202:同步分析。
将步骤201中得到的各IE网中出现的相同的门进行合并,得到对象间的IE网;接下来对得到的IE网进行可达树分析。
步骤203:层次抽象分析。
首先通过内层的IE网,确定与内层各门相连的外层复合对象的各门的发生次序,从而构造出外层复合对象的IE网;然后再对得到的IE网进行可达树分析。
在以上的三个步骤中,若在某一处发现有死锁,则建立的OOPN模型系统就需要改进以消除死锁;否则,即说明该OOPN模型系统中无死锁。
与基本Petri网相比,OOPN自身具有较为复杂的网结构,试图在单一步骤中直接依靠可达树理论来分析一个庞大而复杂的OOPN模型系统是否存在死锁时将会出现计算效率太低、甚至检测结果错误等问题。上述分步骤进行死锁检测的过程有效的分化了OOPN模型系统中死锁检测问题的复杂性,以避免因时间空间开销过大而导致检测效率低下或出现检测异常。
基于以上描述的OOPN模型系统的死锁检测过程,死锁检测的具体算法流程如图6所示。对于图6的详细步骤描述如下:
首先从OOPN模型系统中提取死锁检测模型701,然后判断OOPN模型结构是否为简单模型类702,若是,则执行步骤703~步骤707;若否,则为复合模型类,进入步骤708。
在上述步骤708中,若子模型为简单模型类,直接判断该子模型是否存在死锁,如果存在死锁,则可以判定整个模型存在死锁,执行步骤707;否则该子模型仍为复合模型类,则对该子模型类递归调用步骤708进行判断。如果所有的子模型类都不存在死锁,则继续执行步骤709~步骤713。
若步骤708中的子模型为简单模型类,执行步骤709,若不存在并发,则根据该子模型对象的内部结构,提取出对其输入/输出门(gate)发生次序的要求,进入步骤710,否则即存在并发,则继续执行步骤711。若是,则存在伪并发,执行步骤712,若否,则即存在无法消除的并发,执行步骤713;若子模型仍为复合模型类,则对其递归执行步骤709~步骤713。最后执行步骤714,构成整个OOPN模型系统的IE网。当IE网构造完成后,则执行步骤703~步骤707。
其中,上述过程中有关Petri网可达树的建立与分析部分,属于现行公知技术,在此不再赘述。以本发明一较佳实施例电梯调度系统为例,根据步骤10中建立的该电梯调度系统的OOPN模型系统,以下为进行死锁检测过程的详细描述:
首先根据步骤10中的电梯调度系统的OOPN模型系统,执行步骤701;然后从步骤10的具体步骤操作可知,该电梯调度系统的OOPN模型系统为一复合模型,然后再进行以下具体操作:
对该电梯调度系统的OOPN模型系统的各个子模型对象,利用可达树,依次进行局部分析:对控制面板子模型对象进行网内部结构可达树分析,检测无死锁;对控制中心子模型对象进行网内部结构可达树分析,检测无死锁;对电梯子模型对象进行网内部结构可达树分析,检测无死锁。
由上述局部分析可知,该电梯调度系统的OOPN模型系统的所有子模型对象内部都不存在死锁,则执行步骤709,对该电梯调度系统的OOPN模型系统的各个子模型对象再进行同步分析:控制面板子模型对象为一简单模型,如图7所示,提取出对其输入/输出门的发生次序的要求,构造得到的IE网;控制中心子模型对象为一简单模型,如图8所示,提取出对其输入/输出门的发生次序的要求,构造得到的IE网;电梯子模型对象为一简单模型,如图9所示,提取出对其输入/输出门的发生次序的要求,构造得到的IE网;将获得的各个子模型对象的IE网进行合并(如图10所示),对获得电梯调度系统的整个OOON模型系统的IE网建立可达树,进行可达性分析,最后检测出无死锁存在。
通过以上死锁检测可知该电梯调度系统的OOPN模型系统不存在OOPN模型系统静态结构上的死锁,可以保证电梯调度系统逻辑上的正确性以及实际运行中的安全性。在确保对实际系统所建立的OOPN模型不存在死锁之后,还需进行下述步骤30。
步骤30:对已建立的OOPN模型系统进行模型转化。
根据OOPN模型系统与高级程序设计语言之间的映射关系,可以对应生成高级程序设计语言的代码,将OOPN模型系统转化为基本的可运行的应用程序。
本发明可以将待描述的并发系统的OOPN模型系统转化成高级程序设计语言的代码,以Java代码为例,转换生成的Java代码将被编译成字节码,最后使用Java解释器来解释字节码从而达到目标系统运作的目的。下面是OOPN中各个元素与Java语言中元素的对应关系:
1)子网结构-Java类  类是共享某种公共结构和公共行为的一系列对象的集合,同一类型的对象具有共同特性和共同行为,不同的类之间最重要的区分就是可以接受何种类型的消息。子网结构亦是子网对象的抽象,子网结构中的库所与变迁使得拥有相同的子网结构的子网对象具有相同的特性,不同的子网结构类型具有不同的消息队列用以接受不同种类的消息,因此将OOPN中的子网结构SN对应成Java中的类。
2)子网对象-Java对象  填充了托肯(token)以后的网模型称为子网对象SPN,子网对象可用于描述网系统的动态行为。Java中,程序的执行实际上也是由实例化的具有域和操作的对象的行为变化所描述。这些对象通常在程序执行时动态创建,并随着程序的不断进行不断改变状态,子网对象中的托肯(token)不断流动也用于表示对象状态的变化。
3)库所集合-成员变量集合  Java中对象的状态由对象所有成员变量的值共同确定。OOPN中库所主要用于存放托肯,子网内的所有库所中所包含的各种类型托肯(token)所组成的托肯(token)集合则反应了该对象当前所处的状态。
4)变迁-操作  变迁则对应对象的操作,这种操作可能引发对象状态的变化,也可能是根据其他对象发送的消息给予回馈信息。被引发的变迁则表示该对象所在线程已经处于可以执行该操作的状态,或者已经从外界获取消息需要执行这种操作。
5)托肯-数据对象或消息托肯对应数据对象或者对象之间传递的消息。每次的变迁引发都会引起某种类型的数据对象或者消息的消耗并且产生新的对象或者消息。对这些对象或消息的控制则由OOPN模型系统中的行为定义决定。每个托肯都可以被看作是Java中的一个数据对象,携带某种类型的信息,用于对象之间的消息转换。托肯亦可携带有用户自定义的子网对象的信息,此时托肯作为子网对象的引用,当子网对象由于变迁引发而发生状态改变时,由于托肯是对子网对象的引用,其内部状态也会随之发生变化。
6)输入输出队列-参数/返回值  OOPN中,对象与对象之间的交互通过对象的输入输出消息队列和对象之间的门进行通信。这与Java中方法的参数和返回值类似,当某对象需要从其他对象处获取相关信息时,OOPN通过输入消息队列获取该消息,Java则通过传入参数的方式得到相关信息,当其他对象需要从当前对象中获取相关信息时,OOPN则通过输出消息队列传出相应消息,Java则使用返回值的方式。
7)弧-操作执行流程  OOPN中,库所与变迁之间的弧的连接表明了变迁可以被引发的条件,而变迁与库所之间的弧则表明变迁被引发后该子网对象所应处于的状态。通过两个变迁与某些库所的弧的连接状况可以得到这两个变迁的同步距离,从而得知两个变迁的执行先后顺序,对应到Java程序设计语言中则是两个操作的执行流程。
有了OOPN模型系统与高级程序设计语言之间的映射关系之后,可以采用现行代码转化技术——Java Emitter Templates(JET)技术在开源框架EclipseModeling Framework(EMF)中生成代码,实现灵活而强大的代码转换功能。
对已建立的OOPN模型系统,根据OOPN模型系统中的层次结构和包含关系,将OOPN模型系统中的信息转化为JET所接受的对象参数格式,然后将这个对象参数传递给JET,JET使用代码生成工具以及模板文件生成中间Java代码,并将其编译成字节码,最后,调用中间Java代码类的generate方法生成OOPN模型系统所需要的最终代码。
下面是JET模版的一个样例:
import java.util.*;
<%for(Iterator i=type.Importiterator();i.hasNext();){%>
<%    String imp=(String)i.next();%>
import<%=imp%>;
<%}%>
/**
 *This class extends the AdapterImpl;over the valid instances of a
<%=type.getClassName()%>.
 *Instances of this class are immutable.
<%if(type.getAuthor().length()>0){%>
 *@author<%=type.getAuthor()%>
<%}%>
<%if(type.getVersion().length()>0){%>
 *@version<%=type.getVersion()%>
<%}%>
 */
public class<%=type.getClassName()%><%if(type.getExtends()!=null
&&!type.getExtends().equals(″″)){%>extends<%}%><%=type.getExtends()%><%
if(type.getImplements()!=null  &&!type.getImplements().equals(″″)){%>implements
<%=type.getImplements()%>
<%}%>
{
<%    if(type.getMembers()!=null&&type.getMembers().size()>0){%>
       /**
        *Private members.
        */
<%     }%>
<%  for(Iterator i=type.Memberiterator();i.hasNext();){%>
<%         OOPNMember mem=(OOPNMember)i.next();%>
            private final<%=mem.getMemberType()%>m<%=mem.getCappedName()%>
=new<%=mem.getMemberType()%>();
<%  }%>
使用JET作为代码转换的核心,使得代码转换部分的可扩展性大大提高,定义出从OOPN模型系统到高级程序设计语言代码的映射关系之后,只需定制相应的JET模板(如图所示)即可轻松地完成从OOPN模型系统到其他语言代码的转化工作。这将极大地提高程序实现的效率,减轻编程人员的负担。
步骤40:对转化后的OOPN模型系统进行定制代码。
步骤30中经过OOPN模型系统转化生成的代码的层次结构相当清晰,但是可能仍无法满足实际待描述的并发系统的各方面需求,如为了本发明较佳实施例的控制电梯的调度过程,本发明需要在变迁(transition)中嵌入一些代码,或者使用一些额外的代码显示电梯的调度信息等,这就需要对所生成的代码进行调整和定制。例如,可以通过改变所生成的模型类实现,也可以对模型编辑器进行扩展和定制。EMF为用户所提供的具有高度可扩展性的基础框架以及其所生成的层次清晰的代码使得本发明可以按照自己的想法做任何定制。并且EMF的jmerge使本发明即便是在发现基础的模型描述中存在某些缺陷,需要重新生成代码时也不会丢掉这些内容。由EMF自动生成的代码中,包含了一些预定义的提供给jmerge的JavaDoc标签,比如@generated标签。当重新生成代码时,如果某些部分的代码需要保留,所需做的就是删除这些部分的@generated JavaDoc标签,jmerge将保证这些方法、属性或类保持原状。
步骤50:对转化及定制后生成的OOPN模型系统代码进行编译及语法检测。
对于已生成及调整后的代码,需要在对应的平台中进行编译及必要的语法检测,以确保待描述的并发系统无语法错误、可执行。例如,对于Java,可以在JDK平台中进行编译。变迁中嵌入的代码在动态执行之前需要进行语法检测。如果代码中存在错误,需要提示用户。可以使用JDK中一个没有公开的接口com.sun.tools.javac.Main.compile(options,print)来进行语法检测过程。
步骤60:对已建立的OOPN模型系统进行系统仿真。
经过该步骤50之后,对已建立的OOPN模型系统进行系统仿真运作,可以在完成待描述的并发系统之前,以图形化、可视化的方式模拟待描述的并发系统的执行过程。为此,本发明是在变迁(transition)中嵌入代码,当相应的变迁(transition)按照Petri网的触发规则触发时,同时动态地执行内嵌的代码。通过代码的执行结果来控制系统中的托肯(token)流动、消息的传递及实际系统的执行。
在系统仿真步骤中,可以实现对OOPN模型系统的动态死锁检测,动态发现并报告系统仿真中存在的死锁,以达到对待描述的并发系统进行分析、验证与控制的目的。
本发明以电梯调度系统为较佳实施例,经动态死锁检测分析,该电梯调度系统的OOPN模型系统在仿真过程中不存在动态死锁,可以实现正常的调度过程:当控制面板发出请求后,控制中心接受到请求,并根据请求的类别与具体信息,调度电梯进行“上”或者“下”操作;而当被调度的电梯接收到调度信息后,开始执行相应的“上”或者“下”操作,并且每经过一楼层后,向控制中心发送电梯同步状态信息,控制中心根据同步状态信息决定是继续调度执行该电梯还是转入进行下一次调度过程,完成控制电梯并发系统。
请继续参阅图11所示,为基于面向对象Petri网的并发软件开发系统80的结构示意图,该系统基于Eclipse集成开发平台,支持Java语言,以GEF作为图形化操作的基础框架,EMF作为代码实现的基础框架,整个系统作为Eclipse的一个插件形式存在。其中包括:
建模模块801,用于根据面向对象Petri网(OOPN)的网规则建立待描述系统的OOPN模型系统。具体的建立方法如步骤10所述。该建模模块801以GEF、EMF为基础框架,通过GEF实现OOPN的图形化建模,通过EMF实现模型的持久化操作及提供模型的树形编辑。建模模块的具体操作包括:模型打开、模型关闭、模型编辑、模型保存、模型导入、模型导出及模型删除。
对于建模的方式,有图形建模方式和树形编辑方式两种。其中,图形建模方式使用OOPN的网元素,提供可视化图形建模操作界面,用户可以依次选择各个网元素组建整个OOPN模型系统;树形编辑方式通过载入XML文件,按照OOPN网系统的层次结构关系,以树状结构解析XML文件供用户进行操作。
死锁检测模块802,用于按照图6所示的OOPN模型系统死锁检测算法,从该建模模块801获取该OOPN模型系统,然后对该OOPN模型系统进行死锁检测分析,如果该OOPN模型系统中存在死锁,则提示用户对该OOPN模型系统进行进一步的改进。
代码转换模块803,用于对该OOPN模型系统转化成高级程序设计语言的代码。该代码转换模块803通过该死锁检测模块802获取最终的用户建模信息,然后对该OOPN模型系统进行代码转换生成。例如,支持从OOPN模型系统到Java代码的转化。
编译模块804,用于对转换生成的代码进行编译处理,同时进行必要的语法检测。该编译模块804从该代码转换模块803获取生成的高级程序设计语言代码,然后进行编译处理。此处选用Java平台下的JDK进行编译及相应的语法检测。
OOPN代码库805,用于保存与管理该编译模块804所有生成的高级程序设计语言代码仓库。该OOPN代码库805从该编译模块804获取生成的代码,并存入OOPN代码库中,供接下来的系统仿真调用。以Java平台为例,其中,以每个OOPN模型系统作为一个独立的目录,该目录下存储该OOPN模型系统中各个OOPN对象对应的.java类文件,命名规则为“OOPN<Model_name>Model.java”,这里,<Model_name>为OOPN对象的名字属性。
仿真模块806,用于对OOPN模型系统实例进行模拟与仿真验证。该仿真模块806包括:系统仿真运作和动态死锁检测。该仿真模块806基于GEF框架,提供图形化操作,通过调用该OOPN代码库805中存入的待描述的并发系统的代码,按照Petri网的触发规则进行系统的仿真运作。以Java为例,采用多线程进行仿真过程,首先为每个OOPN模型系统实例启动一个主监控线程,然后依次为OOPN模型系统中的各个网对象启动一个线程,并注册到主监控线程中。这样,各个网对象的线程可以控制该网对象的仿真运作过程,并与其它网对象的线程进行消息通信,主监控线程负责完成对整个网系统仿真的监控,同时动态检测并报告仿真过程中发现的死锁。最后检测出无死锁后,控制待描述的并发系统完成。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

Claims (10)

1、一种基于面向对象Perti网的并发软件开发方法,其特征在于其包括以下步骤:
步骤(10):对于待描述的并发系统,根据用户需求,创建OOPN模型系统;
步骤(20):对已建立的OOPN模型系统进行死锁检测分析;
步骤(30):对已建立的OOPN模型系统进行模型转化;
步骤(40):对转化后的OOPN模型系统进行定制代码;
步骤(50):对转化及定制后生成的OOPN模型系统代码进行编译及语法检测;以及
步骤(60):对已建立的OOPN模型系统进行系统仿真。
2、根据权利要求1所述的基于面向对象Perti网的并发软件开发方法,其特征在于其中所述的步骤(10)还包括:
步骤(101):确定组成该待描述的并发系统的各个对象的结构;
步骤(102):构成该待描述的并发系统静态结构;以及
步骤(103):确定该待描述的并发系统的初始标识。
3、根据权利要求2所述的基于面向对象Perti网的并发软件开发方法,其特征在于其中所述的步骤(101)进一步包括:
步骤(1011):提取该待描述的并发系统对象类;以及
步骤(1012):依次确定所述对象类的自身行为及与其它类的联系,并用消息队列表示对象类的外部接口,将对象类内部控制中的变迁与相应的消息队列相连;
所述的步骤(102)进一步包括:
步骤(1021):确定类之间的通讯关系;以及
步骤(1022):根据步骤(1021)中所述的类之间的通讯关系,使用门将类之间对应的输入消息队列与输出消息队列相连;
所述的步骤(103)进一步包括:
步骤(1031):确定构成该待描述的并发系统的各类的对象实例;
步骤(1032):确定该各类的对象实例的初始状态;以及
步骤(1033):将代表所述对象实例的各个托肯放入各自初始状态中。
4、根据权利要求1所述的基于面向对象Perti网的并发软件开发方法,其特征在于其中所述的步骤(20)还包括:
步骤(201):同步分析;
步骤(202):局部分析;以及
步骤(203):层次抽象分析。
5、根据权利要求1所述的基于面向对象Perti网的并发软件开发方法,其特征在于其中所述的步骤(30),是根据基于面向对象Petri网模型系统与高级程序设计语言之间的映射关系,对应生成高级程序设计语言的代码,将基于面向对象Petri网模型系统转化为基本的可运行的应用程序。
6、根据权利要求1所述的基于面向对象Perti网的并发软件开发方法,其特征在于其中所述的待描述的并发系统为电梯调度系统。
7、一种基于面向对象Perti网的并发软件开发系统,其特征在于其包括:
建模模块(801),用于根据面向对象Petri网的网规则建立待描述的并发系统的OOPN模型系统;
死锁检测模块(802),是从该建模模块(801)获取该OOPN模型系统,然后对该OOPN模型系统进行死锁检测分析;
代码转换模块(803),通过该死锁检测模块(802)获取最终的用户建模信息,将该OOPN模型系统转化成高级程序设计语言的代码;
编译模块(804),是从该代码转换模块(803)获取所生成的高级程序设计语言代码,然后进行编译处理;
OOPN代码库(805),是用于保存与管理该编译模块(804)所生成的高级程序设计语言代码仓库;以及
仿真模块(806),用于对该OOPN代码库(805)中的该OOPN模型系统进行模拟与仿真验证。
8、根据权利要求7所述的基于面向对象Perti网的并发软件开发系统,其特征在于其中所述的建模模块(801)包括图形建模和树形建模两种建模方式。建模具体操作包括模型打开、模型关闭、模型编辑、模型保存、模型导入、模型导出及模型删除。
9、根据权利要求7所述的基于面向对象Perti网的并发软件开发系统,其特征在于其中所述的仿真模块(806)包括系统仿真运作和动态死锁检测。
10、根据权利要求7所述的基于面向对象Perti网的并发软件开发系统,其特征在于其中所述的待描述的并发系统为电梯调度系统。
CN200910088870A 2009-07-21 2009-07-21 基于面向对象Petri网的并发软件开发方法和系统 Pending CN101630253A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200910088870A CN101630253A (zh) 2009-07-21 2009-07-21 基于面向对象Petri网的并发软件开发方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200910088870A CN101630253A (zh) 2009-07-21 2009-07-21 基于面向对象Petri网的并发软件开发方法和系统

Publications (1)

Publication Number Publication Date
CN101630253A true CN101630253A (zh) 2010-01-20

Family

ID=41575372

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910088870A Pending CN101630253A (zh) 2009-07-21 2009-07-21 基于面向对象Petri网的并发软件开发方法和系统

Country Status (1)

Country Link
CN (1) CN101630253A (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101853201A (zh) * 2010-05-24 2010-10-06 南京航空航天大学 一种基于着色petri网的软件并行测试方法及工具
CN103092947A (zh) * 2013-01-11 2013-05-08 辽宁省电力有限公司朝阳供电公司 一种数据版本控制方法
CN104360947A (zh) * 2014-11-18 2015-02-18 合肥康捷信息科技有限公司 一种基于petri网的多进程死锁检测方法
CN104461871A (zh) * 2014-11-18 2015-03-25 合肥康捷信息科技有限公司 一种基于petri网的死锁检测方法
CN105183700A (zh) * 2015-08-03 2015-12-23 浙江理工大学 基于Petri网和常微分方程组的并发系统死锁分析方法
CN105470932A (zh) * 2015-08-28 2016-04-06 上海电力设计院有限公司 面向对象Petri网的输电网线路保护仿真方法
CN109086532A (zh) * 2018-08-09 2018-12-25 广东工业大学 一种基于oopn网模型的立体仓库半实物仿真建模方法
CN112613200A (zh) * 2020-09-12 2021-04-06 山东科技大学 一种基于FPGA的Petri网模拟仿真平台
CN115577990A (zh) * 2022-12-08 2023-01-06 中国人民解放军国防科技大学 一种用于建立装备体系任务可靠性模型的方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101853201A (zh) * 2010-05-24 2010-10-06 南京航空航天大学 一种基于着色petri网的软件并行测试方法及工具
CN103092947A (zh) * 2013-01-11 2013-05-08 辽宁省电力有限公司朝阳供电公司 一种数据版本控制方法
CN103092947B (zh) * 2013-01-11 2016-08-24 辽宁省电力有限公司朝阳供电公司 一种数据版本控制方法
CN104360947A (zh) * 2014-11-18 2015-02-18 合肥康捷信息科技有限公司 一种基于petri网的多进程死锁检测方法
CN104461871A (zh) * 2014-11-18 2015-03-25 合肥康捷信息科技有限公司 一种基于petri网的死锁检测方法
CN104360947B (zh) * 2014-11-18 2017-02-22 合肥康捷信息科技有限公司 一种基于petri网的多进程死锁检测方法
CN104461871B (zh) * 2014-11-18 2017-07-11 合肥康捷信息科技有限公司 一种基于petri网的死锁检测方法
CN105183700A (zh) * 2015-08-03 2015-12-23 浙江理工大学 基于Petri网和常微分方程组的并发系统死锁分析方法
CN105470932A (zh) * 2015-08-28 2016-04-06 上海电力设计院有限公司 面向对象Petri网的输电网线路保护仿真方法
CN109086532A (zh) * 2018-08-09 2018-12-25 广东工业大学 一种基于oopn网模型的立体仓库半实物仿真建模方法
CN112613200A (zh) * 2020-09-12 2021-04-06 山东科技大学 一种基于FPGA的Petri网模拟仿真平台
CN115577990A (zh) * 2022-12-08 2023-01-06 中国人民解放军国防科技大学 一种用于建立装备体系任务可靠性模型的方法

Similar Documents

Publication Publication Date Title
CN101630253A (zh) 基于面向对象Petri网的并发软件开发方法和系统
CN101808109B (zh) 语义Web服务组合的模型转换及形式化验证方法
Labbani UML and colored petri nets integrated modeling and analysis approach using graph transformation
Diaz-Pace et al. Integrating quality-attribute reasoning frameworks in the ArchE design assistant
WO2004012082A1 (en) Bi-directional programming system/method for program development
CN114675830A (zh) 部署边缘ai和构建可视化ai编程平台的方法、装置及电子设备
Kopp et al. A spreading-activation model of the semantic coordination of speech and gesture
Ozden Graphical programming of simulation models in an object-oriented environment
Lerchner et al. An open S-BPM runtime environment based on abstract state machines
Kerkouche et al. On the Use of Graph Transformation in the Modeling and Verification of Dynamic Behavior in UML Models.
Blumendorf Multimodal interaction in smart environments: a model-based runtime system for ubiquitous user interfaces
Vujović et al. A graphical editor for restful sensor web networks modeling
Dumas et al. A graphical uidl editor for multimodal interaction design based on smuiml
Wurdel An integrated formal task specification method for smart environments
Arief A framework for supporting automatic simulation generation from design
Rieder et al. A methodology to specify three-dimensional interaction using Petri Nets
Sugier Scripting Complex Events and Behaviors in Computer Simulation of a Security Monitored Area
Hernández et al. Automating the development of scientific applications using domain-specific modeling
Alavizadeh et al. Using UML to Develop Verifiable Reactive Systems.
Feuerstack A Method for the User-centered and Model-based Development of Interactive Applications
Watanobe et al. Diagram scenes in* AIDA
Iglesias Pure Petri nets for software verification and validation of semantic web services in graphical worlds
Sanchez et al. Hyperstories for learning
Świderska et al. Check for updates Modeling and Visualization of Complex Systems with the Use of GraphTool
Zhang et al. Controllability for discrete event systems modelled in VeriJ

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C53 Correction of patent for invention or patent application
CB03 Change of inventor or designer information

Inventor after: Ren Aihua

Inventor after: Niu Jinzhong

Inventor after: Cong Peizheng

Inventor after: Yu Xiubin

Inventor after: Yuan Panfeng

Inventor after: Sun Yunfeng

Inventor after: Shi Hongyi

Inventor before: Ren Aihua

Inventor before: Niu Jinzhong

Inventor before: Cong Peizheng

Inventor before: Yu Xiubin

Inventor before: Yuan Panfeng

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: REN AIHUA NIU JINZHONG CONG PEIZHENG YU XIUBIN YUAN PANFENG TO: REN AIHUA NIU JINZHONG CONG PEIZHENG YU XIUBIN YUAN PANFENG SUN YUNFENG SHI HONGYI

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: 20100120