基于LIDL的可视化人机交互软件建模方法及装置

文档序号:32661507发布日期:2022-12-23 23:42阅读:21来源:国知局
基于lidl的可视化人机交互软件建模方法及装置
技术领域
:1.本发明涉及人机交互软件建模
技术领域
:,尤其涉及一种基于lidl的可视化人机交互软件建模方法及装置。
背景技术
::2.随着信息技术的持续发展,安全攸关领域的人机交互软件日益增多。航空航天、汽车电子等安全攸关领域的人机交互软件一旦出现设计问题,就可能会造成灾难性的后果。因此,在安全攸关领域,人机交互软件的安全可靠性尤为关键。相比于常规软件,安全攸关人机交互软件具有交互性强、逻辑复杂、设计易出错、质量保障成本高的特点;为了务实地保障安全攸关人机交互软件的安全可靠性,在软件的设计实现过程中通常会采用模型驱动的开发方法。人机交互软件交互性强、逻辑复杂,想要在这类软件的开发过程中引入模型驱动方法,首先要能系统、全面地对其中涉及的交互建模;这就需要能描述交互场景、交互接口及数据类型的建模语言,同时需要能支撑模型驱动开发的建模工具。3.近年来,已有一些能对人机交互软件建模的语言:法国爱斯特尔联合空客、施耐德电气等开发了scade语言和配套工具包,能对人机交互软件的界面和控制逻辑建模,但聚焦的是实现细节、对应软件的运算处理逻辑,最终建成的是软件系统的详细设计模型;而没有重点关注人机交互软件中的接口和交互等特点,其建模符号系统的元素较为丰富,并非专用于人机交互软件的领域化建模语言,理解模型的门槛较高。couto等在2019年提出了ivy2,是基于模型、支持对交互软件系统形式化验证的建模工具,其中包含的基于模型和符号系统的建模环境对缺乏经验的建模人员而言较难理解。singh等在2020年提出了fluid,它是交互模型建模语言,将交互行为拆解为声明、状态、事件、假设、预期、需求六部分,描述模型静态性质、动态性质和需求。其对交互系统的拆解更偏向于详细设计,语言更接近形式化语言,对没有形式化建模技术经验的人而言不易理解。4.lecrubier在2016年基于自然语言(英语)提出了文本化人机交互软件交互建模语言lidl(lidlinteractiondescriptionlanguage),能形式化地描述人机交互系统。lidl语言具体信息可参见lecrubier,v.,'ausbourg,b.d.,&yaminea¨t-ameur.(2015).thelidlinteractiondescriptionlanguage.eics2015。lidl是同步语言、具备形式化语义,能描述交互系统的层级概念。lidl模型由数据类型、接口、交互三部分组成,其关键字和文法定义的特殊性使其代码类似于以自然语言描述的系统规格、用户行为,便于建模人员阅读、理解。lidl模型在设计上支持代码生成,其交互的具体实现细节由代码生成的目标语言确定,屏蔽了计算细节,使建模人员能聚焦于人机交互软件中的交互架构设计。lidl语言具备形式化语义、支持形式化验证、聚焦软件交互,因此本发明基于lidl提出人机交互软件交互的可视化建模方法,并设计实现配套的建模工具。5.lidl语言产生的句子有两个主要特点:一是类自然语言性。例如交互名称可用多个单词和空格来表达;交互所需的参数混编在句子中,用小括号分隔。最终对交互的建模结果类似于自然语言中的英文句子。这便于建模人员阅读、理解,但也因其灵活性和高自由度,导致建模人员在定义模型时容易引入语法错误。二是句子中存在括号嵌套。lidl语言统一使用小括号分隔变量、函数声明、函数定义等句子成分,使其句子中容易出现大量的括号嵌套。这种结构易引入语法错误,降低了建模效率。目前建模人员只能根据lidl语言,编写语言能产生的句子来创建lidl模型,没有可视化的建模方案:即与lidl建模语言等价的可视化建模语言、相应的可视化建模流程和配套的建模工具。目前的建模方式和流程存在以下问题:6.一、建模流程中的具体任务存在引入错误的风险。在目前的建模流程中,建模人员可按任意顺序自由定义模型中的每类组件(数据类型、接口、交互)。由于lidl模型中的接口依赖于数据类型的定义、交互依赖于接口的定义;当模型变得复杂,在目前的建模流程中将不可避免地出现在接口中使用的数据类型未定义、在交互中使用的接口未定义的情况。此外,建模人员在定义同类组件时需重复编写组件的属性名、手动逐个定义组件中的各项属性,也存在定义属性时漏写属性名、定义组件时有属性未定义的可能性。7.二、无限制的文本模型易错且较难复用。lidl语言的灵活性和直接编写lidl语句时的高自由度,导致建模人员在定义模型时容易引入语法错误。对于软件中的同一交互,编辑结构化的lidl代码为之建模,不同的建模人员建出的lidl模型很可能会大相径庭:这不利于模型的管理和复用。8.三、用多层嵌套表示的交互间关系不够清晰。在lidl语言中,使用了嵌套定义描述交互间关系;当交互间关系复杂时,嵌套定义的层次也将随之加深。这种表现形式隐含了交互的抽象层次,建模人员难以清晰地识别出同层的交互,以及各交互间的层次关系。同时,lidl语言统一使用小括号来分隔句子成分,这导致存在多层嵌套关系的句子中含有大量嵌套的括号;这种结构在编写时易引入语法错误,在阅读时也不利于建模人员理解,降低了建模效率。技术实现要素:9.鉴于上述的分析,本发明实施例旨在提供一种基于lidl的可视化人机交互软件建模方法及装置,用以解决现有人机交互软件建模过程复杂、效率低并且易出错的问题。10.一方面,本发明实施例提供了一种基于lidl的可视化人机交互软件建模方法,包括以下步骤:11.建立lidl可视化建模语言的元模型,根据元模型生成数据类型定义表、接口类型定义表、交互类型定义表和交互架构定义视图;12.分别读取数据类定义表、接口类定义表和交互类定义表中添加的数据类、接口类和交互类的定义信息,对交互类定义信息进行校验;读取交互架构定义视图中构建的交互实例和交互实例间的接口连接关系,根据接口类的定义信息对交互实例的接口连接关系进行校验;13.若校验均通过,根据交互实例对应的交互类的定义信息,交互实例对应的交互类包含的接口类和数据类的定义信息,和各类的产生式生成各类定义代码;根据交互实例中设置的实参和交互类的定义信息生成交互实例代码。14.基于上述技术方案的进一步改进,根据交互实例对应的交互类的定义信息,交互实例对应的交互类包含的接口类和数据类的定义信息,和各类的产生式生成各类定义代码,包括:15.从交互类定义表中读取交互实例对应的交互类的定义信息,根据交互类定义信息以及交互类产生式生成交互类定义代码;其中,交互类的定义信息包括交互名称、交互表达式、交互类包含的接口类名称和接口范围;16.从交互类定义表中提取所述交互类中包含的所有接口类名称,对于每个所述接口类名称,根据接口类定义表中该接口类的定义信息以及接口类产生式,生成该接口类的定义代码;17.对于每个所述接口类名称,从接口类定义表中提取该接口类包含的所有组合数据类,对于每个所述组合数据类,根据数据类定义表中该组合数据类的定义信息以及数据类产生式,生成该组合数据类的定义代码。18.进一步地,所述交互类产生式为:19.《交互类定义》=interaction“(”《交互名称》“)”:《交互接口》is“(”《交互表达式》“)”20.其中,交互接口为接口范围为global的接口类名称。21.进一步地,接口类的定义信息包括接口类名称、成员名称、成员类型和接口方向;22.所述接口类产生式包括:23.《接口类定义》=interface《接口类名称》is《接口》;24.《接口》=《原子接口》|《组合接口》;25.《原子接口》=《数据类名称》《接口方向》;26.《接口方向》=in|out;27.《组合接口》=“{”《接口类成员》{“,”《接口类成员》}“}”;28.《接口类成员》=《接口成员名称》:《接口类名称》。29.进一步地,组合数据类的定义信息包括:数据类名称、成员名称、成员类型;30.所述数据类产生式包括:31.《组合数据类定义》=data《组合数据类名称》is《组合数据类型》;32.《组合数据类型》=“{”《数据类成员》{“,”《数据类成员》}“}”;33.《数据类成员》=《成员名称》:《数据类名称》;34.《数据类名称》=《基本数据类型》|《组合数据类名称》;35.《基本数据类型》=number|text|boolean|activation。36.进一步地,所述交互类的定义信息包括交互名称;37.所述对交互类定义信息进行校验包括:38.提取交互名称中包含的交互参数,判断所述交互参数在所属交互类中是否已定义;判断所述交互参数在所属交互名称中是否重复出现;若交互参数在交互类定义表中已定义并且所述交互参数在交互名称中没有重复,则校验通过。39.进一步地,根据接口类定义表中接口类的定义信息对交互实例的接口连接关系进行校验,包括:40.对交互架构定义视图中每一个连接线,获取所述连接线连接的源接口实例和目标接口实例;41.根据源接口实例对应的接口类名称判断源接口实例的接口方向是否是out方向;根据目标接口实例对应的接口类名称判断目标接口实例的接口方向是否是in方向,若均为是,则校验通过。42.进一步地,根据交互实例中设置的实参和交互类的定义信息生成交互实例代码,包括:43.对每个交互实例,从其对应的交互类定义信息中提取交互名称,将交互名称中的交互参数替换为交互实例中设置的实参;44.根据以下产生式生成交互实例代码:45.《交互实例》=《交互实例名》:“(”《交互名称》“)”。46.另一方面,本发明实施例提供了一种基于lidl的可视化人机交互软件建模装置,包括以下模块:47.视图构建模块,用于建立lidl可视化建模语言的元模型,根据元模型生成数据类型定义表、接口类型定义表、交互类型定义表和交互架构定义视图;48.校验模块,用于分别读取数据类定义表、接口类定义表和交互类定义表中添加的数据类、接口类和交互类的定义信息,对交互类定义信息进行校验;读取交互架构定义视图中构建的交互实例和交互实例间的接口连接关系,根据接口类的定义信息对交互实例的接口连接关系进行校验;49.代码生成模块,用于若校验均通过,根据交互实例对应的交互类的定义信息,交互实例对应的交互类包含的接口类和数据类的定义信息,和各类的产生式生成各类定义代码;根据交互实例中设置的实参和交互类的定义信息生成交互实例代码。50.进一步地,所述代码生成模块,包括:51.交互类代码生成模块,用于从交互类定义表中读取交互实例对应的交互类的定义信息,根据交互类定义信息以及交互类产生式生成交互类定义代码;其中,交互类的定义信息包括交互名称、交互表达式、交互类包含的接口类名称和接口范围;52.接口类代码生成模块,用于从交互类定义表中提取所述交互类中包含的所有接口类名称,对于每个所述接口类名称,根据接口类定义表中该接口类的定义信息以及接口类产生式,生成该接口类的定义代码;53.数据类代码生成模块,用于对于每个所述接口类名称,从接口类定义表中提取该接口类包含的所有组合数据类,对于每个所述组合数据类,根据数据类定义表中该组合数据类的定义信息以及数据类产生式,生成该组合数据类的定义代码。54.与现有技术相比发明通过建立lidl可视化建模语言的元模型,根据元模型生成模型中组件对应的表视图和图视图,通过表视图和图视图作为可视化建模输入工具,用户可直观、方便快捷的进行模型构建,也避免了输入错误,并且可以直观地看到模型结构和组件层次关系。对交互类定义信息和接口连接关系进行校验,进一步降低了出错的风险。根据交互实例对应的交互类的定义信息,以及交互实例对应的交互类包含的接口类和数据类型类的定义信息生成类定义代码;根据交互实例中设置的实参和交互类的定义信息生成交互实例代码;可自动地生成模型代码,避免人工输入错误,并且提高了模型代码生成效率。55.本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。附图说明56.附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。57.图1为本发明实施例基于lidl的可视化人机交互软件建模方法的流程图;58.图2为本发明实施例基于lidl的可视化人机交互软件建模装置的框图;59.图3为本发明实施例lidl的可视化建模语言的概念模型示意图;60.图4为本发明实施例lidl的可视化建模语言的元模型示意图;61.图5为本发明实施例的交互架构示意图;62.图6为本发明实施例的数据类和接口类定义代码示意图;63.图7为本发明实施例的交互类和交互实例的定义代码示意图。具体实施方式64.下面结合附图来具体描述本发明的优选实施例,其中,附图构成本技术一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。65.lidl建模语言构建的模型由数据类型、接口、交互三部分组成。66.数据类型(datatype)包括基本数据类型(basicdatatype)和组合数据类型(combodatatype),基本数据类型由具有原子性的number、text、boolean和activation四种数据类型组成,组合数据类型由单个或多个已定义的数据类型组成。67.接口(interface)包含原子接口(atominterface)和组合接口(combointerface),原子接口由描述接口数据结构的数据类型和描述接口数据流动方向的方向(direction)组成,组合接口由单个或多个已定义的接口组成。68.交互(interaction)由一个或多个交互组成,交互间通过接口相关联。69.本发明的一个具体实施例,公开了一种基于lidl的可视化人机交互软件建模方法,如图1所示,方法包括:70.s1、建立lidl可视化建模语言的元模型,根据元模型生成数据类型定义表、接口类型定义表、交互类型定义表和交互架构定义视图;71.s2、分别读取数据类定义表、接口类定义表和交互类定义表中添加的数据类、接口类和交互类的定义信息,对交互类定义信息进行校验;读取交互架构定义视图中构建的交互实例和交互实例间的接口连接关系,根据接口类的定义信息对交互实例的接口连接关系进行校验;72.s3、若校验均通过,根据交互实例对应的交互类的定义信息,交互实例对应的交互类包含的接口类和数据类的定义信息,和各类的产生式生成各类定义代码;根据交互实例中设置的实参和交互类的定义信息生成交互实例代码。73.通过建立lidl可视化建模语言的元模型,根据元模型生成模型中组件对应的表视图和图视图,通过表视图和图视图作为可视化建模输入工具,用户可直观、方便快捷的进行模型构建,也避免了输入错误,并且可以直观地看到模型结构和组件层次关系。对交互类定义信息和接口连接关系进行校验,进一步降低了出错的风险。根据交互实例对应的交互类的定义信息,以及交互实例对应的交互类包含的接口类和数据类型类的定义信息生成类定义代码;根据交互实例中设置的实参和交互类的定义信息生成交互实例代码;可自动地生成模型代码,避免人工输入错误,并且提高了模型代码生成效率。74.实施时,首先根据lidl建模语言中上述三大组件的定义,构建基于lidl的可视化建模语言的概念模型,如图3所示。根据概念模型,可建立lidl可视化建模语言的元模型,元模型如图4所示。实施时,可采用eclipsesirius框架构建元模型。sirius框架可根据构建的元模型自动生成框架代码。75.元模型中共有8个类、13条组合关系和两条应用关系。概念模型中的数据类型、交互和接口在元模型中与之对应的类分别是datatype、interface和interaction。由于数据类型、接口和交互的定义均为结构化信息,为了便于表示,采用表格形式作为这三种类型的定义输入视图,因此这三个类也可由对应的表格类组成,分别是datatypetable、interfacetable和interactiontable,即数据类型定义表、接口类型定义表、交互类型定义表。这三种表格类均源于表格工厂类(tablefactory)。基于元模型中的三种表格类,可将lidl可视化建模语言中的三种概念以表视图形式可视化。此外,还有接口连接类(interfaceconnector),用于可视化不同交互间通过各自的接口产生的联系。76.实施时,可采用sirius框架的表视图(editiontabledescription)来配置并生成数据类型定义表、接口类型定义表和交互类型定义表。77.其中,数据类型定义表的表头包括数据类名称、成员名称、成员类型。数据类名称和成员名称字段为用户输入,成员类型为下拉框选择,可选项为四种原子类型number、text、boolean和activation。78.接口类定义表的表头包括接口类名称、成员名称、成员类型和接口方向。其中,接口类名称为用户输入。对于原子接口类,接口类名称为用户输入、成员名称列为不可编辑列,成员类型为下拉框选择,可选项为基本数据类型、数据类定义表中的数据类名称,接口方向为下拉框选择,可选项为in和out,表示数据流入接口或者数据流出接口。对于组合接口类,接口类名称为用户输入、接口方向为不可编辑列。成员类型为下拉框选择,可选项为接口类定表中的接口类名称;成员类型对应的成员名称字段为用户输入,接口方向列为不可编辑列。79.交互类定义表的表头包括交互类名、交互名称、交互表达式、交互类包含的接口名称、接口类名称和接口范围。其中,交互类名、交互名称和交互表达式字段为用户输入;交互类包含的接口类名称为下拉框选择,可选项为接口类型定义表中的接口类名称;接口范围为下拉框选择,可选项为global和local,分别表示交互的接口为外部接口或内部接口;每个交互类需有且仅有一个外部接口(global),可有多个内部接口(local),内部接口必须为原子接口;外部接口无需命名,即无需输入接口名称,内部接口的接口名称则必须填写。80.为了便于建模人员直观清楚的表示交互间的关系,采用图形形式定义交互关系。81.实施时,可采用sirius框架的默认图形元素作为交互架构视图的默认图层,将sirius中的容器元素(container)配置为interaction,代表交互架构图中的交互,交互以矩形块图示,交互中的接口在矩形块的边缘以菱形图示。将基于元素的边(elementbasededge)配置为interfaceexchange,代表交互架构图中交互通过接口连接的关系。82.为了全面地展示本发明提出的可视化人机交互软件建模方法的建模能力,以计数器为例进行说明。计数器中的人机交互软件包括三个按钮和一个数字显示区域;三个按钮分别是“加”、“减”和“复位”。用户每次按下“加”按钮,数字显示区域的数字将会加一;每次按下“减”按钮,显示的数字将会减一;用户每按次按下“复位”按钮,显示的数字将变为零。83.围绕计数器中的交互行为,根据本发明对lidl可视化建模过程的要求,首先定义交互中的数据类型。本实施例涉及的交互,需要处理来自三个按钮的信号。因此,数据类型定义表中,可视化地定义组合数据类型pushbutton_signal,表示三个按钮被按下时会产生的信号数据。其中包含pactive、mactive和racitve三个原子数据类型,如表1所示。建模人员可通过本发明的交互定义表添加pushbutton_signal的定义信息,从而避免直接编写lidl代码产生错误。84.表1数据类定义信息[0085][0086]经建模分析后,计数器软件中的交互的接口包括六个原子接口和三个组合接口:number_input数字输入接口、number_output数字输出接口、activation_input激活信号输入接口、activation_onput激活信号输出接口、text_input文本输入接口、pushbutton_signal按键信号输入接口、按钮的组合接口pushbutton_intf和数字显示区域的组合接口numberdisplay_intf,以及反映了主界面上按钮与数字显示区域之间关系的组合接口mainui_intf。[0087]示例性的,部分原子接口定义信息如表2所示,部分组合接口定义信息如表3所示。建模人员可在本发明的接口类定义表中添加上述定义信息。[0088]表2原子接口类定义信息[0089]接口类名称成员类名称接口方向number_inputnumberinnumber_onputnumberoutsinnal_inputpushbutton_signalinactivation_inputactivationintext_outputtextout[0090]表3组合接口类定义信息[0091][0092]计数器中存在的交互:包括数字显示区域交互(numberdisplay)、按钮交互(button)、计数器的交互(counter)和联系计数器各交互模块的主界面交互(mainui)。示例性的,交互numberdisplay和button的定义信息如表4所示。[0093]表4numberdisplay和button交互定义信息[0094][0095]建模人员可根据交互间的关系在交互架构定义视图中添加交互间的关系。计数器主界面上包含有三个按钮和数字显示区,因此在主界面上添加三个button交互实例,一个numberdisplay交互实例,软件内部还包括一个counter交互,用于内部交互。图5为建模人员定义的交互架构示例图,主界面中包括numberdisplay交互类的实例display,button交互类的实例plusbut、minusbut和resetbut,counter交互类的实例counter。plusbut、minusbut和resetbut通过其clicked接口向counter发送激活信号,counter通过其counterdisplay接口向numberdisplay发送显示数据。[0096]建模人员可通过数据类定义表、接口类定义表、交互类定义表进行数据类型、接口类型和交互类型的定义,通过交互架构进行交互关系的定义,建模效率高且不易出错,并且可以清晰地显示模型层次,便于进行模型分析。[0097]建模人员通过可视化方式定义好上述信息后,分别读取数据类定义表、接口类定义表和交互类定义表中添加的数据类型类、接口类和交互类的定义信息。为了进一步避免建模出错,提高建模效率,步骤s2包括:[0098]s21、对交互类定义信息进行校验;[0099]其中,所述交互类的定义信息包括交互名称。[0100]具体校验过程为:提取交互名称中包含的交互参数,判断所述交互参数在所属交互类中是否已定义;判断所述交互参数在所属交互名称中是否重复出现;若交互参数在交互类定义表中已定义并且所述交互参数在交互名称中没有重复,则校验通过。[0101]示例性的,交互类numberdisplay的定义参见表4。交互名称的小括号内为交互参数,例如activated、thevalue,判断这些交互参数在numberdisplay中是否为已定义的接口,即是否在接口名称列中。若存在,则表示该交互参数已定义,否则交互参数未定义。然后,在该交互名称“numberdisplaydisplayedwhen(activated)withvalue(thevalue)”中,对交互参数进行重复性检查,由于交互参数为activated、thevalue,所以交互参数在交互名称中没有重复,校验通过。[0102]s22读取交互架构定义视图中构建的交互实例和交互实例间的接口连接关系,根据接口类的定义信息对交互实例的接口连接关系进行校验。[0103]具体的,对交互架构定义视图中每一个连接线,获取所述连接线连接的源接口实例和目标接口实例;[0104]根据源接口实例对应的接口类名称判断源接口实例的接口方向是否是out方向;根据目标接口实例对应的接口类名称判断目标接口实例的接口方向是否是in方向,若均为是,则校验通过。[0105]由于交互是通过接口连接的,例如图5中,display交互和counter交互是通过counter的counterdisplay接口连接的,从counter交互指向display交互,即源接口实例为counterdisplay。图5中display交互中用于接收数据的目标接口实例名没有被显式配置,即thevalue接口的实例没有被显式配置,由于其是从counter交互的counterdisplay实例接收数据的,因此器实例名被隐式配置为counterdisplay,即目标接口thevalue被配置为counterdisplay。[0106]display交互类型为numberdisplay,根据交互定义表中numberdisplay类的定义信息,其thevalue接口的接口类型为number_input,即接口类名称为number_input,在接口定义表中查找number_input类的接口方向,若为in,则thevalue接口的接口方向为in,若为out,则thevalue接口的接口方向为out。同样的方式判断源接口实例counterdisplay的接口方向。[0107]若源接口实例的接口方向为out,目标接口实例的接口方向为in,则数据流向正确,校验通过,否则校验不通过。[0108]若所有校验均通过,则根据可视化定义信息生成模型代码。具体的,步骤s3中,根据交互实例对应的交互类的定义信息,交互实例对应的交互类包含的接口类和数据类的定义信息,和各类的产生式生成各类定义代码,包括:[0109]s31、从交互类定义表中读取交互实例对应的交互类的定义信息,根据交互类定义信息以及交互类产生式生成交互类定义代码;其中,交互类的定义信息包括交互名称、交互表达式、交互类包含的接口类名称和接口范围;[0110]图5中的交互架构图包括交互实例main,其交互类为mainui;display,其交互类为numberdisplay;plusbut、minusbut和resetbut,其交互类均为button;counter,其交互类为counter。从交互类定义表中读取每个交互类的定义信息,根据交互类定义信息生成交互类定义代码。交互类型定义信息如表4所示。[0111]具体的,根据以下交互类产生式生成交互类定义代码:[0112]《交互类定义》=interaction“(”《交互名称》“)”:《交互接口》is“(”《交互表达式》“)”[0113]其中,交互接口为接口范围为global的接口类名称。[0114]例如,对于numberdisplay,根据上述产生式,可得到其定义代码为:[0115]interaction(numberdisplaydisplayedwhen(activated:activation_input)withvalue(thevalue:number_input)):numberdisplay_intfis(when(activated)then((value)=(thevalue))),如图7中第70-74行所示。[0116]其中交互名称中的交互参数需要加上其对应的接口类名称,例如activated参数后添加其对应接口类activation_input。交互接口为接口范围为global的接口类名称,即numberdisplay_intf。[0117]s32、从交互类定义表中提取所述交互类中包含的所有接口类名称,对于每个所述接口类名称,根据接口类定义表中该接口类的定义信息以及接口类产生式,生成该接口类的定义代码。[0118]交互是由接口组成的,交互名称中定义的交互参数,即其中小括号中的内容,都是原子接口类的实例,从交互名称中提取交互参数,例如,activated,thevalue。从交互类定义表中提取activated的接口类名称为activation_input,thevalue的接口类名称为number_input。[0119]对于每个接口类名称,从接口定义表中提取接口类的定义信息。具体的,接口类的定义信息包括接口类名称、成员名称、成员类型和接口方向;[0120]根据以下接口类产生式生成接口类定义代码:[0121]《接口类定义》=interface《接口类名称》is《接口》;[0122]《接口》=《原子接口》|《组合接口》;[0123]《原子接口》=《数据类名称》《接口方向》;[0124]《接口方向》=in|out;[0125]《组合接口》=“{”《接口类成员》{“,”《接口类成员》}“}”;[0126]《接口类成员》=《接口成员名称》:《接口类名称》[0127]例如activation_input类,其为原子接口,根据上述产生式,其定义代码为:interfaceactivation_inputisactivationin。[0128]例如,pushbutton_intf为组合接口,pushbutton_intf类包括text_ouput类的title,和activation_input类的pushed两个成员,根据上述产生式,其定义代码为:[0129]interfacepushbutton_intfis{title:text_output,pushed:activation_input}[0130]s33、对于每个所述接口类名称,从接口类定义表中提取该接口类包含的所有组合数据类,对于每个所述组合数据类,根据数据类定义表中该组合数据类的定义信息以及数据类产生式,生成该组合数据类的定义代码。[0131]接口类由数据类和已定义接口类组成。首先从交互类定义表中提取交互类包含的每个接口类,再从接口定义表中提取每个接口类包含的所有组合数据类。[0132]组合数据类的定义信息包括:数据类名称、成员名称、成员类型;[0133]《组合数据类定义》=data《组合数据类名称》is《组合数据类型》;[0134]《组合数据类型》=“{”《数据类成员》{“,”《数据类成员》}“}”;[0135]《数据类成员》=《成员名称》:《数据类名称》;[0136]《数据类名称》=《基本数据类型》|《组合数据类名称》;[0137]《基本数据类型》=number|text|boolean|activation。[0138]例如原子接口signal_input中的数据类名称为pushbutton_signal,该数据类为组合数据类型,包括3个成员,三个成员均为基本数据类型的activation类型,成员名称分别为:pactive、mactive、ractive。[0139]根据数据类定义表中该组合数据类的定义信息,生成该组合数据类的定义代码。数据类定义如表1所示。根据上述产生式,如图6所示,其定义代码为datapushbutton_siganlis{pactive:activation,mactive:activation,ractive:activation}。[0140]通过步骤s31-s33可生成交互软件模型中涉及到各个类的定义代码。[0141]步骤s3中,根据交互实例中设置的实参和交互类的定义信息生成交互实例代码,包括:[0142]s34、对每个交互实例,从其对应的交互类定义信息中提取交互名称,将交互名称中的交互参数替换为交互实例中设置的实参;[0143]例如对于图5的交互架构图,主交互类mainui中包含numberdisplay类的交互实例display,button类的交互实例plusbut、minusbut和resetbut,counter类的交互实例counter,从每个交互实例对应的交互类定义信息中提取交互名称。例如numberdisplay类的交互名称为:numberdisplaydisplayedwhen(activated)withvalue(thevalue),其中包括交互参数activated和thevalue,在图5的交互架构图中,建模人员将activated接口配置为active,因此将交互名称中的activated替换为active。thevalue接口由于是从counterdisplay接口接收数据,在图5中,counterdisplay接口被建模人员仍然配置为counterdisplay,因此thevalue接口被隐式地配置为counterdisplay。故而交互实例display的交互名称为numberdisplaydisplayedwhen(active)withvalue(counterdisplay)。[0144]s35、根据以下产生式生成交互实例代码:[0145]《交互实例》=《交互实例名》:“(”《交互名称》“)”。[0146]根据上述产生式得到交互实例display的代码为display:(numberdisplaydisplayedwhen(active)withvalue(counterdisplay))。如图7中111行所示。[0147]需要特别说明的是,对于具有“withbehaviour”结构的交互类,其实例的代码仅包括替换了交互参数的交互名称,并且代码位于mainui类的withbehaviour结构中。[0148]生成各代码片段后,将各代码拼合在一起,即完成所建可视的lidl模型到结构化lidl模型数据(lidl代码)的转换。与现有技术相比,本技术的采用可视的方式进行lidl人机交互软件建模,使得模型组件更易管理、便于复用,并在表视图中进行预定义和建模流程的相识,避免了若干会引入错误的建模环节,以图的形式呈现软件交互的架构,能更明显地展示软件中交互所在的抽象层次和交互之间的输入输出关系,便于建模人员快速准确地进行人机交互软件建模。[0149]本发明的一个具体实施例,公开了一种基于lidl的可视化人机交互软件建模装置,如图2所示,包括以下模块:[0150]视图构建模块,用于建立lidl可视化建模语言的元模型,根据元模型生成数据类型定义表、接口类型定义表、交互类型定义表和交互架构定义视图;[0151]校验模块,用于分别读取数据类定义表、接口类定义表和交互类定义表中添加的数据类、接口类和交互类的定义信息,对交互类定义信息进行校验;读取交互架构定义视图中构建的交互实例和交互实例间的接口连接关系,根据接口类的定义信息对交互实例的接口连接关系进行校验;[0152]代码生成模块,用于在通过全部校验后,根据交互实例对应的交互类的定义信息,交互实例对应的交互类包含的接口类和数据类的定义信息,和各类的产生式生成各类定义代码;根据交互实例中设置的实参和交互类的定义信息生成交互实例代码。[0153]优选的,所述代码生成模块,包括:[0154]交互类代码生成模块,用于从交互类定义表中读取交互实例对应的交互类的定义信息,根据交互类定义信息以及交互类产生式生成交互类定义代码;其中,交互类的定义信息包括交互名称、交互表达式、交互类包含的接口类名称和接口范围;[0155]接口类代码生成模块,用于从交互类定义表中提取所述交互类中包含的所有接口类名称,对于每个所述接口类名称,根据接口类定义表中该接口类的定义信息以及接口类产生式,生成该接口类的定义代码;[0156]数据类代码生成模块,用于对于每个所述接口类名称,从接口类定义表中提取该接口类包含的所有组合数据类,对于每个所述组合数据类,根据数据类定义表中该组合数据类的定义信息以及数据类产生式,生成该组合数据类的定义代码。[0157]上述方法实施例和装置实施例,基于相同的原理,其相关之处可相互借鉴,且能达到相同的技术效果。具体实施过程参见前述实施例,此处不再赘述。[0158]本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。[0159]以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1