Java 计算两个UML模型之间的差异

Java 计算两个UML模型之间的差异,java,uml,Java,Uml,我想知道一些关于如何计算两个UML模型之间(集合?)差异的参考资料和想法。基本上,我有一个系统(用UML/xmi表示),可以将几个模式(也用UML/xmi表示)应用到这个系统中 例如,我们可以将模式a应用于将模式b应用于系统的结果-Pa(Pb(S))。然后我想计算dif(Pb,S),然后计算dif(Pa,S),因为在应用模式后,合并的系统可以被视为原始系统 我正在寻找参考资料(无论是否在文献中)和算法,因为我不想重新发明轮子。最后我将用Java编写代码 提前感谢, 使用Pedro,您可以比较两个

我想知道一些关于如何计算两个UML模型之间(集合?)差异的参考资料和想法。基本上,我有一个系统(用UML/xmi表示),可以将几个模式(也用UML/xmi表示)应用到这个系统中

例如,我们可以将模式a应用于将模式b应用于系统的结果-
Pa(Pb(S))
。然后我想计算dif(Pb,S),然后计算dif(Pa,S),因为在应用模式后,合并的系统可以被视为原始系统

我正在寻找参考资料(无论是否在文献中)和算法,因为我不想重新发明轮子。最后我将用Java编写代码

提前感谢,


使用Pedro,您可以比较两个不同的EMF模型实例。因为UML在Eclipse中表示为EMF模型实例,所以可以使用它来比较UML模型。只需安装EMF Compare,在PackageExplorer(或您使用的任何视图)中标记您的UML模型,然后选择Compare->With ather。。。从上下文菜单中。比较编辑器将允许您将差异保存为.emfdiff文件。

使用,您可以比较两个不同的EMF模型实例。因为UML在Eclipse中表示为EMF模型实例,所以可以使用它来比较UML模型。只需安装EMF Compare,在PackageExplorer(或您使用的任何视图)中标记您的UML模型,然后选择Compare->With ather。。。从上下文菜单中。比较编辑器将允许您将差异保存为.emfdiff文件。

我无法向您指出确切的文献,但如果您不/不能使用上述EMF解决方案,请考虑以下问题:
UML模型是图形(我需要一些思考来弄清楚边和顶点是什么,但无论如何)。要获得差异,您需要同时使用顶点集和边集。这样你就得到了所有的东西,只有一个图表。如果您使用应用的模式计算原始模式和模型之间的对称差异,这将为您提供模式对模型的确切作用。

我无法向您指出确切的文献,但如果您不/不能使用上述EMF解决方案,请考虑以下问题:
UML模型是图形(我需要一些思考来弄清楚边和顶点是什么,但无论如何)。要获得差异,您需要同时使用顶点集和边集。这样你就得到了所有的东西,只有一个图表。如果您使用应用的模式计算原始模型和模型之间的对称差异,这将为您提供模式对模型所做的准确操作。

这看起来很有趣,但我的目的是比较任意两个uml模型,而不是在版本控制中对其自身进行比较。至少,我对EMF比较的理解是这样的,如果可以比较任意模型,我还在查阅文档。@PedroDusso不,这不是对自身的比较。您可以相互比较任意两个EMF模型实例,因此您也可以使用任意UML模型实例。是的,您是对的!但是我不能提供“彼此”选项,而且教程也没有帮助。为了实现这个目标,我必须与一个EMF项目合作?@PedroDusso不,它不需要是一个EMF项目。你只需要安装正确的插件。也许Eclipse论坛会有所帮助。谢谢你的回复,我将其标记为答案。然而,EMFCompare处理*.xmi文件,我有一个*.uml文件作为输入。我相信uml文件在内部是一个xmi。您知道它是否可以作为参数传递而不进行任何类型的转换吗?我也会在EclipseForuns上发布,再次感谢!这看起来很有趣,但我的目的是比较任意两个uml模型,而不是在版本控制中与自身进行比较。至少,我对EMF比较的理解是这样的,如果可以比较任意模型,我还在查阅文档。@PedroDusso不,这不是对自身的比较。您可以相互比较任意两个EMF模型实例,因此您也可以使用任意UML模型实例。是的,您是对的!但是我不能提供“彼此”选项,而且教程也没有帮助。为了实现这个目标,我必须与一个EMF项目合作?@PedroDusso不,它不需要是一个EMF项目。你只需要安装正确的插件。也许Eclipse论坛会有所帮助。谢谢你的回复,我将其标记为答案。然而,EMFCompare处理*.xmi文件,我有一个*.uml文件作为输入。我相信uml文件在内部是一个xmi。您知道它是否可以作为参数传递而不进行任何类型的转换吗?我也会在EclipseForuns上发布,再次感谢!这看起来非常有趣,我应该考虑如何有效地表示模型,以便执行一个算法来编码这个差异。这看起来非常有趣,我应该考虑如何有效地表示模型,以便执行一个算法来编码这个差异