一种面向无线传感网的模型到代码的转化方法

文档序号:6370231阅读:173来源:国知局
专利名称:一种面向无线传感网的模型到代码的转化方法
技术领域
本发明涉及一种面向无线传感网的模型到代码的转化方法,主要是建立模型到代码的映射规则,利用访问者来访问模型来实现转化,属于无线传感网、软件工程、模型驱动和代码生成交叉技术应用领域。
背景技术
无线传感网是由部署在监测区域内的传感器节点组成,通过无线通信方式形成的一个多跳的自组织网络系统,目的是协作地感知、采集、处理网络覆盖区域中对象信息,并发送给观察者。传感器节点是由传感器模块、处理器模块、无线通信模块和能量供应模块四部分组成,传感器模块负责监测区域内信息的采集和数据转换;处理器模块负责控制整个传感器节点的操作,存储和处理本身采集的数据以及其他节点发来的数据;无线通信模块负责与其他传感器节点进行无线通信,交换控制消息和收发采集数据;能量供应模块为传感器节点提供运行所需要的能量,通常使用微型电池。无线传感网是信息科学领域中ー个全新的发展方向,同时也是新兴学科与传统学科进行领域间交叉的結果。无线传感网则将网络技术引入到无线智能传感器中,使得传感器不再是单个的感知単元,而是能够交换信息、协调控制的有机结合体,实现物与物的互联,把感知触角深入世界各个角落,必将成为下一代互联网的重要组成部分。基于无线传感网的特点和应用需求,伯克利大学开发的TinyOS是ー个是为传感器网络节点而设计的ー个事件驱动的操作系统,传感器网络节点拥有非常有限的资源。为满足无线传感网的要求,研究人员在TinyOS中引入4种技术轻线程、主动消息、事件驱动和组件化编程。轻线程主要是针对节点并发操作可能比较频繁,且线程比较短,传统的进程/线程调度无法满足的问题提出的。它基于体现TinyOS的结构化概念和执行模型而设计。它采用组件的架构方式,结构高度模块化,且能突破传感器节点的各种限制,快速实现各种应用,非常适合无线传感网的应用,因而被广泛应用并成为很多系统的參考设计。TinyOS的组件库包括网络协议、分布式服务、传感器驱动以及数据获取工具等,不用的组件不会引入进来,从而达到減少内存需求的目的。TinyOS采用了事件驱动模型,这样可以在很小的空间中处理高并发事件,并且能够达到节能的目的。TinyOS是专门针对传感器网络特点而设计的操作系统。TinyOS使用高效的基于事件的执行方式,包含经过特殊设计的组建模型,从而成为高效率的模块化和易于构造的组件型应用软件。在TinyOS中,应用程序开发人员可以通过NesC语言表达组件以及组件之间的事件/命令接ロ。NesC主要用在TinyOS中,TinyOS也是由NesC编写完成的。NesC是对C的扩展,主要用于传感器网络的编程开发。TinyOS操作系统就是为用户提供ー个良好的用户接ロ。组件分为配置文件和模块,程序的流程是通过配置文件中接ロ的连接实现而构建起来的,而具体实现的逻辑功能是通过模块完成的。每个模块由ー组命令和事件组成,这些命令和事件成为该模块的接ロ。一般来说,上层组件对下层组件发命令,下层组件发信号通知事件的发生,最底层的组件直接和硬件交互,从而自上到下形成ー种树状结构。
同时,统ー建模语言也很广泛地应用在无线传感网开发中。统ー建模语言,统ー建模语言,能为软件系统提供可视化建模的ー种语言。在开发系统产品过程中,能为系统产品提供说明、可视化、和编辑文档等功能。统ー建模语言建模方法是ー种总结了以往建模技术的经验并吸收当今优秀成果的标准建模方法。统ー建模语言包括概念的语义、表示法和说明,提供了静态、动态、系统环境和组织结构的模型。它是为支持大部分现存的面向对象开发过程而设计的。统ー建模语言描述了ー个系统的静态结构和动态行为,它将系统描述为一些离散的相互作用的对象并最终为外部用户提供一定功能的模型结构。静态结构定义了系统中重要对象的属性和操作以及这些对象之间的相互关系;动态行为定义了对象的时问特性和对象为完成目标而相互进行通信的机制。统ー建模语言还包括可将模型分解成包的结构组件,以便于软件小组将大的系统分解成易于处理的块结构,并理解和控制各个包之间的依赖关系,在复杂的开发环境中管理模型単元。它还包括用于显示系统实现和组织运行的组件。在无线传感网开发中,广泛采用NesC语言,而NesC也主要应用在TinyOS中,在开发过程中,比较流行的ー种方式为先建立模型,然后用相关软件将模型直接转化为目标代码。
模型到代码的转化技术已经广发应用在项目开发中,模型驱动开发是软件开发方法中很重要的一种开发方法,具有诸多优点,很适合传感器网络软件的开发。ー个好的模型驱动开发的平台决定了,该开发模型是否可以被推广并且可以提供传感器网络的开发效率。借助已经日趋成熟的统ー建模语言统ー建模语言,整个软件开发过程參考了面向对象的软件开发方法。包含需求分析、概要设计、详细设计等过程。结合传感网软件开发的特点,传感网软件开发方法的优势在于可以较好地分析建模传感网,辅助大規模的传感网软件开发。本模型可以分析建立以组为单位的传感网活动,清晰地构建大規模传感网软件的体系结构模型。该智能体可以自组织的建立传感网,独立仲裁决定自己的行为,參与以组为単位的各种智能体组活动。本传感网软件开发方法使得传感网软件开发模型化,提高了传感网软件开发效率,降低了传感网软件开发的难度。代码自动生成技术已成为项目开发不可或缺的ー项技能,它通过自动生成文本的方式,減少开发工作量并防止缺陷产生。基于模型的代码生成是当前软件工程研究的重要领域。从模型直接转换成源代码能使开发这保持设计模型和实现的统ー性,减少书写代码的工作量,提高软件开发的速度和质量。传统意义上的代码生成,首先识别应用源代码中经常出现的重复性代码,然后自动生成这些重复部分来代替手工编写的目标代码,所谓目标代码,是指与应用相关的一系列产品,例如文档,脚本,定义文件等。如果没有代码生成工具,开发者将手工书写所有代码,虽然这样可以得到灵活性较高的产品,但是,使用代码自动生成可以降低成本,減少出错率,使可靠性更强。

发明内容
技术问题本发明的目的是提出一种面向无线传感网的由统ー建模语言模型向代码的转换方法,解决了当前面临的模型到代码转化方法的不灵活性以及在传感网应用中转化的复杂性等问题,提高了应用开发效率。技术方案本发明所采用的统ー建模语言到代码的转换方法是基于访问者的转化方法,根据模型与代码之间的关系,定义模型与目标代码的具体映射规则,然后设置ー个访问者来访问该模型,将映射规则嵌入至访问者,根据模型到代码映射规则,访问者在对模型的访问中,边读模型,边根据映射规则,用目标代码对模型进行解析,实现到目标语言框架模型的转化,由此获得目标语言程序代码,完成模型向目标语言的转化。该方法包括如下步骤
步骤I、创建统一建模语言模型
创建统一建模语言模型,首先是从整个系统的逻辑数据模型开始,然后通过全局信息需求视图来说明系统中所有基本数据实体及其相互关系,最后逐步构造整个模型;该方法所述的对系统对象的建模过程,认为在无线传感网中的节点是静态的;
步骤2、检查统一建模语言模型的正确性 首先通过建模工具中模型检查设置,用来检查访问问题,从模型菜单项目中找出模型中的问题和不一致性,然后寻找不同包的两个类之间存在关系时发生的问题,最終将发现的错误写入日志报告。所发现的错误包括序列框图或协作框图中的消息与操作不映射,以及序列框图或协作框图中的对象与类不映射;
步骤3、设置访问者,定义映射规则 步骤4、访问模型
用访问者来访问模型,边访问边对照映射规则进行到代码的转换,最終获得目标语言框架模型;
步骤5、代码生成
代码生成的过程为首先访问者访问模型,然后边读模型边根据映射规则进行转化,最终生成目标代码框架。设置访问者的访问方法,采用的是基于访问者的方式进行转换;访问者主要负责访问模型的内部,在访问模型的同时写代码到文本输出流,实现模型到代码的转化;访问者首先利用一系列的类来建立系统的统一建模语言模型,然后提供ー个模型的内部表示并加上一些操控模型的预先定义函数,实现面向对象的框架,最后通过操控模型的预先定义函数和一个访问机制来产生代码。模型到代码的映射规则,统ー建模语言模型中描述的类、属性、操作的概念与目标代码中的相应概念直接对应,其中的关联、聚集、依赖、泛化关系分别对应的转化方法如下
31)所述映射规则中的关联关系对应的转化方法为首先将统ー建模语言模型中两个类的关联端及关联产生的属性作为源对象,目标对象就是代码模型中的类、属性和方法,实现统ー建模语言表示的对象间的关联;然后将关联关系及其属性分配到相关联的类中;所述关联关系是指类与类之间的关系,由关联产生的属性作为相应类中的属性,而且每个类还包含引用属性,通过该属性可以访问相关联的类;
32)所述映射规则中的聚集关系对应的转化方法为首先把聚集两端的类分别映射为对应的代码类对象,然后在目标代码模型中表示出整体类添加对部分类的引用;
33)所述映射规则中的泛化关系对应的转化方法为在转换时将父类的属性转换为目标子类的属性,变换的源对象为父类的属性,目标对象为子类的属性,所述泛化关系具体含义为继承,子类继承父类的所有属性,变换初始条件为子类与父类之间存在继承关系,变换内容是把源对象的属性转换成目标对象的属性;
34)所述映射规则中的依赖关系对应的转化方法为将模型中依赖关系表示为类的属性,同时把被依赖类的对象转换为依赖对象的ー个引用属性。4、根据权利要求I所述的面向无线传感网的模型语言到代码转化方法,其特征在于所述的访问模型,其访问的步骤为
41)根据当前的模型状态以及映射规则,选择满足匹配条件的一组规则;
42)按调度机制从满足条件的一组规则中选择一条规则,找出下一步中执行的规则;
43)访问者访问,执行映射规则,生成目标代码元素,改变相应的模型和目标代码状态,并选择下一歩中匹配的规则;
44)重复以上三步直至停止;
45)生成完整的目标代码,保存转换记录,记录转换过程中的转换步骤和错误信息。有益效果本发明提出了一种面向无线传感网的统ー建模语言模型与到代码的转化方法,通过设置访问者,实现模型到目的代码的转换。本发明所述的方法具有如下的有益效果
(1)生成代码的准确性高。通过设置访问者实现了模型到代码的转化。生成的代码能与系统要求一致的代码质量,生成的代码只依赖代码生成的模板、文件和模型。(2)代码与模型的同步性。代码生成技术自动维护代码和数据模型的一致性,访问者通过重新访问模型,对模型的修改可以自动反映到代码中,有效实现代码与模型的同步性。(3)代码修复的简便性。特别在需要大量更改代码的情况下,只需要更改模板并重新访问模型即可。对于修复软件Bug,只需要修复模板的Bug然后重新运行访问模型就可以修复所有的生成文件的Bug。(4)提高应用开发效率。本发明在具体应用时可以将更多的时间花费在业务相关的设计和实现上,从而可以大大提高了应用开发效率和产品质量。


图I是模型驱动方法过程图,
图2是模型到代码转化流程示意图。
具体实施例方式I、创建统一建模语言模型
创建统一建模语言模型,首先是从整个系统的逻辑数据模型开始,然后通过全局信息需求视图来说明系统中所有基本数据实体及其相互关系,最后逐步构造整个模型。该方法所述的对系统对象的建模过程,认为在无线传感网中的节点是静态的。(I)创建系统的用例图
用例图显示系统中的使用案例与角色及其相互关系,角色是与所建系统交互的对象(人或物),使用案例是系统提供的高级功能模块,演示了人们如何使用案例,首先创建主用例框图,显示系统的总体视图。
(2)创建系统的逻辑视图首先在逻辑视图中创建序列框图和协作框图。交互框图一歩一歩显示使用案例的流程。包括流程中需要什么对象;对象相互发送什么消息;什么角色启流;消息按什么顺序发送。(3)在逻辑视图中创建类、包和类框图
(4)创建系统的组件视图。组件视图主要关心系统的实际结构。组件就是与系统向关联的文件,可以是源代码、可执行文件或DLL文件。组件是代码的物理模块。生成代码之前,将每个文件映射相应组件。(5)创建系统的部署视图 部署视图包含处理器、设备、进程和处理器与设备之间的连接。这一切都显示在部署框图上,每个系统只有ー个部署框图,所以整个模型中也只有ー个部署框图。2、检查统一建模语言模型的正确性
首先通过建模工具中模型检查设置,用来检查访问问题,从模型菜单项目中找出模型中的问题和不一致性,然后寻找不同包的两个类之间存在关系时发生的问题,最終将发现的错误写入日志报告。所发现的错误包括序列框图或协作框图中的消息与操作不映射,以及序列框图或协作框图中的对象与类不映射等。3、定义统一建模语言模型到NesC代码的映射规则
首先访问者通过一系列的类来建立系统的统一建模语言模型,然后提供ー个模型的内部表示并加上一些操控模型的API,从而实现面向对象的框架,最后通过操控模型的API和ー个访问机制来产生代码。映射规则为统ー建模语言模型中描述的类、属性、操作等概念与目标代码中的相应概念直接对应,而关联、聚集、依赖等概念却与代码中的表达形式产生了不一致性。本发明用产生属性的方法来表示对象之间的关联、依赖、泛化和聚集关系,其分别对应的转化方法如下
I)所述映射规则中的关联关系对应的转化方法为首先将统ー建模语言模型中两个类的关联端及关联产生的属性作为源对象,目标对象就是代码模型中的类、属性和方法,实现统ー建模语言表示的对象间的关联。然后将关联关系及其属性分配到相关联的类中。所述关联关系是指类与类之间的关系,由关联产生的属性作为相应类中的属性,而且每个类还包含引用属性,通过该属性可以访问相关联的类。2)所述映射规则中的聚集关系对应的转化方法为首先把聚集两端的类分别映射为对应的代码类对象,然后在目标代码模型中表示出整体类添加对部分类的引用。3)所述映射规则中的泛化关系对应的转化方法为在转换时将父类的属性转换为目标子类的属性,变换的源对象为父类的属性,目标对象为子类的属性。所述泛化关系具体含义为继承,子类继承父类的所有属性,变换初始条件为子类与父类之间存在继承关系,变换内容是把源对象的属性转换成目标对象的属性。4)所述映射规则中的依赖关系对应的转化方法为将模型中依赖关系表示为类的属性,同时把被依赖类的对象转换为依赖对象的ー个引用属性。
统ー建模语言模型与NesC的映射规则如下
(1)类图、对象图ーNesC中各个模块,类的属性对应模块属性,方法对应模块接ロ定义,
(2)用例图ーNesC中程序的流程,不同參与者对应的模块流程不同,一个參与者的所有行为功能就是对应模块实现的功能,
(3)状态图ー各个功能实现的使用条件,即对应判断语句,以及相应条件下的执行,
(4)序列图ー对应模块的具体实现,如模块功能实现时需调用的函数,调用的步骤,各个接ロ需要做的定义等,
(5)活动图一函数的具体功能,即函数的具体定义,
4、访问模型
首先,根据当前的模型状态以及映射规则,选择满足匹配条件的一组规则; 其次,按调度机制从满足条件的一组规则中选择一条规则,找出下一步中执行的规
则;
然后,访问者访问,执行映射规则,生成目标代码元素,改变相应的模型和目标代码状态,并选择下一歩中匹配的规则;
最后,生成完整的目标模型,保存转换记录,记录转换过程中的相关信息。5、代码生成
代码生成的过程为首先访问者访问模型,然后边读模型边根据映射规则进行转化,最终生成目标代码框架。一、体系结构
本发明所述的模型到代码的转化包括模型模块和在此基础上的基于访问者的转化方法。I、模型模块
该模块主要负责为无线传感网系统对象建模,提供静态、动态、系统环境和组织结构的模型,将系统生成为ー些离散的相互作用的对象并为外部用户提供一定功能结构。所述模型中的静态结构主要负责系统中重要对象的属性和操作以及这些对象之间的相互关系,动态行为定义对象的时间特性和对象为完成目标而相互进行通信的机制;所述模型中的动态结构主要负责说明系统的功能和行为。2、基于访问者的转化方法
基于访问者的转化方法为首先定义模型到代码的映射规则,然后将映射规则嵌入至访问者,最后访问者访问模型,最終实现模型到代码的转化。转化方法由两个模块组成(O映射规则
映射规则的主要作用在于定义模型到代码的具体转化关系。(2)访问者模块
该模块主要负责访问模型的内部,访问者在访问模型的同时写代码到文本输出流,实现模型到代码的转化。具体模块内容为访问者首先利用一系列的类来建立系统的统一建模语言模型,然后提供ー个模型的内部表示并加上一些操控模型的API,实现面向对象的框架,最后通过操控模型的API和一个访问机制来产生代码。ニ、方法流程
该方法包括如下步骤
步骤I、创建统一建模语言模型
创建统一建模语言模型,首先是从整个系统的逻辑数据模型开始,然后通过全局信息需求视图来说明系统中所有基本数据实体及其相互关系,最后逐步构造整个模型;该方法所述的对系统对象的建模过程,认为在无线传感网中的节点是静态的;
步骤2、检查统一建模语言模型的正确性
首先通过建模工具中模型检查设置,用来检查访问问题,从模型菜单项目中找出模型中的问题和不一致性,然后寻找不同包的两个类之间存在关系时发生的问题,最終将发现的错误写入日志报告。所发现的错误包括序列框图或协作框图中的消息与操作不映射,以及序列框图或协作框图中的对象与类不映射;
步骤3、设置访问者,定义映射规则 步骤4、访问模型
用访问者来访问模型,边访问边对照映射规则进行到代码的转换,最終获得目标语言框架模型; 步骤5、代码生成
代码生成的过程为首先访问者访问模型,然后边读模型边根据映射规则进行转化,最终生成目标代码框架。设置访问者的访问方法,采用的是基于访问者的方式进行转换;访问者主要负责访问模型的内部,在访问模型的同时写代码到文本输出流,实现模型到代码的转化;访问者首先利用一系列的类来建立系统的统一建模语言模型,然后提供ー个模型的内部表示并加上一些操控模型的预先定义函数,实现面向对象的框架,最后通过操控模型的预先定义函数和一个访问机制来产生代码。模型到代码的映射规则,统ー建模语言模型中描述的类、属性、操作的概念与目标代码中的相应概念直接对应,其中的关联、聚集、依赖、泛化关系分别对应的转化方法如下
31)所述映射规则中的关联关系对应的转化方法为首先将统ー建模语言模型中两个类的关联端及关联产生的属性作为源对象,目标对象就是代码模型中的类、属性和方法,实现统ー建模语言表示的对象间的关联;然后将关联关系及其属性分配到相关联的类中;所述关联关系是指类与类之间的关系,由关联产生的属性作为相应类中的属性,而且每个类还包含引用属性,通过该属性可以访问相关联的类;
32)所述映射规则中的聚集关系对应的转化方法为首先把聚集两端的类分别映射为对应的代码类对象,然后在目标代码模型中表示出整体类添加对部分类的引用;
33)所述映射规则中的泛化关系对应的转化方法为在转换时将父类的属性转换为目标子类的属性,变换的源对象为父类的属性,目标对象为子类的属性,所述泛化关系具体含义为继承,子类继承父类的所有属性,变换初始条件为子类与父类之间存在继承关系,变换内容是把源对象的属性转换成目标对象的属性;
34)所述映射规则中的依赖关系对应的转化方法为将模型中依赖关系表示为类的属性,同时把被依赖类的对象转换为依赖对象的ー个引用属性。所述的访问模型,其访问的步骤为
41)根据当前的模型状态以及映射规则,选择满足匹配条件的一组规则;
42)按调度机制从满足条件的一组规则中选择一条规则,找出下一步中执行的规则;
43)访问者访问,执行映射规则,生成目标代码元素,改变相应的模型和目标代码状态,并选择下一歩中匹配的规则;44)重复以上三步直至停止;
45)生成完整的目标代码,保存转换记录,记录转换过程中的转换步骤和错误信息。·
权利要求
1.一种面向无线传感网的模型语言到代码转化方法,其特征在于该方法包括如下步骤 步骤I、创建统一建模语言模型 创建统一建模语言模型,首先是从整个系统的逻辑数据模型开始,然后通过全局信息需求视图来说明系统中所有基本数据实体及其相互关系,最后逐步构造整个模型;该方法所述的对系统对象的建模过程,认为在无线传感网中的节点是静态的; 步骤2、检查统一建模语言模型的正确性 首先通过建模工具中模型检查设置,用来检查访问问题,从模型菜单项目中找出模型中的问题和不一致性,然后寻找不同包的两个类之间存在关系时发生的问题,最終将发现的错误写入日志报告,所发现的错误包括序列框图或协作框图中的消息与操作不映射,以及序列框图或协作框图中的对象与类不映射; 步骤3、设置访问者,定义映射规则 步骤4、访问模型 用访问者来访问模型,边访问边对照映射规则进行到代码的转换,最終获得目标语言框架模型; 步骤5、代码生成 代码生成的过程为首先访问者访问模型,然后边读模型边根据映射规则进行转化,最终生成目标代码框架。
2.根据权利要求I所述的面向无线传感网的模型语言到代码转化方法,其特征在于设置访问者的访问方法,采用的是基于访问者的方式进行转换;访问者主要负责访问模型的内部,在访问模型的同时写代码到文本输出流,实现模型到代码的转化;访问者首先利用一系列的类来建立系统的统一建模语言模型,然后提供ー个模型的内部表示并加上一些操控模型的预先定义函数,实现面向对象的框架,最后通过操控模型的预先定义函数和ー个访问机制来产生代码。
3.根据权利要求I所述的面向无线传感网的模型语言到代码转化方法,其特征在于模型到代码的映射规则,统ー建模语言模型中描述的类、属性、操作的概念与目标代码中的相应概念直接对应,其中的关联、聚集、依赖、泛化关系分别对应的转化方法如下 31)所述映射规则中的关联关系对应的转化方法为首先将统ー建模语言模型中两个类的关联端及关联产生的属性作为源对象,目标对象就是代码模型中的类、属性和方法,实现统ー建模语言表示的对象间的关联;然后将关联关系及其属性分配到相关联的类中;所述关联关系是指类与类之间的关系,由关联产生的属性作为相应类中的属性,而且每个类还包含引用属性,通过该属性可以访问相关联的类; 32)所述映射规则中的聚集关系对应的转化方法为首先把聚集两端的类分别映射为对应的代码类对象,然后在目标代码模型中表示出整体类添加对部分类的引用; 33)所述映射规则中的泛化关系对应的转化方法为在转换时将父类的属性转换为目标子类的属性,变换的源对象为父类的属性,目标对象为子类的属性,所述泛化关系具体含义为继承,子类继承父类的所有属性,变换初始条件为子类与父类之间存在继承关系,变换内容是把源对象的属性转换成目标对象的属性; 34)所述映射规则中的依赖关系对应的转化方法为将模型中依赖关系表示为类的属性,同时把被依赖类的对象转换为依赖对象的一个引用属性。
4.根据权利要求I所述的面向无线传感网的模型语言到代码转化方法,其特征在于所述的访问模型,其访问的步骤为 41)根据当前的模型状态以及映射规则,选择满足匹配条件的一组规则; 42)按调度机制从满足条件的一组规则中选择一条规则,找出下一步中执行的规则; 43)访问者访问,执行映射规则,生成目标代码元素,改变相应的模型和目标代码状态,并选择下一步中匹配的规则; 44)重复以上三步直至停止; 45)生成完整的目标代码,保存转换记录,记录转换过程中的转换步骤和错误信息。
全文摘要
本发明是一种面向无线传感网的模型到代码的转化方法,所采用的统一建模语言到代码的转换方法是基于访问者的转化方法,根据模型与代码之间的关系,定义模型与目标代码的具体映射规则,然后设置一个访问者来访问该模型,将映射规则嵌入至访问者,根据此映射规则,访问者在对模型的访问中,边读模型,边根据映射规则,实现到目标语言框架模型的转化,由此获得目标语言程序代码,完成模型向目标语言的转化,有效解决了无线传感网中模型到代码的转化问题,大大提高了应用开发效率。
文档编号G06F9/44GK102681855SQ20121016516
公开日2012年9月19日 申请日期2012年5月25日 优先权日2012年5月25日
发明者孙万兴, 岳书珍, 岳文静, 张亚萍, 杨萌, 陈志 申请人:南京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1