基于QP框架的代码自动生成器制造技术

技术编号:15200383 阅读:70 留言:0更新日期:2017-04-22 01:58
本发明专利技术提供了一种基于QP框架的代码自动生成器,可将按一定规范绘制的UML状态图转化成可在量子化平台上运行的C++代码的工具。该工具利用ODG文件与XML文件的关系,首先将以OpenOffice绘制odg形式的状态图文件转化成相应的XML文件,并从中提取出包含程序状态图静态和动态元素的节点信息,以Visual Studio 2012为环境搭建代码自动生成器工具进一步将状态图信息直接转化成具有一定规范的C++代码。本发明专利技术可以有效避免繁琐的代码编写工作,减轻因代码编写错误产生的程序调试工作,大大提高了软件开发的效率。

Automatic code generator based on QP framework

The invention provides an automatic code generator based on the QP framework, which can transform the UML state diagram drawn according to a certain specification into a C++ code which can be run on the quantization platform. The tool uses ODG file and XML file, OpenOffice will be the first to draw a state diagram in the form of a ODG file into the corresponding XML file, and extract the node information including the program state diagram of the static and dynamic elements from Visual to Studio, 2012 environment automatic code generator tool will further state map information directly into a certain standard C++ code. The invention can effectively avoid tedious code writing, reduce the program debugging caused by code writing error, and greatly improve the efficiency of software development.

【技术实现步骤摘要】

本专利技术实现了一种可将按一定规范绘制的UML状态图转化成可在量子化平台上运行的C++代码的工具。
技术介绍
随着软件技术的不断普及与提高,软件产品的需求一直呈现出日益增长的趋势。人们一边在享受计算机在工作和生活中带来的巨大便利的同时,也对计算机软件和硬件的开发提出了更多的要求。这些要求具体表现在,一是软件的开发所要处理的环境变得越来越复杂,功能要求更加全面,二是用户的需求多变,三是系统要更加安全可靠和稳定。而在软件工程高度发展的今天,很多软件开发人员仍然使用手工编码的方法。这种传统的开发方式通常效率低而且开发周期长,并且存在大量的重复劳动。这样当遇到大型复杂软件项目会出现延期、成本超出计划,甚至中途夭折等问题,所以这将引起软件开发人员对于如何降低软件开发和维护成本、提高开发效率、减小需求变更对系统的影响以及延长系统的生命周期进行思考。可是传统的开发手段总是很难完善这种问题。这就需要一种可以避免低水平重复开发、能实现标准化生产的软件开发新方式,以帮助企业应对快速变化的市场环境,而自动代码生成技术在一定程序上解决了这个问题。(1)量子框架(QP)量子框架是是基于事件驱动并发状态机的一种应用框架。传统方法中用户主要考虑的是共享资源和各种同步机制,而量子框架将共享资源封装在一个专用的活动对象中,系统的其余部分共享活动对象,而不是直接共享资源。每一个活动对象都是一个单独的活动线程,对应着不同的任务。不同活动对象之间订阅和发布不同的事件实例,事件实例通过量子框架来进行分发。1)QF通用结构QF的结构对于任何基于活动对象的框架来说都是典型的。QF的通用结构具有以下特点:QF是分层设计的,它以实时系统多线程为基础,并提供事件队列和内存池的服务。QF提供活动对象基类,以派生具体的活动对象。活动对象为活动对象分配一个执行线程和一个事件队列。基于QF的应用程序通过从活动对象和事件派生子类来扩展框架。应用程序通过量子框架API使用QF的通信和定时服务,不需要直接访问实时系统API。2)活动对象活动对象是QF中的主要元素,可以与其它活动对象并发执行,并通过发送和接收事件来于他们通信。活动对象一个最重要的特性是它不透明的封装壳,他将活动对象的内部结构与外部环境严格地分离开来,唯一能从外面或里面穿过这个壳的对象是事件实例,这与面向对象思想中的类是非常相似的,被保护、或私有的数据成员和函数成员只能通过共有的成员函数来与外界进行沟通。每个活动对象可以看作是一个独立的任务,所有QF活动对象都是从QActive继承而来,QActive作为活动对象的基类有三个特征:(1)它是一个状态机,继承自QHsm类;(2)它有一个事件队列,作为与其他活动对象通信的外部接口;(3)它有一个执行线程。另外,QActive类是可配置的,例如myPrio可以由用户来定义该活动对象特有的一些属性。3)状态转换及发布订阅模型在QF中每个具体的活动对象都是一个状态机,因为它间接来源于QHSM基类,使得行为继承元模式的全部能力和方便都可以立即用于构造活动对象的行为。在应用级,通常可以将一个活动对象的所有其他方面都提取出去,而将它仅仅看做是一个状态机。这样以来,用户就不需要关注每一个活动对象的其他附加元素,包括事件队列或执行线程等,只需将设计重点放在状态机的状态转换,信号的细粒度上来。状态机的状态转换是由量子事件处理器(QEP)来完成的,QEP作为应用系统的一部分与量子框架一起管理整个状态机的运转。QEP支持层次式状态机,完成任意状态的进入/退出动作。量子框架还提供了一种轻量级的发布-订阅机制,来解决活动对象间事件交换。事件订阅者向量子框架(QF)订阅事件(通过QActive_subscribe_()、QActive_unsubscribe_()、QActive_unsubscribeAll_()),事件产生者将事件发布到框架中(通过QF_publish()),由量子框架来分发事件。(2)UML状态机状态机是一种逻辑上的流程机,用于描述一个对象在其生命周期中的动态行为,表现对象响应事件所经历的状态序列以及伴随的动作。由于现在的程序设计功能越来越强大和复杂为了简化人们的逻辑思维过程,所以引入一个状态机的概念。当我们打开思路,把状态机作为一种思想导入到程序中去时,就会找到解决问题的一条有效的捷径。有时候用状态机的思维去思考程序该干什么,比用控制流程的思维去思考,可能会更有效。这样一来状态机便有了更实际的功用。比如说一个按键命令解析程序,就可以被看做状态机,本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。一般来说,在一个结构完整清晰且执行效率非常高效的程序中,都能发现其中有状态机的性质。UML状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。①状态(State)指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件;②事件(Event):当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。③动作(Action):条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。④转换(Transition)指的是两个状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并将在某个事件发生同时某个特定条件满足时进入第二个状态。⑤次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。如果我们进一步归纳,把“现态”和“次态”统一起来,而把“动作”忽略(降格处理),则只剩下两个最关键的要素,即:状态、迁移条件。状态机也可以分为两大类,即有限状态机(FiniteStateMachine,FSM)和层次状态机(HierarchicalStateMachine,HSM)两种。本专利技术采用层次状态机。层次状态机基本的概念和状态机一样,也是用来表现各种不同状态、不同约束、状态迁移。层次状态机可以将一些状态节点的归结成一个超级状态,共享一些状态跳转逻辑。相对于状态机,它主要提供了可重用得跳转条件。绝大多数层次状态机设计的时候,每一个子状态通常只包含在一个Super-States里面。例,如果A,B两个Super-State都包含相同的子状态,则A,B分别添加两个不同的子状态实例。超级状态跳转依然需要考虑很多不同的子状态的情况。层次状态机实现形式中的行为继承与类继承之间的类相似,层次状态机应该能够模拟下列属于C++对象模型:使用和维护简单,应允许状态机容易改变,不应要求转换连接的人工代码,所需要的修改限制在代码的一个地方还有提供好的运行-时间效率和小的存储。为了满足上面的要求,层次状态机的实现着重于下面的主要元素,完全支持行为继承的层次关系用状态进入和退出动作实现有保证得初始化和清除通过类继承支持规定的状态模型。层次状态机的基本要素和有限状态机类似。也包括如下:1)状态:在层次状态的情形下,状态处理器必须返回朝状态,这导致层次状态处本文档来自技高网...
基于QP框架的代码自动生成器

【技术保护点】
基于QP框架的代码自动生成器,其特征是包括以下步骤:步骤一,基于OpenOffice Draw的符合一定规范的状态图设计的步骤;步骤二,OpenOffice Draw文本信息的提取的步骤;步骤三,将提取的零散的信息整理成符合C/C++语言规范和QP编程规范的代码的步骤。

【技术特征摘要】
1.基于QP框架的代码自动生成器,其特征是包括以下步骤:步骤一,基于OpenOfficeDraw的符合一定规范的状态图设计的步骤;步骤二,OpenOfficeDraw文本信息的提取的步骤;步骤三,将提取的零散的信息整理成符合C/C++语言规范和QP编程规范的代码的步骤。2.根据权利要求1所述的基于QP框架的代码自动生成器,其特征是步骤一中包括:1)在OpenOffice的画图模块中设计第一个方框中State表示整个状态的名称,第二个方框中表示状态中的一些事件,将在此状态下需要处理的事件在第二个方框内进行描述;2)进行转换设计,将其属性名称设置为transition,用transition连接不同的两种状态信息,在满足转换条件guard1的情况下,状态state1向状态state2跳转;如果某一条件发生变化,那么状态state2转换成状态state1,其中transition的转换方向通过判断transition的起点状态ID和终点状态ID来判断;3)初始化Initial设计,导出xml文件后,状态初始的描述均在XML中的“initial”节点下,“initial”节点正是在进行状态图设计时所设计的状态初始化initial的属性名称;initial状态也有一个属于它的唯一的ID,此时结合transition的条件可以查找到初始状态的转换;4)预定义图设计,添加一个程序预...

【专利技术属性】
技术研发人员:陈胜勇程徐许金山唐庭龙刘梦娜赵萌
申请(专利权)人:天津理工大学
类型:发明
国别省市:天津;12

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1