对于以下Java类,我不确定A&C之间以及B&C之间的多重性是什么...

仅供参考:A类和B类可以调用此通用C类中的某些或所有方法。

我猜:


A级(1)----- C级(*)
B级(1)----- C级(*)


如果我在这里弄错了,请纠正我。

还有一件事,(1)和(2)什么时候是多对多关系?

class A{
    //methods in Class A only involve Ball objects
    methodA(){
        C<Ball> newObj=new C<Ball>();
        newObj.method1();
    }
}

class B{
    //methods in Class B only involve Tennis objects
    methodB(){
        C<Tennis> newObj=new C<Tennis>();
        newObj.method1();
    }
}

class C<T>{
    method1(){
        //implementation here
    }
    method2(){
        //implementation here
    }
    method3(){
        //implementation here
    }
}

最佳答案

通常,您会问,一个Y实例可以存在X个不同的实例,反之亦然?在您的示例中,在类图上下文中谈论多重性完全没有道理,原因有两个:


您的C不维护对任何关联的A或B的引用。因此,充其量是单向关系。谈到多重性时,这是可以的,尽管在您的特定示例中没有(对于多重性没有意义,请参见第2点)。就多重性而言,忽略点2,A具有正1 C,B具有正1 C,C具有0 A和0B。
您的关系采用局部变量的形式。因此,它实际上不是类级别的关系。只要A(或B)的方法返回,这种关系就会消失。因此,为这些类建立关联图并不一定有意义。呼叫者/被呼叫者图,也许是,但是一般关联,没有。


您的示例(其中A在某些方法中本地使用C)是一个依赖关系而不是关联的示例。 UML通常为此使用虚线(尽管某些口味可能有所不同),并且多重性对此不起作用(对质量较差的情况感到抱歉):



您的示例进行了一些小的更改,这些更改会使多重性变得重要。例如,将C保留不变,但将A更改为:

class A {
   C<Ball> c = new C<Ball>();
   ...
   methodA(){
       c.method1();
   }
}


在这种情况下,A恰好具有一个C,而C则具有零个A(它是单向的)。 UML看起来像(再次对质量感到抱歉):



也就是说,如果您进行上述更改,它将变成零对一关系。这是单向的,因为C不了解A。


  还有一件事,(1)和(2)什么时候是多对多关系?


当A存储到多个C的链接,而C存储到多个A的链接时,这是多对多关系。例如,学生上大学课程。每门课程包含多名学生,每位学生修读多门课程。例如。:

class Student {
    Collection<Course> courses;
}

class Course {
    Collection<Student> students;
}

09-26 06:32