标准的UML到代码映射(正向工程)是什么?

4

我想知道是否有被广泛接受的标准用于UML(统一建模语言)到代码的映射(前向工程)?

2个回答

3

不,不存在从UML到代码的标准映射。虽然可以使用UML来“绘制”代码,但它的设计是为了在“上层”(业务层面)工作。因此,从UML模型生成代码的方法并非唯一,而是随着系统和语言种类的增多而变得多样化。


关于MDA中的自动转换怎么样? 这种转换不需要遵循标准步骤吗? - user2019510
1
MDA 在非常高的层次上定义了一个流程。首先创建一个 PIM(平台无关模型),即仅包含业务逻辑而不涉及技术选择的模型。然后将 PIM 转换为 PSM(平台特定模型),即显示如何在特定技术平台上实现业务逻辑的模型。最后从此 PSM 生成代码。这就是 MDA 的总体思想。 - Xaelis

3
从UML到代码没有一种通用的翻译方式,这是由于多种原因造成的,包括:
- 使用何种UML元素以及使用方式。UML是一种庞大的语言。在历史上,它更加强调静态方面的内容(类、关联、包),而不是动态方面。只有相对较近的版本才具备可执行模型所需的操作语义。与更成熟的静态元素相比,这些新的部分还没有得到很好的支持。这可能是规范化的MDA转换没有变得更加普遍的一个重要原因。 - 可以针对不同的编程语言进行翻译。将UML翻译为第三代面向对象语言可能是最流行的选择。但也可以翻译为其他语言:C语言在嵌入式领域中很受欢迎。 - 不同的翻译规则可能取决于特定环境的需求。
尽管如此,还是有一些常见的惯用法。例如:
- UML包、类和属性通常直接映射到它们的OO 3GL对应项。实际上,许多UML模型只是3GL OO代码的图形表现形式。 - UML关系通常分为两个部分,在每个关系端存储指针/引用。 - 有3种常见的模型用于翻译UML状态模型(或更一般的任何状态模型):嵌套开关、状态表和状态模式。
操作语言对于规范化映射来说还太新/支持不足。尽管如此,其规范与典型的3GL结构非常相似:if/then/else控制语句、赋值等。因此,模型和目标之间的语义差距相当小,翻译应该是相当直接的。
希望对你有所帮助。

嗨@sfinnie!你说的“UML在静态方面比动态方面更强大”是什么意思? - user2019510
#回应使用UML的哪些部分 假设我将使用类图、活动图和序列图。 关于如何使用它们,我将根据OMG规范来使用它们。那么在这一点上有什么问题(在您的第一个原因中)? #在我看来,UML并不是一种庞大的语言,我同意您的观点,即UML有一个庞大的规范文档。#我认为大部分工作将放在翻译规则上,因为UML没有很好地形式化,并且容易受到不同的解释。您认为呢? - user2019510
1
@user2019510:#1:“更强的静态方面”是指UML结构概念-类、属性、关联、包等-更普遍被接受、使用和实现。#2:是的,活动/序列图可以直接转换成代码。但它们无法捕捉所有操作,因此需要行为语义。所以你需要决定如何处理这些内容。#3:我同意UML在历史上没有得到很好的形式化-至少不是从可执行/可翻译模型的角度来看。希望对你有所帮助。 - sfinnie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接