Model 模型驱动的开发:什么是转变?

Model 模型驱动的开发:什么是转变?,model,terminology,transformation,mdd,Model,Terminology,Transformation,Mdd,据我所知,模型驱动开发(MDD)允许通过应用转换从相应的模型自动生成程序/模型 关于转换,我所知道的只是它们是存储开发人员特定于平台的专业知识的一种方式 但是转换到底是什么呢?模型驱动开发中的转换是我们在处理模型时得到的输出。此输出可以是另一个模型或源代码 在MDA(模型驱动架构)方法中,我们可以通过转换过程将PIM(平台独立模型)转换为PSM(平台特定模型)。然后,我们可以再次通过后续转换将PSM转换为源代码 其他一些方法,如将模型直接转换为源代码。在这里,ABSE模型直接生成最终的源代码,因

据我所知,模型驱动开发(MDD)允许通过应用转换从相应的模型自动生成程序/模型

关于转换,我所知道的只是它们是存储开发人员特定于平台的专业知识的一种方式


但是转换到底是什么呢?

模型驱动开发中的转换是我们在处理模型时得到的输出。此输出可以是另一个模型或源代码

在MDA(模型驱动架构)方法中,我们可以通过转换过程将PIM(平台独立模型)转换为PSM(平台特定模型)。然后,我们可以再次通过后续转换将PSM转换为源代码

其他一些方法,如将模型直接转换为源代码。在这里,ABSE模型直接生成最终的源代码,因为它的模板作为迷你程序(在协作类型生成器中)工作:不需要进一步的转换。与大多数其他MDD方法一样,ABSE需要工具支持。在本例中,它是。

A是一个函数,给定一个程序表示实例,计算另一个实例

程序表示可以是任意的,但通常是抽象语法树(AST)或图形(如UML);您甚至可以将字节码作为程序表示形式。与数学函数一样,变换可以是“局部的”(也就是说,只能在某些[可能复杂的]条件下工作)

我个人喜欢术语转换指的是函数本身,转换指的是应用转换获得新表示的行为或结果

通常,(全局)程序转换可能会影响整个表示,即使它是巨大的,但通常单个转换只修改一小部分,而只保留大部分程序表示。抽象地说, 整个程序表示实例由转换处理,以生成另一个全新的程序表示实例。由于表示实例往往很大,因此通常通过让转换简单地修改现有的表示实例来实现。 您可以将这种“小”变换视为具有附加参数,这些参数将它们集中在表示的特定部分,它们将对其进行更改

与数学函数一样,变换组合产生“更大”的变换(这也是局部的,因为条件也组合)。通常,您编写一组转换来转换整个程序表示,因为没有一个转换将在一个步骤中处理整个表示实例。您可以编写它们,这一事实允许您编写大量“小”转换,这些转换共同实现了您的目的,因此您在语义转换中获得了一种模块化,这就是为什么人们喜欢程序转换的想法

与数学函数一样,您可以通过编写过程代码来实现这种转换。这样的代码检查原始模型的各个部分,并在运行时对模型进行更改,但这通常是不方便的

因此,这些转换通常是以所谓的“声明性”形式编写的。每个规则都解释为“如果您看到左侧模式,并且条件匹配,则更改程序表示以匹配右侧模式”。模式变量允许模式指定原始程序表示的块,使其不受影响地通过转换(通常由其他转换处理)。虽然这些规则被称为“声明性的”(因为它们看起来不像传统的代码),但它们只是表示一些等价的函数,因此不是预期意义上的声明性的。规则往往比等效的过程代码更具可读性,这通常是因为模式是用源和目标表示的表面语法编写的

实际上,单个转换只适用于表示中的特定位置,并且它们的应用顺序(“组合”)很重要。为了处理这个问题,(程序)转换工具通常提供一种“元程序”的方法来控制焦点和规则应用程序顺序


这些思想适用于所谓的“模型驱动的开发”,即应用于可以论证的高级模型的转换,以生成低级代码,或将低级代码转换为其他低级代码。您甚至可以使用这些想法来构建逆向工程工具,例如,将低级代码映射到某个抽象模型。我们的是一个程序转换工具,具有过程转换和源代码到源代码重写,用于所有这些目的。

MDD的核心开发流程是从应用程序模型到运行的实现,通过后续的模型转换。这允许在不同的平台上重用模型和执行系统。事实上,在实现层面上,运行的软件依赖于特定的平台(与特定的应用程序域不同)来执行

除了模型之外,模型转换还代表了MDD和 允许对不同模型之间的映射进行挑战。转换是在源模型和目标模型之间执行的,但它实际上与各自的元模型相冲突

模型转换可分为: -模型到模型的转换 -模型到文本的转换(用于生成软件代码、文档或其他文本工件)

MDE提供了适当的概念语言(例如,QVT或ATL)来定义模型转换,从而为设计人员提供指定转换规则的优化解决方案。显然,因为最后模型是编码的