【问题标题】:Does using an instance of a class inside of another class count as dependency or association?在另一个类中使用一个类的实例算作依赖还是关联?
【发布时间】:2023-03-06 13:44:01
【问题描述】:

我很难确定在另一个类中实例化一个类,然后使用它的一些方法在 UML 类图中算作依赖还是关联。例如:

public class Example {
    Thing thing = new Thing();

    public void method() {
            thing.doSomething();
    }
}

这种关联是因为示例“具有”事物吗?还是因为 Example 有一个“使用” Thing 才能正常工作的方法?

【问题讨论】:

  • 将其描述为“在另一个类中实例化一个类”并不是很准确。您在代码中显示的情况是一个类包含另一个类的实例,实例化实例并不暗示这一点。
  • 我的错,修正了标题,让它更准确。

标签: java class dependencies uml associations


【解决方案1】:

在 UML 中,您可以用ExampleThing 之间的关联 来表示它:

  • 纯粹主义者会建议dot notation 并在Thing 末端放置一个小点:这表明Example 拥有关联的末端。并非所有建模工具都支持这种表示法。
  • 由于Example 的实例总是知道Thing 的实例,但可能不是相反,因此您希望显示此关联可导航(在末尾打开箭头)。

关联意味着依赖。因此,您不应向图表添加冗余依赖项。没有关联的依赖看起来像:

public class Example {
    Thing thing = new Thing();             // Example is associated to Thing

    public void method(AnotherThing x) {   // Example depends on AnotherThing
            ...;
    }
}

【讨论】:

  • 如果我们改为在方法内部创建一个 Thing 实例,它会被视为依赖项吗?如果我理解正确,这意味着“事物”将变成一个局部变量,而 Example 类只有在使用该方法时才知道它。我说的对吗?
  • @PlzEnjoyGame 如果thing 是示例类的字段,无论您是否创建它,都将显示为关联:类图显示的是结构而不是动态行为。但是,如果您在类中没有 Thing 字段,但仍使用 Thing 作为参数、局部变量或返回事物,那么您将有一个依赖项(如果类创建它们,则为 «Create» 依赖项)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多