rhstudio可视化模型开发语言概要

rh可视化模型开发语言概要

 

RH建模语言通过模型设计,模型开发和组装来定义一个应用程序的功能。它以rhstudio服务器中间件作为运行时引擎,负责解释执行每个应用程序的模型。
完成软件系统的各种功能开发需要明确的模型语言语法(定义什么可以由模型语言建模)和明确的语义(定义什么样的模型代表何种功能)。

 

模型语言语法
对于建模语言:模型语言语法定义了语言的表达能力。也就是可以通过rhstudio创建什么功能的模型并且能够以什么样的方式进行耦合。
对于Rhstudio平台:将对模型语言语法定义的模型进行有效性规则的检查。模型将在rhstudio生成(以后它们由Rhstudio服务器进行执行)。

模型语言语义
对于建模语言:模型语言的语义定义每个模型的含义。也就是说,应用程序将基于模型方式生成什么功能的模型。
对于Rhstudio平台:由于模型处理是由中间件负责解释执行,模型的语义与运行时引擎的工作方式密切相关。一方面,服务器应该根据语言定义的语义执行模型(“执行你所定义的功能”)。另一方面,服务器的准确执行行为也说明了模型语言的准确的语义(“模型语言的语义是清晰的表达了特定的功能”)。

模型语言基本组成
基本模型包括系统模型、显示模型、服务模型、数据结构和数据项:

 

系统模型

位于顶层的模型-它可以是完整的应用程序或者是其中一个主要部分。任何模型层次的根模型都是一个系统模型,它可能包含一个或多个子系统模型,通常包含多个显示模型和/或多个服务模型。

显示模型

显示模型组件(GUI组件)。显示模型包括视图模型、按钮模型、弹出式窗口模型、表格模型、标签模型等。高度交互的应用程序的模型将包含许多显示模型,而后台服务器端系统的模型将不包含显示模型或很少的显示模型。不同的显示模型以不同的图标标识。显示模型通常包含较低级别的显示模型和/或服务模型(例如,按钮模型包含事件服务模型,按下按钮时触发该事件)。

服务模型

服务模型是一个功能处理的服务进程。目前所有服务进程都是代表一个功能处理(“同步的进程”)--每一个服务都是一组连续执行的功能单位(例如某种数据运算)。现在,可以通过定时器等多线程模型基本支持异步模型操作(“异步进程”)–服务模型可以在接收到特定的输入后触发开始。服务模型通常包含子服务模型和/或数据模型元素。

数据结构模型和数据模型

包含应用程序使用的信息。数据模型是原子构造块(文本、数字、日期等),数据结构模型由子数据结构和/或数据模型组成。数据结构模型和数据模型通常有各种图标代表各自的类型。

 

连接器模型
Rhstudio数据流编程。服务模型(在某些情况下,系统模型和显示模型)能够通过不同的连接器模型接收和发送数据。流程之间的数据流,以及服务之间的执行顺序,是由流程去控制的。
连接器模型是一个触发连接器模型(一个入口点,当服务模型接收输入数据时,它开始执行),或一个退出连接器(一个出口点,一个服务模型输出它在执行时所返回的数据,)。触发连接器模型在服务模型的框架中显示为绿色的向内指向三角形。一个退出连接器模型出现在服务模型的框架上作为一个灰色的向外指向三角形。
流程定义执行顺序(何时应该执行服务)和/或数据交换(数据传递的时间和方式)。流程出现在两个模型元素(源和目标)、每个连接器或数据元素之间的箭头。流程的作用:(一)定义执行顺序(包含其目标连接器的服务可能不会开始它之前的流程);(b)数据流从它的源到其目标;或(c)执行顺序和数据流控制两者都存在(详细介绍,见下面的“执行顺序”一节)。

 元数据与数据
为了简单的说明元数据与数据,以下描述忽略了模型对象和模型的运行时对象之间的区别。如果想深入了解模型,模型和运行时模型的区别是非常重要的。
模型是元数据实体--它们定义了应用程序的功能,但并不代表应用程序的任何具体执行的实际细节。在运行时,服务器读取模型并根据每个执行的具体情况和具体数据执行这些模型。
同一个模型有可能将被运行时引擎多次实例化(根据每个元数据对象创建的多个数据对象)。这类似于编程语言经常发生的变化,其中程序(元数据)中的变量与执行程序(数据)时创建的实例不同。

 

模型与模型元素
建模语言使模型复用性得到了广泛的应用--同一模型可以在模型层次中的多个地方反复使用。
我们可以重用数据模型(数据类型)来定义复合数据类型。例如,内置的原子数据类型文本、数字和日期是构成数据结构(复合数据类型)的主要结构元素。复合数据类型本身可以作为其他复合数据类型的子模型元素(例如,我们可以定义一个称为企业的数据结构),然后定义另一个称为事务的数据结构,包含企业作为其元素之一。
当数据在服务模型之间传输时,我们还重用数据类型。一个连接器(触发器或退出)有一个数据类型定义哪些数据对象可以通过它传递。例如,一个统计的服务模型有多个触发器模型,所有的都是数字模型,和一个单一的退出连接器,也是数字模型。
当需要在各种情况下执行时,我们重用了一个服务模型(例如某种运算)。例如,你可以建一个服务模型,获取客户的详细信息,返回客户的姓名和地址(执行数据库查询,根据客户的ID查询数据库从检索到的数据库记录中提取所需的数据项)。这个服务模型将用于生成各种报告,把客户信息显示在页面上,等等。
为了支持可重用性,我们区分模型名和模型元素名。
模型名称是可重用模型的共享名称(例如,内置的原子数据类型)。模型名称类似于编程语言中的结构体或类。
元素名称是模型元素的本地名称,是一个特定的上下文(例如,在复合数据模型中,你可以拥有两个类型的数据元素,一个叫卖方,一个叫买方)。模型元素名称类似于编程语言中的变量名。
当一个模型元素生成以后,其模型元素名称默认是相同的模型名称(例如当你使用一个‘企业’的默认模型元素名称也是‘企业’)。通过按F2可以更改本地模型元素名称、共享模型名称或两者。如果只改变本地模型元素的名称,这两个名称将彼此不同,都将显示(在上面的例子中,第一个数据元素将显示为卖方[公司],而第二个数据元素将显示为买方[公司]。在重新命名一个模型(共享名称)之前要好好考虑,因为更改将影响所有的其它的模型引用(例如,如果您将公司更名为甲方),卖方[公司]和买方[公司]将分别更改为卖方方和买方方。

 

执行顺序
基本上,一个服务模型元素(其子模型和数据模型元素)的执行顺序由它们之间的流程来决定:当模型元素的所有触发连接器都执行以后,该模型元素即开始执行(一个子进程启动或一个数据元素得到它的值)。
因此,一个模型元素如果没有流程连接它即一个独立的服务模型或数据模型(典型的例子是一个初始化子模型或数据常量),此时它将立即执行(如果有多个这样的模型元素,中间件服务器可以自由的以任何顺序执行它们。但也参照模型元素在Rhstudio中的排列位置,比如放在上面的模型元素总是会先执行,从上到下,其次是从左到右的顺序执行)。
当一个模型元素具有其它模型指向它的流程(即模型元素或它的一些子模型元素是一个流程或多个流程的目标模型),那么该模型在其它流程执行完成之前(或清楚地表明,他们永远不会被执行)不会被执行。
当一个流程开始执行时,它将数据从它的连接源传给它的连接目标。注意,如果连接源是一个空的连接器,流程将不传递数据(只是一个普通的“触发指示”)。
当存在多记录的子模型或多记录的数据元素时,它们将被执行多次,每次生成不同的模型实例(由中间件服务器处理)。当有一个流程(或多个流程),其目标是一个多记录的子模型的触发连接器,那么每次当数据到达触发连接器,都将创建子模型的新实例(由中间件服务器处理),接收作为输入的触发数据对象。
确保这些执行顺序规则的机制是“依赖机制”--一个元素只在其依赖的元素执行后执行:
(1)流程的连接目标取决于它的连接源。
(R2)当存在一个流程指向数据模型元素和它的子模型元素时,子模型元素的流程的连接源取决于其父模型元素的流程的连接源。
这些抽象规则可以通过一个具体的例子进行更好的理解:

 

插件
在Rhstudio中间件服务器中执行的应用程序,是由它在模型中所定义的逻辑组成。应用程序的功能由模型的层次结构中的每个模型的功能组合而成。
模型的功能由插件定义。插件是一个功能块的定义,可以用来模拟应用程序。有原子插件,如内置的数据类型或数学计算,复合插件,如复合数据结构模型或复合服务模型。
插件由以下属性组成:
插件的类型(系统模型、显示模型、服务模型或数据模型)。
-执行该插件的层(服务器端、客户端或两者)。
–对于服务器端插件,由java类具体实现(见下文)。
-对于客户端插件,由JavaScript脚本实现(见下文)。
–图标是在Rhstudio插件中显示。
-插件的文档(HTML文件)。
服务器端插件是一个必须在服务器上运行的服务模型。该插件(一个典型的例子是数据库更新模型)由一个java类实现。例如,在通用模型库中有一个‘rhstudio/数据库/插入插件’模型,它是由rhstudio的java插件类库rhstudio.plugins.database.insert实现,功能是负责数据库的更新操作。一个插件的java代码应符合Rhstudio平台的接口规范(一个服务模型插件如何通过触发连接器获取数据对象的值,如何将数据对象通过退出连接器传递给其它服务模型,如何处理错误,等)。
客户端插件是只在客户端上运行的服务模型或数据模型。这样的插件(如任何显示模型插件)是由JavaScript实现。例如,rhstudio/显示/日期输入字段的插件是由js的函数代码dateinputfield实现,打开日历弹出并返回用户选择的日期。一个客户端插件的代码应该符合rhstudio平台的客户端接口规范。
许多插件可以在客户端运行,也可以在服务器端运行。这样一个插件的实现是通过一个java类(服务器端处理)和由JavaScript代码(客户端处理)。例如,插件‘rhstudio /日期/取得星期’模型 是根据指定的日期取得对应得周,它得java实现是由rhstudio.plugins.dates.getweek类,客户端js代码由getweek函数实现。这两个类实现得功能是相同的(一个是客户端一个是服务器端)。
当一个插件标记为客户端或服务器端,那么rhstudio服务器可以自由选择在哪里执行它。当然也有一定的限制。例如,如果一个模型有一个服务器端插件,那么它的所有元素也会在服务器上运行。这些执行约束意味着建模上的相应约束--您可能无法在服务器端模型中放置客户端模型(例如,不能在服务器端服务模型中使用显示模型元素)。
数据模型属于双模式,既存在于客户端也存在于服务器端,因为数据对象可以在两个层次的服务模型之间来回传输。

 

模板
rhstudio的通用模型库是一个预定义的模型库,可以作为新建模型插件得模板库。
该模型库分为若干类(如数据类型、数据库、显示、数学等),每个类包含多个模型,称为模板。
模板是一个使用某些插件类实现的通用的/典型的模型。如果需要一个在rhstudio上设计某个模型,可以从模型面板上拖出一个模板,模板复制到模型的层次结构中,然后,如果需要的话,该模型可以以按具体需求在该处修改它。
例如,添加模板(属于数学类)有两个数字非多记录触发器,因为它的基本用法是添加两个数字。然而,在任何特定的上下文建模可以添加触发器、删除触发器,或使一些触发器变为多记录–可以使模板插件(rhstudio /数学/添加)可以接受任何数量的数据输入,也可以添加模板模型的注释模型。
注意到多个插件(或者多个模板)可以由相同的java类实现(或者JavaScript脚本)。例如,总和(sum)模板(属于数学模型库)是和加法(Add)相同的代码实现的。基于相同代码创建两个不同模板的原因模型的用途不同--为了在(加法)和求和之间区分,可能会发现有两个不同的模板是有用的。在这种情况下,每个模板都有不同的图标(+是加法,∑求和)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值