UML:如何在Java中实现Association类

hqt*_*hqt 18 java uml associations

我有这个UML Association类.注意:水平线是实线,垂直线是虚线.

 ---------                  ---------
|         |*(a)        *(b)|         |
| CLASS   |________________|  CLASS  |
|STUDENT  |     |          |  COURSE |
 ---------      |           ---------
                |*(c)
          ______|______
         |             |
         |             |
         |  CLASS      |
         | TRANSCRIPT  |
         |_____________|
Run Code Online (Sandbox Code Playgroud)

我理解这种关系但我在实现这个UML代码时遇到了一些问题.我可以实现类Student和类之间的关系Course来代码.这是我的代码:

class Student {
  Vector<Course> b;
}

class Course {
   Vector<Student> a;
}
Run Code Online (Sandbox Code Playgroud)

但是,在课堂上Transcript,我不太了解,如何在代码中使用这个类.它是属于Student和否的属性Course.所以,如果这是真的那么代码将是:

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

class Course {
  Vector<Student> a;
  Vector<Transcript> c;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢 :)

JB *_*zet 32

首先,不要使用Vector,因为它是一个不应该再使用超过10年的旧类.使用a Set或a List.

如果Transcript课程包含有关学生参加课程的方式的信息(例如,订阅课程的日期),您可以像这样实施:

class Student {
    Set<Transcript> transcripts;
}

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

class Course {
    Set<Transcript> transcripts;
}
Run Code Online (Sandbox Code Playgroud)

这并不妨碍您在Student中提供返回其所有课程的方法: 

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

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


Ale*_*aza 5

我知道这个问题很老了,但是我比在关联类中嵌入n..1关系要方便得多:

public class Transcript {
    //Transcript's properties
} 

public class Course {

    private Map<Student, Transcript> transcriptsByStudent;
}

public class Student {

    private Map<Course, Transcript> transcriptsByCourse;
}
Run Code Online (Sandbox Code Playgroud)