【问题标题】:UML relationship of class and object it creates inside the creation of another object?它在另一个对象的创建中创建的类和对象的 UML 关系?
【发布时间】:2020-10-01 01:17:53
【问题描述】:

例如在java中:

public class App {

    public void method() {

        Object1 o1 = new Object1(new Object2(parameters));
    }

}

我知道 App 和 Object1 有组合关系。

但是 App 和 Object2 呢?也是作曲吗?

【问题讨论】:

标签: java uml instantiation class-diagram


【解决方案1】:

在方法中使用类不足以建立关联

您的类 App 没有类 Object1Object2 的字段。它只是在方法的实现中使用Object1Object2。这不足以建立关联:AppObjectX 之间没有概念上的关系;这只是一个实现细节。而且由于组合是一种特殊的联想,所以也不存在组合。

使用类意味着依赖

由于您的App 使用Object1Object2,因此有一个«use» dependencyApp 需要知道这些类。你可以用一个开放的虚线箭头来显示这种依赖关系。

但是,您示例中的依赖关系仅在方法实现级别,而不是在类本身级别。您可以以其他方式实现该方法。因此,我建议不要在您的模型中显示这种不稳定的依赖关系。如果类定义本身将使用这样的对象(例如,如果方法将返回 ObjectX 或使用 ObjectX 参数),则建议使用依赖关系。

术语:并非所有作品都是作品!

如前所述,这里没有作曲。然而,这个词是模棱两可的:

  • 它可能意味着object compostion。这只是关于具有另一个类的字段的对象。
  • 它可能意味着UML composition。这是一种具有专有所有权的特殊关联

【讨论】:

  • 谢谢@Christophe。 “因此,我建议不要在您的模型中显示这种不稳定的依赖关系”关于它是“不稳定的”;非易失的实现会不会变成App和Object1之间的实际组合关系?
  • @AMoses 不,我使用术语“volatile”来表示实现可以独立于类的结构特征而改变。您的方法实现描述了类的行为,而类图描述了独立于行为的类的结构。
  • UML 2.5 没有«use»,只有Usage。这是遗产,不是吗?
  • @qwerty_so 你真的让我犹豫了。我认为“使用依赖”仍然在虚线依赖线上标有«use» 标签。我更喜欢在 guillemet 之间提供即用型关键字,而不是在我的回答中提供没有 guillemet 的元模型元素。我不认为这是遗产,除非 UML 2.5.1 规范的第 746 页在我没有注意到的情况下被替换。
  • @qwerty_so 现在我重新投保了:第 39 页,有一个标题:“图 7.20 «使用»依赖关系的示例”;-)
猜你喜欢
  • 2019-12-03
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多