类可见性可以在UML类图上显示吗?

类可见性可以在UML类图上显示吗?,uml,class-diagram,enterprise-architect,class-visibility,Uml,Class Diagram,Enterprise Architect,Class Visibility,类可见性是对象设计的一个重要部分。在一些UML书籍中,我没有看到任何显示非公共类的示例图,也没有看到在EnterpriseArchitect和其他工具中显示类可见性的方法。EnterpriseArchitect和其他工具允许您在元模型中设置类的可见性,但我还没有找到在图表中显示这一点的方法。在Eclipse中,您可以在图标中看到可见性。我的意思是,你有一个绿色的类图标,如果是私有的,那么在顶部会有一个p。 如果选择该选项,此图标在类图中也可见。 希望有帮助。UML以编程语言中立的方式支持可见性,

类可见性是对象设计的一个重要部分。在一些UML书籍中,我没有看到任何显示非公共类的示例图,也没有看到在EnterpriseArchitect和其他工具中显示类可见性的方法。EnterpriseArchitect和其他工具允许您在元模型中设置类的可见性,但我还没有找到在图表中显示这一点的方法。

在Eclipse中,您可以在图标中看到可见性。我的意思是,你有一个绿色的类图标,如果是私有的,那么在顶部会有一个p。 如果选择该选项,此图标在类图中也可见。
希望有帮助。

UML以编程语言中立的方式支持可见性,包括元模型和表示

有一个名为VisibilityKind的枚举,在不同的地方使用,见第7.3.5.5节p142

在类图上,有各种方法来说明可见性。最常见的是使用“-”表示私有特性,使用“+”表示公共特性。例如:

----------------------------
| Class                    |
|--------------------------|
| +publicAttribute: Type   |
| -privateAttribute: Type  |
|--------------------------|
| +publicMethod()          |
| -privateMethod()         |
----------------------------
有关更多示例,请参见第52页的图7.28/7.29


hth.

我想您需要看一看

我刚刚在UML2.4.1基础设施中查找了它。图10.3 p。95您可以看到类被定义为一个类型,它是一个元素NamedElement。对于可见性包,NamedElement具有第9.21.1页中定义的可见性。88,如果它属于命名空间。所以类有可见性,如果你有可见性的话。您可以使用+-和~p的常用符号。89.


VisualParadigm可以做到这一点。

根据UML规范v2.5 beta 2,不仅NamedElement而且PackageableElement具有VisibilityKind类型的属性Visibility

第48页:

PackageTableElement[抽象类]

...[剪断]

属性

可见性:VisibilityKind[0..1]=公共如果PackageTableElement属于命名空间,则必须指定其可见性。默认可见性为“公共”。 约束条件

名称空间需要可见性 命名空间拥有的PackageTableElement必须具有可见性。 inv:visibility=null意味着名称空间=null
我还没有找到任何关于这种可见性的标记准则,但是如果你用一个原型定义你的类,那么你可以给原型分配一个形状脚本。如果仅指定装饰,则应使用类的默认图形,并添加装饰,装饰可以基于类的“范围”属性设置条件:

decoration X
{
  if(hasproperty("scope","public"))
    print("P");
}
这将在公共类的左上角打印一个p。然而,你同样可以有一个图标来代替


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

我认为UML标准并没有为可见性提供特定的符号,因为它是一种依赖于语言的特性。谢谢@Heisenbug。我能够在企业架构师包图上看到类的可见性。这可能是在这个特定工具中看到它的唯一方法。我的下一步是回顾UML规范的相关部分。我可以合理地确定,包图确实是在企业架构师中查看元素可见性(又称范围)的唯一方法。我不会把它作为答案,因为你已经损坏了侦探工作,但是请考虑自己做,并为未来的搜索者回答问题。你的答案属于类成员可见性,而不是类本身的可见性。@ BJ O.RNBORX可见性与某些范围有关,没有范围可见性没有意义。类实例可以是另一个类实例的成员,在本例中,可以看到它的可见性,如本答案所示。