Java での 1 対 1 の関連付けの実装について問題があります。たとえば、次のクラス ダイアグラムを考えてみましょう。
私は次のように実装します:
public class Student{
private AttendanceRole attendance;
public Student(AttendanceRole attendance){
this.attendance=attendance;
addTwoWayLink(this); //creates the two-way link between objects
}
public void setAttendanceRole(AttendanceRole a){ //if a students changes from
attendance = a; //part time to full time
}
}
public class AttendanceRole{
private Student student;
void addTwoWayLink(Student student){
this.student=student;
}
}
問題は次のとおりです。
1) 学生オブジェクトを作成し、学生の出欠ロールを変更したいとします。この場合、setAttendanceRole メソッドを呼び出します。しかし、AttendanceRole オブジェクトをパラメーターとして渡す必要があります。これは 1 対 1 の関係であるため、i が与えるパラメーターには学生も関連付けられています。だから、これは問題です。また、これは 1 対 1 の関連付けであるため、学生へのリンクがないと、AttendanceRole オブジェクトを作成できません。最初に学生オブジェクトを作成してそのコンストラクターを呼び出そうとすると、同じ状況が発生します。パラメータ値として null を指定することもできますが、この場合、1 対 1 の関係の制約を損なうことはありませんか? 私はそれについて何ができますか?
2) また、学生オブジェクトを作成し、AttendanceRole を設定できるように、このクラスを設計します。つまり、AttendanceRole オブジェクトを作成してその生徒を設定することはできません。これは悪い考えですか?または、どのオブジェクトを最初に作成するかはデザイナー次第です。
ありがとうございました