是否有适用于Scala的UML工具。我提出这个问题的原因是它结合了函数式和面向对象的概念,因此我想知道这样的工具如何在UML图中表示函数。
这个帖子总结了任何想要表示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 (
attribute1
和attribute2
),除非可见性声明为private
(attribute3
)。如果已发布的属性被标记为一个stereotypeVar
,则它们是变量,有一个隐式setter (attribute2
)。Stereotypelazy
将实例变量标记为lazy(attribute4
)。
与 UML 中一样,泛型类通过抽象类型标记。使用 Scala 语言语法,可以为此类型(
EineKlasse
)声明上限和下限。可以使用结构化类型作为边界,其属性和方法由大括号括起来(EineKlasse2
)。方法的泛型类型参数由方括号括起来(operation
)。特征
特征显示为抽象类,并带有
trait
类型。抽象属性和方法以斜体显示(attribute2
,operation2
)。对于抽象属性,依赖关系箭头可以带上requires
类型的附加信息(Trait3
,attribute3
)。另外,self
类型用于自引用类型(Trait4
)。如果一个特征继承另一个特征,则继承会显示为继承箭头(Trait2
)。如果一个类扩展一个特征,则同样使用这种箭头类型(Klasse
)。为了强调特征的“混合”,继承箭头可以带上mixin
类型的附加信息(Klasse
)。单例对象
单例对象显示为类,并带有
singleton
类型。可能存在两个具有相同名称的类元素,实际上是拥有相应伴生类的单例对象。在这种情况下,依赖关系箭头带有hasA
类型的附加信息。
trait Trait2 extends Trait
等等。 - dips