对于以下 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
}
}
最佳答案
一般来说,您会问,X 的单个实例可以存在多少个不同的Y 实例,反之亦然?在您的示例中,在类图上下文中讨论多重性并不完全有意义,原因有二:
您的 C 不维护对任何关联的 A 或 B 的引用。因此,充其量,它是一种单向关系。在谈到多重性时这是可以的,尽管在您的特定示例中不是这样(对于多重性没有意义,请参见第 2 点)。就多重性而言,忽略点 2,A 正好有 1 个 C,B 正好有 1 个 C,C 有 0 个 A 和 0 个 B。
您的关系采用局部变量的形式。因此,它并不是真正的类(Class)关系。一旦 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。
One more thing, when is it a many-to-many relationship for both (1) & (2)?
当 A 存储到多个 C 的链接时,和 C 存储到多个 A 的链接时,这是一个多对多关系。例如,学生在大学学习类(class)。每门类(class)包含多个学生,每个学生选修多门类(class)。例如:
class Student {
Collection<Course> courses;
}
class Course {
Collection<Student> students;
}
关于java - 什么是多重性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27090756/