在 Java 中为学校建模
Modelling a School in Java
我一直在尝试为 Java 中的一所学校建模(没有主要方法,只有属性)。如何将 30 名学生和一名教师分配到一个 class 房间?(可以不用 main 方法吗?)
public class Person{
private String name;
private String surname;
private String age;
private String job;
}
public class Teacher extends Person{
private String job = "teacher";
}
public class Student extends Person{
private String job = "student";
}
private class Classroom{
// 1 teacher and max. 30 students per classroom
}
我的最佳猜测:使用数组?
private Student[] students = new Student[30]; // there can be less students so would this be okay?
private Teacher classroomTeacher;
最后一个问题,使用“扩展”来创建教师和学生 class 是一种好的做法吗?如果没有,我该如何改进它?如果是这样,Person,Student,Teacher应该在同一个文件中还是分开?
public class School{
private enum schoolTypes{
ArtSchool,
ScienceSchool,
SportsSchool,
}
private Classroom classrooms;
}
如果我要创建一个学校 class 并指定一个 class 可以拥有的学生人数,我会使用 ArrayLists 还是 Arrays 就足够了?
你已经掌握了基本思路,但我会考虑以下几点:
您正在混合实施模式。我要么使用枚举来标记作业(不是字符串),要么使用子类,但不能同时使用。我会更倾向于自己的子类化;只需放弃 job
字段,这是不必要的。
至于学生列表,我会将 ArrayList 子类化并简单地覆盖 add
和 addAll
以检查其自身的大小并在尝试添加超过限制时抛出异常。
你的教室会变成这样:
public class Classroom {
private Teacher teacher;
private List<Student> students;
public Classroom(Teacher teacher, List<Student> students) {
this.teacher = teacher;
this.students = new LimitedList(students, 30); //class you should make
}
}
为清楚起见,将 name
更改为 givenName
。参见 Wikipedia。
private String givenName;
private String surname;
年龄应该是一个整数,而不是文本。
private int age;
如果在 compile-time 处已知所有可能的工作,请使用 Java 强大灵活的枚举工具。参见 Oracle tutorial。
enum Job { TEACHER , ADMINISTRATOR , STUDENT }
但实际上,你不需要这份工作。您有教师和学生的子classes。所以注意到他们的工作是多余的。
选择您想去的路线:
Person
class 具有 job
类型 Job
枚举的成员字段。
- 子classes
Teacher
& Student
.
两条路线都有效,各有利弊。但不要将两者混为一谈。
您问的是:
is using "extends" to create teacher and student class a good practice?
是的,如果您选择上面两个项目符号中的第二个。
Classroom
应该是它自己的 class,而不是你标记的 private
。是的,你可以使用数组。但是使用 Java Collections framework 更加灵活和方便。
public Classroom
{
private Teacher teacher ;
private Set< Student > students ;
… add constructor
… add getters, and possible setters
}
您问的是:
would I use ArrayLists or would Arrays be enough?
一般最好使用List
、Set
等集合。当速度至关重要或内存有限时,请使用数组。
您问的是:
should Person,Student,Teacher be in the same file or separated?
是的,通常最好将每个 class 保存在自己的 .java
文件中。使用 IDE 可以非常轻松地在文件之间导航:IntelliJ、NetBeans、Eclipse .
create a School class
public class School
{
String schoolName ;
Administrator principal ;
Set< Classroom > classrooms ;
…
}
您问的是:
is it possible to do without a main method?
首先定义你的现实世界模型,就像你正在做的那样。决定你的“问题域”class的结构,例如学校、class房间、老师、学生等
main
方法是 运行 您的应用程序的入口点。这是您开始实例化对象的地方。您从用户、文件或数据库中获取输入,并使用该数据从您的 classes 中创建对象。
How do I assign 30 students and a teacher to a classroom?
在您的主要方法中,或稍后调用的某个方法中:
Set< Student > students = new HashSet<>() ;
students.add( new Student( … ) ) ;
students.add( new Student( … ) ) ;
…
Teacher teacher = new Teacher( … ) ;
Classroom classroom = new Classroom( teacher , students ) ;
您问的是:
specified the number of students a class can have
在 class 中设置学生人数限制是所谓的 data validation 的一部分。您必须为此编写代码,并在添加学生时检查限制。
Jakarta Bean Validation 框架可以帮助完成这项工作。 (对于实际工作,而不是简单的功课项目。)
我一直在尝试为 Java 中的一所学校建模(没有主要方法,只有属性)。如何将 30 名学生和一名教师分配到一个 class 房间?(可以不用 main 方法吗?)
public class Person{
private String name;
private String surname;
private String age;
private String job;
}
public class Teacher extends Person{
private String job = "teacher";
}
public class Student extends Person{
private String job = "student";
}
private class Classroom{
// 1 teacher and max. 30 students per classroom
}
我的最佳猜测:使用数组?
private Student[] students = new Student[30]; // there can be less students so would this be okay?
private Teacher classroomTeacher;
最后一个问题,使用“扩展”来创建教师和学生 class 是一种好的做法吗?如果没有,我该如何改进它?如果是这样,Person,Student,Teacher应该在同一个文件中还是分开?
public class School{
private enum schoolTypes{
ArtSchool,
ScienceSchool,
SportsSchool,
}
private Classroom classrooms;
}
如果我要创建一个学校 class 并指定一个 class 可以拥有的学生人数,我会使用 ArrayLists 还是 Arrays 就足够了?
你已经掌握了基本思路,但我会考虑以下几点:
您正在混合实施模式。我要么使用枚举来标记作业(不是字符串),要么使用子类,但不能同时使用。我会更倾向于自己的子类化;只需放弃 job
字段,这是不必要的。
至于学生列表,我会将 ArrayList 子类化并简单地覆盖 add
和 addAll
以检查其自身的大小并在尝试添加超过限制时抛出异常。
你的教室会变成这样:
public class Classroom {
private Teacher teacher;
private List<Student> students;
public Classroom(Teacher teacher, List<Student> students) {
this.teacher = teacher;
this.students = new LimitedList(students, 30); //class you should make
}
}
为清楚起见,将 name
更改为 givenName
。参见 Wikipedia。
private String givenName;
private String surname;
年龄应该是一个整数,而不是文本。
private int age;
如果在 compile-time 处已知所有可能的工作,请使用 Java 强大灵活的枚举工具。参见 Oracle tutorial。
enum Job { TEACHER , ADMINISTRATOR , STUDENT }
但实际上,你不需要这份工作。您有教师和学生的子classes。所以注意到他们的工作是多余的。
选择您想去的路线:
Person
class 具有job
类型Job
枚举的成员字段。- 子classes
Teacher
&Student
.
两条路线都有效,各有利弊。但不要将两者混为一谈。
您问的是:
is using "extends" to create teacher and student class a good practice?
是的,如果您选择上面两个项目符号中的第二个。
Classroom
应该是它自己的 class,而不是你标记的 private
。是的,你可以使用数组。但是使用 Java Collections framework 更加灵活和方便。
public Classroom
{
private Teacher teacher ;
private Set< Student > students ;
… add constructor
… add getters, and possible setters
}
您问的是:
would I use ArrayLists or would Arrays be enough?
一般最好使用List
、Set
等集合。当速度至关重要或内存有限时,请使用数组。
您问的是:
should Person,Student,Teacher be in the same file or separated?
是的,通常最好将每个 class 保存在自己的 .java
文件中。使用 IDE 可以非常轻松地在文件之间导航:IntelliJ、NetBeans、Eclipse .
create a School class
public class School
{
String schoolName ;
Administrator principal ;
Set< Classroom > classrooms ;
…
}
您问的是:
is it possible to do without a main method?
首先定义你的现实世界模型,就像你正在做的那样。决定你的“问题域”class的结构,例如学校、class房间、老师、学生等
main
方法是 运行 您的应用程序的入口点。这是您开始实例化对象的地方。您从用户、文件或数据库中获取输入,并使用该数据从您的 classes 中创建对象。
How do I assign 30 students and a teacher to a classroom?
在您的主要方法中,或稍后调用的某个方法中:
Set< Student > students = new HashSet<>() ;
students.add( new Student( … ) ) ;
students.add( new Student( … ) ) ;
…
Teacher teacher = new Teacher( … ) ;
Classroom classroom = new Classroom( teacher , students ) ;
您问的是:
specified the number of students a class can have
在 class 中设置学生人数限制是所谓的 data validation 的一部分。您必须为此编写代码,并在添加学生时检查限制。
Jakarta Bean Validation 框架可以帮助完成这项工作。 (对于实际工作,而不是简单的功课项目。)