有没有适用于Scala的UML工具?

17

是否有适用于Scala的UML工具。我提出这个问题的原因是它结合了函数式和面向对象的概念,因此我想知道这样的工具如何在UML图中表示函数。

4个回答

23

这个帖子总结了任何想要表示Scala类的UML工具所面临的障碍:

  • UML没有官方表示mixin的方法
  • 很难表示以下内容:
    • 闭包
    • Scala类型成员
    • 类构造函数参数边界(也称为“模板类型”边界/约束)
    • 协变和逆变类构造继承
    • 类或特质与伴生对象之间的关系

这篇论文(“Evaluierung des Einsatzes von Scala bei der Entwicklung für die Android-Plattform”,pdf,德语)为trait mixin和其他Scala特定元素添加了stereotype(第146页)。

Meiko Rachimow在2009年所添加的内容:

属性、getter和setter

Scala attributes

对于所有已发布的属性都存在隐式getter (attribute1attribute2),除非可见性声明为privateattribute3)。如果已发布的属性被标记为一个stereotype Var,则它们是变量,有一个隐式setter (attribute2)。Stereotype lazy 将实例变量标记为lazy(attribute4)。

类和泛型

Scala class and genericity

与 UML 中一样,泛型类通过抽象类型标记。使用 Scala 语言语法,可以为此类型(EineKlasse)声明上限和下限。可以使用结构化类型作为边界,其属性和方法由大括号括起来(EineKlasse2)。方法的泛型类型参数由方括号括起来(operation)。

特征

Scala traits in UML

特征显示为抽象类,并带有trait 类型。抽象属性和方法以斜体显示(attribute2operation2)。对于抽象属性,依赖关系箭头可以带上requires 类型的附加信息(Trait3attribute3)。另外,self 类型用于自引用类型(Trait4)。如果一个特征继承另一个特征,则继承会显示为继承箭头(Trait2)。如果一个类扩展一个特征,则同样使用这种箭头类型(Klasse)。为了强调特征的“混合”,继承箭头可以带上mixin 类型的附加信息(Klasse)。

单例对象

Scala singleton in UML

单例对象显示为类,并带有singleton 类型。可能存在两个具有相同名称的类元素,实际上是拥有相应伴生类的单例对象。在这种情况下,依赖关系箭头带有hasA 类型的附加信息。


@PeterSchmitz:我已经修复了那个PDF文件的链接。 - VonC
1
@VonC 如果您能为特质类图添加Scala签名(或骨架),那将对我(以及其他人)非常有帮助。例如:trait Trait2 extends Trait等等。 - dips
1
@VonC 翻译得太糟糕了(部分内容错误)。我会在接下来的几天内修复这个问题...也许晚了5年... Meike Massimow是谁? - Meiko Rachimow
@Meiko 当然,我会感激您的编辑。对于错误的名称表示抱歉。 - VonC

2
你可以尝试使用(实验性的)Dia2Scala 工具。此代码生成器使用的符号表示法基于Meiko Rachimow博士论文中的一种符号表示法(在VonC的答案中描述)。

看起来很有前途。但它能否从代码生成图表呢? - WeiChing 林煒清
@Wei-ChingLin 不,这只是一个单向工具:dia -> scala。我想编写一个Scala解析器可能会相当困难。 - monnef

1
刚刚测试了Green UML Eclipse插件。几个月前它无法工作,但使用Scala IDE夜间版本(Apr 2012),您可以获得某种类图。看起来很有前途。

1

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