UML类图上能显示类的可见性吗?

9

类的可见性是对象设计的重要组成部分。在几本UML书籍中,我没有看到任何展示非公共类的示例图表,也没有看到在Enterprise Architect等工具中展示类可见性的方式。虽然Enterprise Architect和其他工具允许您在元模型中设置类的可见性,但我还没有看到一种在图表中显示它的方法。


我认为UML标准没有提供可见性的特定符号,因为它是一种语言相关的特性。 - Heisenbug
感谢@Heisenbug。我能够在Enterprise Architect包图中看到类的可见性。这可能是在这个特定工具中查看它的唯一方法。我的下一步是审查UML规范的相关部分。 - Kevin Stephenson
2
我相当确定,在Enterprise Architect中,包图是查看元素可见性(又称作用域)的唯一方法。虽然你已经进行了侦探工作,但我不会将其发布为答案,请考虑自己这样做(并标记问题已回答),以供未来搜索者参考。 - Uffe
6个回答

1
根据UML规范v2.5 beta 2,不仅NamedElement而且PackageableElement也具有类型为VisibilityKind的visibility属性。
来自p48:
PackageableElement [Abstract Class] ..[snip].. Attributes - visibility : VisibilityKind [0..1] = public 如果PackageableElement被Namespace拥有,则必须指定其可见性。默认可见性为public。
Constraints - namespace_needs_visibility 命名空间拥有的PackageableElement必须具有可见性。 inv:visibility = null implies namespace = null
然而,我没有找到任何关于此可见性的符号指南。

0

UML以一种与编程语言无关的方式支持可见性,无论是在元模型中还是在表示中。

有一个名为VisbilityKind的枚举类型,在各个地方都被使用(参见UML 2.3超结构规范第7.3.5.5节第142页)。

在类图中,有多种方式来表示可见性。最常见的是使用“-”表示私有特性,“+”表示公有特性。例如:

----------------------------
| Class                    |
|--------------------------|
| +publicAttribute: Type   |
| -privateAttribute: Type  |
|--------------------------|
| +publicMethod()          |
| -privateMethod()         |
----------------------------

请参考规范第52页的图7.28 / 7.29以获取更多示例。

希望对您有所帮助。


1
你的回答涉及到类成员可见性,而不是类本身的可见性。 - Björn Pollex
@BjörnPollex 的可见性与其作用域相关,没有作用域时可见性就没有意义。类实例可以成为另一个类实例的成员,在这种情况下,它的可见性可以像这个答案中所示。 - SomeWittyUsername

0

我刚在UML 2.4.1基础设施中查阅了一下。在第95页的图10.3中,您可以看到类被定义为类型,该类型是命名元素,而命名元素又是元素。使用可见性包,如果命名元素属于命名空间,则具有在第88页9.21.1中定义的可见性。因此,如果您拥有可见性,则类具有可见性。您可以使用+ -#和〜(第89页)的常规符号。

VisualParadigm可以做到这一点。


0

0
在Eclipse中,您可以通过图标看到可见性。我的意思是,您有一个绿色的类图标,如果是私有的,则在顶部放置一个p。 如果选择该选项,则此图标也可在类图中看到。 希望这可以帮助您。

0
如果您使用构造型(例如<>)定义类,则可以将形状脚本分配给构造型。如果您指定装饰,这应该使用类的默认绘图,并添加您的装饰,这可以根据类的作用域属性进行条件化。
decoration X
{
  if(hasproperty("scope","public"))
    print("P");
}

这将在公共类的左上角打印一个 P。但是,您也可以使用图标。

不幸的是,我找不到一种将形状脚本分配给默认非构造化类的方法。有人知道如何做吗?


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