1人につき「クラス」があり、実際にはデザインが制限されています。学生や教師を追加する場合は、新しいクラスを作成する必要があるためです。
クラスはテンプレートであり、各テンプレートは「クラスのインスタンス」、具体的には「インスタンス」を構築するために使用されます。通常、1つのテンプレートは複数のクラスを構築するために使用されます(ただし、は必要ありません)。一度使用する(またはまったく使用しない)場合は、クラスを複数回使用する必要はありません。
だから、あなたが見ることができるよう、スタッフと学生間の重複の多くがあるように起こっている
public class Student {
private String name;
public Student(String name) {
this.name = name;
}
public string getName() {
return this.name;
}
}
public class Staff {
private String name;
public Staff(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
行うことができます。 getName()
、getAge()
、getPhoneNumber()
、getAddress()
などを簡単に適用することができます。この構造では、Student
とStaff
の両方のメソッドを複製する必要があります。
スタッフと学生の共通点は何ですか?それらはいずれもPeople
であり、一般的な方法の多くはすべての人に共通しています。
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
public Staff extends Person {
public void teachClass(Class class) {
...
}
}
public Student extends Person {
public void attendClass(Class class) {
...
}
}
それはスタッフが学生でないことを暗示するように、この設計はまた、他の問題を作成し、学生はスタッフメンバーではありません。現実世界では、スタッフが授業に参加することがあり、生徒は教師の役割を担うことができます(教師の補佐官と考える)。
実際、最も柔軟性の高い方法は、学生とスタッフの間の構造的差異を作成しないため、2つの能力によって区別します。
public class Person {
public Person(String name) {
...
}
public void canTeach(Course course) {
teaching.add(course);
}
public void attending(Course course) {
attending.add(course);
}
public boolean isStaff() {
return !teaching.isEmpty();
}
public boolean isStudent() {
return !attending.isEmpty();
}
}
しかし、この構造は、クラスで提示されている、そしてそれはあなたが本当に相続について学ぶことになっているレッスンをサイド手順例とは根本的に異なります。
これは私の最初の選択でしたが、本当に似たような7つのクラスを持っていることについては奇妙な感じがします。 – DaveQuinn
@PMMPまあ、どれくらい似ていますか?この設計は、互いに依存しないようにする。あまりにも緊密に結合されていると彼らはあなたのシステムを再設計する必要があります変更します。 – Aidanc
たとえば、Studentクラスをとります。 2つのサブクラスは、学部とマスターです。このシステムの目的のために、彼らの唯一の違いは、借りることができる本の数です。 – DaveQuinn