对于以下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;
}