什么是多样性

时间:2014-11-23 15:39:14

标签: java uml

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

仅供参考:A类和B类可以调用此通用C类中的部分或全部方法。

我的猜测:

  1. A类(1)----- C类(*)
  2. B类(1)----- C类(*)
  3. 如果我在这里弄错了,请纠正我。

    还有一件事,它是什么时候(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
        }
    }
    

2 个答案:

答案 0 :(得分:2)

Multiplicity为您提供有关可以创建特定类型,属性值或要链接的已连接实例的实例数的信息。它与操作调用无关。 例如,如果关联端的多重性为[0 .. *],则表示连接到关联的另一侧的一个实例可以连接零个或多个实例。

A-C [0 .. *] = A的一个实例从零到无限的C连接实例。

答案 1 :(得分:2)

一般情况下,您会问, Y 的单个实例可以存在多少个不同的 X 实例,反之亦然?在您的示例中,在类图上下文中讨论多重性并不完全有意义,原因有两个:

  1. 您的C不会保留对任何关联的A或B的引用。因此,充其量只是一种单向关系。说到多重性时这是可以的,尽管不是在你的特定例子中(多重性没有意义,见第2点)。就多重性而言,忽略点2,A恰好为1 C,B恰好为1 C,C为0 A和0 B.

  2. 您的关系采用局部变量的形式。因此,它实际上不是一个阶级关系。一旦A(或B)的方法返回,该关系就消失了。因此,为这些类建立关联图并不一定有意义。也许是一个来电者/被调用者图,但是一般的关联,没有。

  3. 您的示例,其中A在其某些方法中本地使用C,是依赖的示例,而不是关联。 UML通常使用虚线(尽管某些风格可能不同),并且多重性不会发挥作用(对于质量差的原因):

    enter image description here

    您的示例中有一些小的更改会使多样性相关。例如,将C保留为原样,但将A更改为:

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

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

    enter image description here

    也就是说,如果你做出上述改变,它就变成了一对一的关系。它是单向的,因为C不知道A.

      

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

    当A存储指向多个C的链接时,它是多对多关系, C存储指向多个A的链接。例如,学生到大学的课程。每门课程都包含多个学生,每个学生都需要多门课程。 E.g:

    class Student {
        Collection<Course> courses;
    }
    
    class Course {
        Collection<Student> students;
    }