没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记127(2005)17-29www.elsevier.com/locate/entcs侧转换模式:使转换模块化和可重用Edward D. 菲利普·J. 哈里斯2号Thales Research and Technology(UK)Ltd Reading,英国摘要元建模的基本原则现在已经为各个模型建立了良好的基础。像MOF QVT [5]这样的活动现在正在将这些原则扩展到模型之间的转换。然而,转换之间的元模型不兼容性减少了有效重用的机会,阻碍了大规模采用。我们介绍了一种模式,侧转换模式,自然产生的转换是可重用的,并提出了一系列的例子,显示如何使用它可以带来清晰度和鲁棒性复杂的转换问题。保留字:M D A ,MOF,模块化,模式,QVT,转换,UMLX。1介绍转型通常被视为一项完整的活动。这种印象在当今的“MDA兼容”工具中尤其普遍,这些工具执行源(平台独立模型)概念到目标(平台特定模型)概念的一步重写。这种方法没有模型驱动架构[4]所要求的明确的平台模型,并且几乎没有通过渐进转换进行进化的机会在单阶段方法满足用户需求的情况下,它可以大大提高生产率,例如,在代码生成器模板中,直接从UML图形生成Java或C++源文本。1电子邮件:EdWillink@iee.org2电子邮件:Phil. thalesgroup.com1571-0661 © 2005 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2004.08.03018E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)17模型然而,一个阶段的方法往往妨碍了对不同的方案编制问题进行适当的分离。其结果是在转换过程中缺乏灵活性和可见性,导致增强或重用的机会很少。一旦转换被视为一个多阶段的编程规程,传统的软件工程问题,如模块化和重用出现。在转换的上下文中,重用受到所使用的元模型之间不兼容性的阻碍。如果一个转换驱动的方法与许多不同的用户应用程序所需的丰富性被广泛接受,工程问题和编程的关注必须解决在翻译越来越抽象的源表示到各种不同的平台。我们感兴趣的是将指定所需计算和通信的领域特定视觉语言(DSVL)转换为高效的可执行代码。可执行代码可以是C或VHDL,这取决于目标平台本质上是顺序的还是并发的。需要许多不同的转换-一些解决图形抽象和实例化层次结构的转换可以由两个目标共享,其他转换(如建立顺序调度或同步并发执行)非常依赖于目标。完整的转换集太复杂,无法用一次传递来表示,而且许多转换(如状态机合成)与更常规的功能重叠。因此,我们期待一种方法,涉及许多小的transforma- tions,每个处理问题的一个方面,这样,从一个大型的可重用的转换库中提取的相关转换可以被利用来构建一个明显的自定义组合,几乎没有真正的自定义贡献。这种方法在验证完整的转换、控制转换代码库和传递系统知识方面也有很大的优势。即使在UML到Java的世界中,我们也看到了使用这种方法来逐步实现更抽象的UML构造为简单的面向对象概念的好处,然后在最终转换为文本之前,这样的进展可以很容易地发展,以适应额外的领域特定的视觉概念在开始,交替面向对象的角度在中间,或专门的代码指标在结束。在本文中,我们首先提出了一种转换模式,当我们试图使我们的转换模块化和可重用时,这种模式会反复出现。这些都是成功的MDA的基本特征[3]。然后,我们概述了我们的编译系统中的模式的三个不同的例子。第三个例子包括三个E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)1719模式的不同调用,演示了如何顺序地、并发地和递归地组成模式。如果转换是可重用的,有三种可能性• 分析转换操作• 将转换为自定义元模型• 转换特定于转换的元模型。标准化元模型是不实际的,因为任何未来的UML版本都不太可能对典型的使用足够轻量级,但对所有人都足够灵活。翻译转换可能是最好的选择。但是,我们必须等到工具发展到支持转换上的转换,直到我们的可重用转换是用可转换语言编写的。QVT在这里看起来很有前途。将自定义元模型的相关元素投影到变换域中现在是可行的,并且可以允许在未来进行优化。这种方法形成了侧面转换模式的基础;类似于侧面计算,这种模式执行一些辅助操作以取得整体进展。我们使用一个模式形式[2],以便提供一个清晰简洁的阐述问题、背景、力量和解决方案。因此,其目的是捕捉专业知识,而不是声称任何伟大的新颖性。许多读者肯定会认识到这种方法,并且,像作者一样,可能会后悔他们没有经常应用这种模式的纪律或工具2第一千一百零八章侧面转化模式上下文您正在设计或编写应用程序。您会遇到需要进行转换以解决重复出现的或复杂的问题。你发现重用需要不同的输入或输出元模型的这个问题的整体解决方案演示了这个上下文和一种扩展UML以支持描述转换的在图1中(基于建议的UMLX表示法[6]),矩形使用UML类实例表示法来显示模型及其元模型,菱形表示转换实例,尖矩形标识整个转换组件的输入箭头显示了模型在端口、模型和转换之间的请注意,尽管输入和输出都显示为Model的实例,但每个都来自不同的包,因此可能完全不同。20E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)17问题Fig. 1. 一个整体的转变。如何使您的转换可重用和模块化?部队转换的单片实现避免了复杂性。单片实现将解决方案与业务规则和元模型耦合起来。这可能会造成以下问题:• 禁止在其他应用• 禁止与其他元模型• 禁止与其他业务规则重用一个解决方案的重复出现的问题可能是从另一个编程域。转换可以建立在现有的转换上。溶液将重复出现的问题的解决方案与侧面转换中的周围应用程序隔离开来(图2)。该解决方案涉及四项活动:1 叉子从ApplicationInputMM(元模型)传入的Model实例可用于两个单独的转换路径,一个用于侧面转换,另一个用于最终合并。2 项目创建ApplicationInputMM中Model实例的视图,该视图从应用程序中提取突出信息,并将其表示为求解器ProblemMM中Model3 解决。可重用的解决方案用于将表示为模型实例的问题从求解器E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)1721图二. 侧变纹。从求解程序的SolutionMM中调用Model4 合并更新或重写从ApplicationInputMM传入的Model实例的第二个副本从ApplicationOutputMM中生成Model实例的侧面转换。(Note来自每个元模型的Model的实例表示元模型实例化的根,并且每个元模型可以是完全独立的。因此,可能有四个不同的模型类。)结果上下文单独的元模型与可重用求解器的输入和输出相关联。因此,求解器独立于应用程序。Project转换负责创建问题视图。因此,来自业务规则的激励被隔离在一个单独的模块中。Solve转换是独立的且可重用的。Merge转换负责解释解决方案。对业务规则的响应再次被隔离在一个单独的模块中。变化元模型可以被重用;每对ProblemMM、SolutionMM和ApplicationInputMM、ApplicationOutputMM元模型可以是相同的或从共享的核心元模型导出22E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)17图三.演员等级制度。该模式可以递归地应用,其中Project、Solve和Merge作为该模式的进一步实例。该模式可以与多个求解同时应用,从而有助于更复杂的合并。3示例1:类型推断约束在我们的第一个例子中,我们考虑DSVL的编译阶段,它将系统定义为组件的连接。模型的重要部分是• actors -封装其调度• 端口-参与者• 连接-端口该模型是分层的,因此在参与者定义(AD)中的某个层次上,我们可能会在定义的参与者的端口定义(PD)和定义的参与者内安装的参与者实例(AI)的端口实例(PI)之间建立连接。为了使这个例子更广泛的受众,我们使用UML2.0活动图符号而不是图3的DSVL。因此,Actor实例被显示为Activity(圆角矩形),其外部端口(实例)被显示为引脚(小矩形),内部端口(定义)被显示为参数(大矩形)。图3用两个层次的结构来突出实例化的结构性本质。外部参与者定义AD0包括AD1和AD2的实例AI1和AI2,每个实例具有分别被实例化为PI1和PI2的单个端口PD 1和PD 2。AD1和AD2依次实例化AD3和AD4。单个连接从PD3的PI3、经由PD1的C1到PI1、经由PD2的C0到PI2、以及经由PD 2的 C2到PI 2遍历层级。E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)1723PD4的PI见图4。 约束求解元模型。为了生成这样一个系统的代码,重要的是要知道属性,如每个端口和每个连接的类型显然,程序员不希望在11个节点中的每一个节点上定义类型,因此我们可以利用类型必须在所有节点上一致的约束来推断缺失的声明,并验证冗余声明。在层次结构的每个级别中,我们都有一个连接约束:TPI1=TC 0=TPI 2,TPI 3=TC 1=TPD 1,TPD 2=TC 2=TPI 4(其中TC0表示连接C0的类型),并且在层次级别之间,我们有:TPD1=TPI 1,TPD 2=TPI 2,TPD 3=TPI 3,TPD 4=TPI 4在某些时候,我们可能会有,例如,TPD3=INTEGER这些约束可以容易地表示为图4中所示的元模型的实例。该模型包括要求每个他们的条款是兼容的。一个Literal强制一个特定的值,比如INTEGER。一个等式关联一个自由变量,比如TC0.因此,这个问题涉及到许多约束,(希望)相交于一个项。结果是输入元模型的一个实例,它满足输入/输出要求,即每个不同的传入术语元素在输出中只出现一次,并且在输入中共享一个公共父元素的每对术语元素在输出中也共享一个父元素这些类型推理算法的实际实现需要在设计层次结构中上下递归遍历单片24E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)17因此,实现导致非常紧密地耦合到设计元模型的复杂解决方案,几乎没有重用的机会。然而,侧转换模式允许封装这些单独的关注点,简化了实现和维护:• ApplicationInputMM是必需的。• Project转换从输入元模型创建类型(in)等式系统。• 问题MM如图4所示。• 求解将等式系统减少到唯一类型的列表• SolutionMM如图4所示,另外还禁止多个Term父项。• “合并”使用其推断类型注释原始设计中的每个节点• ApplicationOutputMM与输入相同,只是所有可选类型相关的属性都已解析。类型求解器现在是解耦的,并将元素组合在一起,而不用考虑DSL的层次复杂性或解决方案的语义有效性。未解析约束(没有术语.literal的约束)或冲突约束(具有多个不同术语.literal的约束)的语义解释作为将解决方案合并回原始模型的一部分进行解析。4示例2:公共特征消除公共子表达式消除是一种标准的编译器优化,旨在通过缓存和重用单个计算的结果来消除重复计算。优化可以更普遍地应用于建模环境中,因此我们指的是特征而不是子表达式消除。这种优化的简单实现可能会导致整个模型的二次复杂度,因为外部搜索识别每个候选消除,内部搜索识别重复。一个更有效的实现使用侧转换模式。• 一 线性 复杂性 项目转型 构建 一个 例如 的ProblemMM,识别所有候选人。• Solve转换构建了SolutionMM的一个较小实例,用于标识公共特性。• 线性复杂度合并变换重写输入以利用E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)1725图五. 示例流程图。共同特征三个Project、Solve和Merge转换的分离隔离了三个不同的活动,提供了共享Solve转换的机会,并导致接近线性的复杂性(如果Solve转换使用了合适的散列5实施例3:同步屏障插入我们的第三个例子涉及在一个重复计算中自动放置同步屏障,该重复计算由一个图定义。图5提供了一个示例,矩形封装了嵌套(分层)计算,粗条表示同步屏障,有向箭头显示数据流。(This图展示了DSVL。一个等效的UML活动图需要每个参与者矩形由一个活动用引脚来详细说明,这样所有的输入都是同步的,所有的输出都是同步的。同步屏障必须类似地通过具有同步输入和同步输出的空活动来详细说明。)每个同步屏障在一个计算周期结束时捕获其输入,并在下一个计算周期开始时传播因此,屏障确保{I,J,K}输入和{P,Q}输出构成相干元组。在一个完整的评估期间,输入I、J、K和子过程A、B、C、D的当前状态用于计算输出P和Q以及A、B、C、D的新状态。图中的优先约束(数据依赖性)要求A在B和C之前计算(可以并行计算)。B和C在D完成整个计算之前依次计算。26E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)17联系我们见图6。 示例流水线流程图。峰值计算速率由最慢路径确定:通过计算图的有向路线,开始于同步屏障,结束于同步屏障。 图5中有五条这样的路径,其中从J到Q的两条路径中的一条显然是最慢的,因此示例中的计算时间为tmax=tA+max(tB+tC)+tD,其中tD是节点D的计算时间,tmax是最坏情况下的计算时间。在一个简单的实现中,这个计算时间将限制最大吞吐量为每秒1/t最大然而,由于我们的目标平台为A、B、C和D中的每一个提供单独的资源(并行),因此可以通过引入额外的屏障来实现更高的吞吐量,使得在连续的执行周期期间计算A、B、C和D要成功实现这一点,需要引入图6所示的另外七个障碍(R、S、T、U、V、W和X)。对于图5这样的简单设计,在每个数据流上插入的障碍的数量通常是显而易见的。然而,当出现复杂的依赖关系时,问题变得更加困难,例如需要在C中插入更多的障碍。一个完全自动化的解决方案是非常可取的。有效的解决方案满足以下约束:• 每条路径都满足指定的吞吐量• 一致的输入和输出保持一致一个• 插入障碍• 指定吞吐量• 输出端的最小延迟在此不适合详细阐述算法细节把它放在E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)1727见图7。同步屏障插入。假设解决方案可以通过一组整数来捕获,这些整数指定每个参与者计算延迟了多少个周期,并且问题可以通过一组不等式来表示,这些不等式必须由这些整数满足该解决方案是递归建立的,因此内部演员所需的同步单个递归的解决方案使用了图2的Side转换模式的三个实例。图7所示的顶层,投射出一个元模型实例,它关注于流程图的细节。然后将其馈送到两个不同的求解器。一个是确定同步屏障冗余的恒定路径,另一个是确定每条非恒定路径上的必要延迟。这两个分析的结果控制了随后对包含所需同步屏障的输入模型的重写每个解算器也是侧变换模式的实例。不变路径分析相对简单,因此使用了具有相同元模型的模式的退化形式,并使用了空项目转换。合并只是添加了一个is常量属性到选定的下行图节点。相位分析更加复杂,并以与第一个示例类似的方式充分利用了侧变换图案投影变换创建一组不等式,用于描述求解器的系统约束28E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)17采取行动求解是基于PIP [1]的参数化可编程求解器。这会生成自己的描述解决方案的输出元模型。通过注释该图模型,再次合并结果最后的障碍插入合并现在有两个模型,以结合从原来的叉设计模型。合并是一个设计重写器,它将同步屏障插入计算图中的非恒定路径。输入和输出元模型是相同的,但是输出已经在全局基础上优化流水线,以满足所需的计算吞吐量。该模式再次允许使用独立的求解器,在这种情况下是内部不变路径识别算法,但更重要的是高度优化的通用求解器,具有来自第三方的专有输入和输出元模型(C结构)。使用高级边变换来封装两个解算器并合并它们的结果,从而隔离了以下各项:解决问题的机制,包含问题的设计的描述,以及解决方案在该设计中的最终应用。6确认作者感谢Thales Research and Technology允许发表这篇论文,其中大部分是基于在SPFIT和GSVF-2项目上所做的工作。7结论我们已经展示了一个特定的fork、projection、computation和merge模式如何使一个可重用转换的集合有效地组合成一个更大的复合转换。此侧转换模式促进了求解程序与应用程序元模型及其附带业务规则的封装和隔离。这种模式及其退化形式的引入还可以通过明确定义可重用、验证和优化的边界来帮助转换过程的形式化描述。作为示例,我们已经描述了模型驱动编译系统的一部分,该系统通过使用许多基于模式的小型渐进转换,从系统的可视化表示转换为各种平台在此过程中,我们证明了该模式是可扩展的和自洽的,并且该模式中确定的四个主要操作阶段简明地描述了基本的转换活动,E.D. Willink,P.J.Harris/Electronic Notes in Theoretical Computer Science 127(2005)1729有助于对转化行为进行一般性讨论引用[1] Feautrier,P.,J. F. Collard,和C.李文生,http://www.prism.uvsq.fr/~cedb/bastools/download/abe01_MHAOTEU.ps[2] 伽马,E.,R.赫尔姆河Johnson和J. Vlissides,[3] Lemesle 河 ,“ 元 建 模和模 块 化:比 较之 间MOF , CDIF sNetsformalismshttp://www.sciences.univ-nantes.fr/info/lrsg/&[4] 米勒,J.,和j.Mukerji,,网址:http://www.omg.org/docs/omg/03-06-01.pdf[5] QVT- 合并集团,“订正提交为MOF2.0Query/ Views/Transformations RFP(ad/2002-04-10)//www.omg.org/docs/ad/04-04-01.pdf[6] 威尔林克E.D、一混凝土基于uml图形转型语法- 的UML到RDBMS例如在UMLX,讲习班对元建模 为MDA,大学的约克,英格兰,24-25十一月2003,网址:网址://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/gmt-home/doc/umlx/M4M03.pdf
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功