我目前在用Code实现三元关联时遇到了一些麻烦。 我得到二进制的 但我不确定三元协会。
这是大学中的典型场景。
讲师可以为一个或多个学生教授一门学科
学生只能由一位讲师讲授一门学科
讲师只能教一个学生一个学科
这三个类之间存在三元关联。
下面的UML类图中显示的这三个类之间的关系以及多重性都存在
我已经在互联网上阅读了有关这方面的不同资料,找不到解决方法
如何实现这三个类之间的关联?要么, 通常,有什么方法可以实现类之间的关联(在Java中)?
答案 0 :(得分:2)
一如既往,这取决于。
实现关联类的通常方法是使用关联数组。在您的示例中,您将(最终)组合使用Lecturer
/ Subject
来访问Student
的列表。如果您的要求不同,则可以例如在提供Subject
时返回Student
/ Teacher
的列表。
使用数据库时,表Lecturer
中的主键为Subject
/ Student
/ Teaching
。这样可以像上面提到的那样进行单独选择。
我的帽子里有些伪代码:
class Teaching {
private Hash lectRef; // assoc. array
public void addTeaching(Lecturer lect, Student stud, Subject subj) {
if lectRef[lect.hash] == None { lectRef[lect.hash] = []; }
// if none, default an empty array here
// lect.hash is a unique hash code for the Lecturer object
lectRef[lect.hash].append((stud, subj);
// tuple of student/subject referenced
// if you need other fast results (e.g. subjects per student or the like) you need to hash them here too
}
public [(Stud, Subj)] studSubj (Lecturer lect) {
return lectRef[lect.hash];
// returns the array of student/subject tuples
}
// add other result operations like subjects per student as needed
}
答案 1 :(得分:1)
根据阿玛丹(Amadan) 我正在准备答案
由于我是Java新手,语法可能不正确 如果此解决方案有误,请纠正我
//Lecturer class
class Lecturer{
private List<Klass> klassList;
public List<Klass> getKlasses(Klass klassList){
retrun klassList;
}
public List<Klass> addKlasses(Klass klassList){
this.klassList = klassList;
}
teachStudents(){
klassList = getKlasses()
for (int i = 0; i < klassList.size(); i++) {
(klassList.get(i)).teachSubjectToStudent();
}
}
}
//Student class
class Student{
private Klass klass;
private List<Subject> learnedSubjectList;
public void learn(Subject subject){
learnedSubjectList.add(subject);
}
}
//Subject class
class Subject{
private Klass klass;
}
//Klass class
class Klass{
private Lecturer lecturer;
private Student student;
private Subject subject;
Klass(Lecturer lecturer,Student student,Subject subject){
private this.lecturer = lecturer;
private this.student = student;
private this.subject = subject;
}
//implimentation of how subject was teach to a student
public void teachSubjectToStudent(){
this.student.learn(subject)
}
}
//this class is use for code execution
public class TestA {
public static void main(String[] args) {
Lecturer lecturer = new Lecturer();
Subject subject = new Subject();
Student student1 = new Student();
Student student2 = new Student();
Student student3 = new Student();
Klass klass1 = new Klass(lecturer,student1,subject);
Klass klass2 = new Klass(lecturer,student2,subject);
Klass klass3 = new Klass(lecturer,student3,subject);
List<Klass> list = new ArrayList<Klass>();
list.add(klass1);
list.add(klass2);
list.add(klass3);
//create association link between lecturer class and klass class list
lecturer.addKlasses(list);
}
}
答案 2 :(得分:-1)
通常,您会自行将关联本身建模为实体(不能称为其类Class
,因为java.lang.Class
已经采用了该类;通常人们将此类命名为{ {1}},很明显它指的是;您也可以使用Klass
。然后,您只有Teaching
和Klass
,Teacher
和Klass
,Subject
和Klass
之间的二进制关联。在这种情况下,Student
和Teacher
根本没有关联,除非通过与Student
的参与(与其他对相似)间接地关联。