UML:如何在Java中实现关联类

2022-09-01 15:35:50

我有这个UML协会类。请注意:水平线是实线,垂直线是虚线。

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

我理解这种关系,但是在实现此UML到代码时遇到了一些问题。我可以实现类和类到代码之间的关系。这是我的代码:StudentCourse

class Student {
  Vector<Course> b;
}

class Course {
   Vector<Student> a;
}

但是,在课堂上,我不太了解如何在代码中使用这个类。它是类 和 的属性吗?因此,如果这是真的,那么代码将是:TranscriptStudentCourse

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

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

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

谢谢:)


答案 1

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

如果课程包含有关学生参加课程的方式的信息(例如,其订阅课程的日期),您可以按如下方式实现它:Transcript

class Student {
    Set<Transcript> transcripts;
}

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

class Course {
    Set<Transcript> transcripts;
}

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

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

如果 不包含任何信息,则可能是为了模拟如何在数据库表中映射这些类,其中在两个表之间建立多对多关联的唯一方法是使用包含两个关联表的 ID 的联接表。Transcript


答案 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;
}

推荐