将UML转换为代码

时间:2010-04-21 18:12:43

标签: architecture language-agnostic uml

简短的问题。你如何将UML图转换成代码?类图很明显,但其他如Activity,Use Case,Sequence,State,Package等呢?

2 个答案:

答案 0 :(得分:3)

哇,如果你在开始编码之前拥有所有这些,这真的很酷;)这意味着有人在预期软件建模方面做得不错!

也就是说,UML的各种图表可以或多或少地映射到代码。以下是我对此的感受:

  • 类图。在大多数情况下,使用代码一对一地映射。仍然可以在分析过程中使用,以显示不会一对一映射的概念,但这种情况非常罕见。
  • 套餐图。在大多数情况下,也会使用代码一对一地映射。除了展示实际来源的包装外,我从未见过它的任何用途。
  • 序列图。在大多数情况下,地图也相当接近代码。除了在序列图中经常避免某些步骤,否则会变得很大。它仍然显示谁直接或间接呼叫谁。
  • 状态图。这个更抽象。它显示程序(或程序本身)中元素的各种状态,不能按原样转置;您首先需要决定如何存储/建模状态。例如。一个状态图显示java中可能的thread state没有映射到代码中真正直接可见的东西,但是线程有一个状态,如corresponding enum所示。
  • 活动图。显示算法/程序的各个步骤。虽然某些东西可以相当容易地转换,例如循环,但是其他一些东西的实现,例如并行活动,可能在代码中有所不同。并行活动最明显的实现是使用线程,但这可能是JMS,具体取决于图的粒度。它仍然没有告诉你每个步骤的逻辑是什么,所以最终有一些工作来解释图并实现它。
  • 用例。这是最重要的一个。它不能按原样进行转置,您需要考虑如何实现用例,该用例可以从非常高级别到低级别。它没有公式。

结论:UML是一种在各种角度描述软件的工具。某些方面可以在代码中轻松转换,其他方面可以更抽象,并且可以以各种方式实现,具体取决于图的粒度。

这是设计开发之间的区别:实现是将设计细化为真正可执行的(代码),可能需要或多或少的工作取决于现有设计的粒度。

梦想当然是能够从代码中生成UML,而反之亦然,但我们还没有!它几乎适用于类图:)

答案 1 :(得分:2)

我使用EclipseUML Omondo进行UML建模,使用AndroMDA进行代码生成。 您可以使用构造型从Class,usecase和State图中生成代码。您需要在分类器上添加构造型,然后AndroMDA引擎读取构造型并生成代码。 有关更多信息,请访问AndroMDA论坛:http://forum.andromda.org/index.php