【问题标题】:Private nested Java class in UML diagramUML图中的私有嵌套Java类
【发布时间】:2014-11-26 10:17:53
【问题描述】:

我有一个关于 UML 的问题。我有一个类,它只包含一个带有私有访问修饰符的内部类 - 不能从其他任何地方访问......通常为了呈现内部类关系,我可以使用像这里这样的(+)关系(InnerOddIterator):

(取自http://www.uml-diagrams.org/nested-classifier.html

我在任何地方都没有找到任何关于如何清楚地强调这个类是私有的信息。你知道这种方法是否存在吗?如果是的话,我会很感激你在这里给我一些链接或什么?

为了清楚起见,一个示例代码:

public class DataStrucure {
     // fields, methods, etc
     private class InnerOddIterator{
          // ... 
     };
}

【问题讨论】:

  • 如果您觉得明确强调这个类是私有的很重要,请考虑使用诸如 > 之类的构造型。您只需记录您的刻板印象的含义,就可以了。刻板印象是扩展 UML 规范的“官方”方式,而关于它们的一点有时被忽略的是,任何人都可以使用它们以任何他们喜欢的方式扩展 UML。一些刻板印象(例如“>”)已进入普遍使用的事实并没有改变这一点。
  • 查看this post了解更多最新信息。

标签: java uml class-diagram nested-class


【解决方案1】:

从 UML 的角度来看。如果分类器(类也)嵌套在其他类中,则嵌套类起命名空间的作用。在这种情况下,嵌套类在上下文命名空间中隐藏(私有)。这意味着,您的图表隐式定义了私有内部类定义。

这是 UML 上层结构部分结构化分类器的部分定义:

“一个类充当其范围内定义的各种分类器的命名空间,包括类。 分类器将分类器的可见性限制在包含类的命名空间范围内,并用于 信息隐藏的原因。嵌套分类器的使用与包含类中的任何其他分类器一样。”

【讨论】:

  • 我一直在研究这个。 OP 图中的“锚”符号在 1.4 中指定,但在 2.x 中没有指定。我对命名空间元模型进行了一些分析,看起来要走的路是将命名空间属性放在包含类上,在包含类的关联端放置一个组合菱形,然后将 {subsets namespace} 属性放在嵌套类结束。子集属性实现了此引用描述的可见性。请参阅this 了解更多信息。
  • “circle-plus”符号在 UML 2.* 中仍然有效。 UML 2.5.1 规范的第 7.4.4.1 节说:合规工具可以选择允许在子条款 12.2.4 中定义的“circle-plus”表示法来显示包成员资格,也可用于显示其他类型命名空间中的成员资格(例如例如,显示嵌套分类器)。
【解决方案2】:

首先:您的代码中有一些内容并要求使用 UML 表示。但是,恕我直言,您应该反过来看:UML 思想如何在代码中表示。 (一些编程语言甚至不提供私有嵌套类...)。

至于私有嵌套类:我建议使用组合。它比Association强,但不如继承强。没有它的作曲家,组合类就不能存在。几乎完全是一个私有嵌套类。

图取自http://www.uml-diagrams.org/association.html

【讨论】:

  • “一些编程语言甚至不提供私有嵌套类”——好点,对吧...我添加了 Java 标记以更具体
  • 在Java中,如果嵌套的内部类可以使用this访问外部实例-它们最终绑定在一起-没有外部实例就不能存在。正如恕我直言,它完全是一个组合。
  • 顺便说一句,在 C# 中并非如此 - 没有自动绑定到外部实例 ...
  • @MartinMeeser 我同意你的逻辑,我赞成你的回答。但是请注意,并非软件开发社区中的每个人都同意实现组合的唯一方法是通过像你我这样的私有嵌套类。
【解决方案3】:

为了表明你的内部类是最好的,对我来说,是使用 - 如下所示的字符,但当然在这种情况下你会错过你的内部类的内部结构..

【讨论】:

    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多