I have this UML Association class. Note that: horizontal line is a solid line and the vertical line is a dashed line.
--------- ---------
| |*(a) *(b)| |
| CLASS |________________| CLASS |
|STUDENT | | | COURSE |
--------- | ---------
|*(c)
______|______
| |
| |
| CLASS |
| TRANSCRIPT |
|_____________|
I understand this relationship but I have met some problems when implement this UML to code. I can implement relation between class Student
and class Course
to code. Here is my code:
class Student {
Vector<Course> b;
}
class Course {
Vector<Student> a;
}
But, at class Transcript
, I don't understand so much, how to use this class in code. Is it the property of both class Student
and Course
. So, if that's true then the code will be:
class Student {
Vector<Course> b;
Vector<Transcript> c;
}
class Course {
Vector<Student> a;
Vector<Transcript> c;
}
Is it true? If this is wrong, please teach me how to implement this UML.
Thanks :)
First of all, don't use Vector, as it's an old class that shouldn't be used anymore for more than 10 years. Use either a Set
or a List
.
If the Transcript
class contains information about the way a student attends a course (for example, the date of its subscription to the course), you could implement it like this:
class Student {
Set<Transcript> transcripts;
}
class Transcript {
Student student;
Course course;
Date subscriptionDate;
}
class Course {
Set<Transcript> transcripts;
}
That doesn't prevent you from providing a method in Student that returns all his courses:
public Set<Course> getCourses() {
Set<Course> result = new HashSet<Course>();
for (Transcript transcript : transcripts) {
result.add(transcript.getCourse());
}
return result;
}
If Transcript
doesn't contain any information, then it's probably there to model how these classes would be mapped in database tables, where the only way to have a many-to-many association between two tables is to use a join table holding the IDs of the two associated tables.