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的连接表两个相关的表.
我知道这个问题很老了,但是我比在关联类中嵌入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)
| 归档时间: |
|
| 查看次数: |
26696 次 |
| 最近记录: |