0

Class diagram

The above shows a class diagram. There is doThis(obj: Class B) in Class A which takes an object of ClassB and will eventually call obj.operation1().

Should there be a link between Class A and Class B only for this reason? Or there is no need to link them and Class A can call operation1() using object of Class B?

4

2 回答 2

1

如果 A 保留对 B 的引用,则应链接 A 类和 B 类。但是,如果 A 仅在执行“doThis”期间知道 B,则不需要该链接。

于 2013-06-17T04:41:08.580 回答
1

类图中的链接可以是以下之一:

  1. Association及其子类型AggregationComposition
  2. 概括
  3. 实现
  4. 依赖

以上所有链接都反映在代码中。我将在java中给出一些示例:

关联 如果关联是单向的(链接有一个指向 B 的箭头),那么类 A 有一个类 B 的字段。

public class A {
  B b;
}

如果关联是双向的(链接中没有箭头),那么 B 类也有 A 类的字段。

public class B {
  A a;
}

概括

在这种情况下,A 继承了 B。

public class A extends B {
   //class implementation

实现

在这种情况下B,必须是一个接口,以及A一个实现它的类。

public class A implements B {
   //class implementation

依赖

在这种情况下,A 类依赖于 B 类。这是什么意思?这意味着B类以某种方式存在于A类的代码中。因此,如果A类和B类在不同的包中,则A的类文件中有B类的import语句

import somepackage.B;

public class A { 
   void someMethod() {
      B b = ...
   }
}

具体的图呢? 具体的图表没有指定关联的可导航性,即没有说明哪个类保持对另一个的引用。通常,当没有明确的可导航性规范时,会暗示双向关联。具有类之间双向关联的图转换为:

public class A {
  B b;
  public void doSomething(B obj) {
     obj.operation1();
  }
}

public class B {
  A a;
  public void operation1() {
     //some code in here...
  }
} 

如果类 A 没有类 B 的字段,但它只在doSomething(b)方法中使用 B 作为参数,则不存在关联,而是依赖。所以你应该用依赖链接替换关联链接,你的图表将是:

依赖

是否应该从图中省略依赖关系?

您不需要在 UML 图中显示两个类之间的每个链接。UML 是一种通信方式,因此您可以省略任何不会为正在通信的消息增加价值的内容。在具有更多类的更复杂的场景中,您很可能不想呈现一个类的所有依赖关系或关联,而只想呈现您认为重要的那些。否则图表会充满链接并且变得不可读。

因此,如果您认为 A 类对 B 类的依赖并不重要,您可以在图表中省略它(因为它也出现在doSomething(b)方法的签名中。通常您不想展示每个编译图中的依赖关系,但更重要的是。

另一方面,如果这种关系是您想要传达的信息的一部分,那么您应该将它包含在图表中。在这种情况下,我发现用有意义的构造型来装饰依赖链接非常有用,它描述了依赖的类型。类似的东西<<invokes_operation1>>会更具描述性,特别是如果operation1()是 B 类功能的重要部分。

于 2013-06-17T11:49:08.607 回答