【问题标题】:UML class diagram dependency or associationUML 类图依赖或关联
【发布时间】:2018-03-12 15:11:29
【问题描述】:

我不太确定如何区分在某些情况下我应该将关系定义为依赖关系还是关联关系。

例如,

class AttendanceSheet {
    Map<String> students;
    boolean[] attend;

    public void addStudent(Student s)
    {
        students.add(s.getName(),s.getStudentNumber());
    }

    public void checkAttendance(String name) { //... }
}

class Student {
    private String name;
    private int staffNumber;
    //more information such as address, age, etc..

    Student(String n, int sn)
    {
        name = n;
        studentNumber = sn;
    }

    public String getName()
    {
        return name.clone();
    }

    public String getStudentNumber()
    {
        return studentNumber;
    }
}

对于这种情况,Student 和 Association 是否有关联或依赖关系? 这是因为我不确定关联是否必须具有对象的实际引用,或者仅具有可以到达对象的某些信息就足够了(因为学生 ID 和编号足以知道找出哪个学生对象)正在指向)。

【问题讨论】:

    标签: uml class-diagram


    【解决方案1】:

    在您的情况下,&lt;&lt;uses&gt;&gt; 就足够了,因为您在 AttendanceSheet 中没有 Student 类型的实际属性。

    附带说明:不使用对象引用而只使用 studentNumber 是 - 至少可以说 - 一个奇怪的设计。但我不知道上下文。

    【讨论】:

    • 这可能很奇怪,因为我只是为了明白这一点而编造了这个例子。还是谢谢!
    • 我明白了 :-) 作为第二个旁注:不需要刻板印象,您可以使用简单的依赖项。在讨论简单的依赖和&lt;&lt;uses&gt;&gt; 刻板的依赖之间的区别时,人们可能会变得哲学。
    【解决方案2】:

    在业务级别上,这些对象是相关的,但没有单一的首选方法来绘制这种关系。

    请参阅UML specification 的第 9.5.4 节了解有关该主题的更多详细信息,尤其是图 9.12

    具体来说,这两个符号在语义上是等价的(我忽略了不相关的细节):

    在第一个保持可追溯性的方法中,您可以像以前一样使用显式的依赖

    也可以将students 视为共享聚合,但它也可能被认为是矫枉过正。没有必要,只是显示答案完整性的可能性。

    您也可以考虑合格的关联来表明对Student 的引用是基于它们的特定属性。这几乎最接近您的需求。抱歉,我不知道如何在我的工具中实现这种表示法,但是您可以在上述规范的第 11.5 节的图 11.37 中找到更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多