コードはMarkdown記法を使って直接記載していただけるとありがたいです。
コピーできるので、検証したり回答に用いたりすることが容易になります。
長くなるなら「Details - 折りたたみ」も出来るので試してみてください。
回答例1
まずは、単純な実現方法です。
教えた回数lectureCount
はTrainee
クラスのメンバ変数なので、Trainee
クラスのインスタンスを操作することで回数を増やすことができます。
public class Trainee {
- public void question(String trainerName) {
+ public void question(Trainer trainer) {
- System.out.println("「" + this.traineeName + "は" + trainerName + "に" + this.studies + "を教えてもらった」");
+ System.out.println("「" + this.traineeName + "は" + trainer.trainerName + "に" + this.studies + "を教えてもらった」");
this.questionCount += 1;
+ trainer.lectureCount += 1;
}
}
ただし、あくまで「出来る」というだけで、設計としては良いものではありません。
数えた回数は研修担当が管理しているものですから、カウントアップのルールは研修担当が決めたいはずです。しかし、上のコード例では新入社員が操作することが出来てしまいます。
public class Trainee {
public void question(Trainer trainer) {
trainer.lectureCount += 1000; // 🤔
}
}
回答例2
回答例1の問題をふまえて少し変更してみます。
Trainer
クラスにanswer
メソッドを追加して、そこで数えた回数をカウントアップします。
public class Trainer {
- int lectureCount = 0;
+ private int lectureCount = 0;
+ public void answer() {
+ System.out.println("「" + this.trainerName + "は新入社員の質問に答えた」");
+ lectureCount += 1;
+ }
}
public class Trainee {
public void question(Trainer trainer) {
System.out.println("「" + this.traineeName + "は" + trainer.trainerName + "に" + this.studies + "を教えてもらった」");
this.questionCount += 1;
- trainer.lectureCount += 1;
+ trainer.answer();
}
}
このようにすることで、研修担当は教えたときのアクションを管理できます。
カウントアップのルールが変更になっても、新入社員が気にする必要はありません。
研修ということですので、もしかしたら回答例2は踏み込んだ内容だったかもしれません。
その場合は細かいことは忘れて結構ですが、実際に開発するときは変更に強い設計を考える必要があります。