类图 - 链接是否有效?

时间:2013-06-17 04:19:51

标签: uml class-diagram

Class diagram

以上显示了一个类图。在A类中有doThis(obj:Class B),它接受ClassB的对象并最终调用obj.operation1()。

仅因为这个原因,A类和B类之间是否存在联系?或者没有必要链接它们,A类可以使用B类对象调用operation1()?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

  1. Association及其子类型AggregationComposition
  2. Generalization
  3. Realization
  4. Dependency
  5. 以上所有链接都反映在代码中。我将在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的字段,但它只使用B作为doSomething(b)方法中的参数,那么就没有关联,而是依赖关系。所以你应该用关联链接替换关联链接,你的图表将是:

    dependency

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

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

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

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