UML:如何在Java中实现关联类(UML: how to implement Associatio

2019-07-03 23:00发布

我有这样的UML关联类。 需要注意的是:水平行是实线和垂直线为虚线。

 ---------                  ---------
|         |*(a)        *(b)|         |
| CLASS   |________________|  CLASS  |
|STUDENT  |     |          |  COURSE |
 ---------      |           ---------
                |*(c)
          ______|______
         |             |
         |             |
         |  CLASS      |
         | TRANSCRIPT  |
         |_____________|

我理解这种关系,但我已经遇到了一些问题的时候实现这个UML代码。 我可以实现等级之间的关系Student和班级Course代码。 这里是我的代码:

class Student {
  Vector<Course> b;
}

class Course {
   Vector<Student> a;
}

但是,在班级Transcript ,我不明白这么多,如何在代码中使用这个类。 它是两个阶级的财产StudentCourse 。 所以,如果这是真的,那么代码将是:

class Student {
  Vector<Course> b;
  Vector<Transcript> c;
}

class Course {
  Vector<Student> a;
  Vector<Transcript> c;
}

是真的吗? 如果这是错误的,请教我如何实现这个UML。

谢谢 :)

Answer 1:

首先,不使用矢量,因为它不应该再使用了10年以上的老班。 使用一个SetList

如果Transcript类包含的方式参加学生的课程信息(例如,它的订阅课程的日期),你可以实现这样的:

class Student {
    Set<Transcript> transcripts;
}

class Transcript {
    Student student;
    Course course;
    Date subscriptionDate;
}

class Course {
    Set<Transcript> transcripts;
}

这并不妨碍你在提供学生一个方法,返回他的所有课程:

public Set<Course> getCourses() {
    Set<Course> result = new HashSet<Course>();
    for (Transcript transcript : transcripts) {
        result.add(transcript.getCourse());
    }
    return result;
}

如果Transcript不包含任何信息,那么它可能有模型如何将这些类将在数据库表中,其中唯一的办法有两个表之间的许多一对多关联映射是使用一个连接表持有的ID的两个相关联的表。



Answer 2:

我知道这个问题是很老,但我有办法不是嵌入在关联类n..1关系更方便:

public class Transcript {
    //Transcript's properties
} 

public class Course {

    private Map<Student, Transcript> transcriptsByStudent;
}

public class Student {

    private Map<Course, Transcript> transcriptsByCourse;
}


Answer 3:

我想补充的,在你的模型,你就表示关联类多样性。 这是不必要的,因为关联的关联本身,和原来的两个类的多重关系将满足。



文章来源: UML: how to implement Association class in Java