目录
#创作原因
使用自己已经学习的面向对象知识,针对学生管理系统编写简易面向对象分析报告
要求:
对于Student
类,我们可以添加一个toString()
方法来打印学生的信息:
1. 案例中哪里体现出的封装性及其好处?
2. 案例中的setter/getter模式与封装性
什么是setter/getter模式?怎么自动生成?
3. 案例中某些类的toString()方法
简述toString()方法从哪里来?toString方法有什么用?toString一般应包含什么内容?
4. 案例中常见的工具类
简述案例代码中使用了哪些工具类。
工具类名1,作用概述,常见方法(入参、返回参数、功能)
工具类名2,作用概述,常见方法(入参、返回参数、功能)
5. 案例中的面向对象设计
5.1 尝试用一段话描述案例所解决的问题。找到其中的名词与动词。
5.2 如果让你设计,根据上面的分析你会抽象出什么类?各具备什么功能?
1. 封装性及其好处
在给出的学生管理系统代码中,封装的主要体现在Student类和StudentManagementSystem类上。Student类封装了学生的一些属性和行为,如姓名、学号、专业和GPA等。这些属性都被设置为私有(private),然后通过公有的(public)setter和getter方法来访问和修改。这种做法的好处在于,它保护了对象的内部状态,防止直接访问和修改,从而增加了代码的健壮性和可维护性。
例如,如果我们试图直接访问Student的name属性并修改它,我们将会收到编译错误。相反,我们必须使用setName()方法来修改该属性。这样,如果以后我们想要改变name的内部表示或验证它的值(例如,确保它不为空或符合某种格式),我们可以在setName()方法中进行,而不会影响到使用该对象的代码。
2. setter/getter模式与封装性
setter和getter方法是Java面向对象编程中的重要概念。setter方法用于修改类的属性,getter方法用于获取类的属性。setter和getter方法通常被用于封装类的内部状态。
对于Student
类,我们可以有如下的setter和getter方法:
public class Student {
private String name;
private int age;
private String gender;
private String id;
private String major;
private double gpa;
public Student(String name, int age, String gender, String id, String major, double gpa) {
this.name = name;
this.age = age;
this.gender = gender;
this.id = id;
this.major = major;
this.gpa = gpa;
}
//setters and getters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public double getGpa() {
return gpa;
}
public void setGpa(double gpa) {
this.gpa = gpa;
}
}
3. toString()方法
toString()
方法是一个Java对象的方法,它返回一个代表该对象的字符串。这个字符串通常包含对象的所有或部分属性值。toString()
方法可以帮助我们更好地理解或调试代码。
对于Student
类,我们可以添加一个toString()
方法来打印学生的信息:
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", id='" + id + '\'' +
", major='" + major + '\'' +
", gpa=" + gpa +
'}';
}
这个toString()
方法将返回一个形如 "Student{"John", 20, "Male", "001", "Computer Science", 3.5} " 的字符串。如果我们将这个toString()
方法添加到Student
类,我们就可以通过System.out.println(student)
来打印学生的信息。
4. 工具类
代码中使用了两个主要的工具类:一个是ArrayList
,它是Java集合框架的一部分,用于存储动态数组;另一个是String
类,它是Java的基础类之一,用于处理文本字符串。
ArrayList
:这个类允许我们动态地添加和删除元素,这非常适合存储学生管理系统中的学生数据。例如,我们可以通过students.add(new Student())
来添加一个新的学生。String
:这个类提供了许多用于处理字符串的方法,例如连接字符串("Hello " + "World" 返回 "Hello World"),查找字符串中的子字符串,将字符串转换为大写或小写等。例如,在searchByName()
和searchByMajor()
方法中,我们使用String
类的equals()
方法来比较字符串。
5. 面向对象设计
5.1 这个案例主要解决的是对学生信息进行管理的问题,主要的名词是学生和动作是管理。
5.2 在这个案例中,我们抽象出了三个主要的类:Student
, StudentManagementSystem
和 ArrayList
。
Student
类:它代表一个学生,有姓名、学号、专业和GPA等属性,以及相应的setter和getter方法。此外,它还有一个toString()
方法用于打印学生信息。StudentManagementSystem
类:它是对学生管理系统的一个抽象,它包含了一个学生列表并且提供了添加、删除、搜索学生等方法。ArrayList
类:在StudentManagementSystem
类中作为工具类使用,用于存储学生数据并提供动态添加和删除学生的功能。