学生管理系统面向对象分析报告
学生管理系统面向对象分析报告
目录
1. 案例中哪里体现出了封装性及其好处?
(姓名:方致沅 学号:202421336050)
封装性是面向对象编程的核心特性之一,指将对象的属性和行为封装在类内部,通过访问控制符(如private、public)限制外部直接访问,仅通过类提供的公共方法交互。
在本案例中,封装性主要体现在Student类中:
Student类的所有属性(name、age、gender、id、major、gpa)均被private修饰,外部无法直接读取或修改这些属性(如不能通过student.name = "Tom"直接修改姓名)。- 外部只能通过
Student类提供的公共方法(getName()、setName()等getter/setter方法)访问或修改属性,实现了对属性访问的控制。
封装性的好处:
- 数据安全性:防止外部代码随意修改对象属性,避免不合理的值(如年龄为负数)被直接赋值(可在
setter中添加校验逻辑实现)。 - 代码可维护性:属性的访问和修改逻辑集中在类内部,若需修改(如添加属性校验),只需修改类内方法,无需修改所有使用该类的外部代码。
- 信息隐藏:隐藏对象内部实现细节,外部只需关注类提供的功能,无需了解内部结构。
2. 案例中的setter/getter模式与封装性
(姓名:方致沅 学号:202421336050)
什么是setter/getter?
setter(设值方法)和getter(取值方法)是类中用于访问和修改私有属性的公共方法。
getter方法:命名格式为getXxx(),无参数,返回对应属性的值,用于读取私有属性。setter方法:命名格式为setXxx(参数),接收一个与属性类型一致的参数,用于修改私有属性的值。
在Student类中,getName()(getter)用于获取姓名,setName(String name)(setter)用于修改姓名,其他属性(如age、gpa)也有对应的setter/getter方法。
setter/getter的作用
- 配合封装性:在不暴露私有属性的前提下,提供属性的访问和修改渠道,保证数据安全性。
- 控制逻辑:可在
setter中添加校验逻辑(如setAge(int age)中判断年龄是否为正数),避免无效数据。 - 灵活性:若未来属性的存储方式改变(如将
gpa从double改为float),只需修改getter/setter的实现,外部代码无需调整。
如何自动生成setter/getter?
主流IDE(如IntelliJ IDEA、Eclipse)均支持自动生成setter/getter:
- 在类中定义私有属性后,右键选择“Generate”(或快捷键
Alt+Insert); - 选择“Getter and Setter”,勾选需要生成方法的属性,点击“OK”即可自动生成。
3. 案例中某些类的toString()方法
(姓名:方致沅 学号:202421336050)
toString()方法的作用
toString()方法用于返回对象的字符串表示形式,方便开发者打印或查看对象的内容。若未重写该方法,默认返回“类名@哈希值”(如code.Student@1b6d3586),无法直观体现对象信息。
在案例中,Student类重写了toString()方法,当打印学生对象(如System.out.println(student))时,会输出包含姓名、年龄、ID等属性的字符串(如Student{name='John', age=20, gender='Male', id='001', ...}),便于调试和查看数据。
toString()一般应包含的内容
通常应包含对象的核心属性(能唯一标识或描述对象的信息)。例如Student类的toString()包含了name、age、gender、id、major、gpa,这些属性完整描述了一个学生的信息。
toString()方法的来源
toString()方法继承自Java的根类java.lang.Object。所有Java类都默认继承Object类,因此都拥有toString()方法。若类中未重写,则使用Object类的默认实现;若重写(如Student类),则使用自定义实现。
4. 案例中几个常用方法解析
(姓名:方致沅 学号:202421336050)
1. Student类的构造方法
- 方法签名:
Student(String name, int age, String gender, String id, String major, double gpa) - 入参:
name(姓名)、age(年龄)、gender(性别)、id(学号)、major(专业)、gpa(绩点) - 功能:初始化
Student对象的所有属性,创建学生实例时为属性赋值。 - 返回值:无(构造方法无返回值)。
2. StudentManagementSystem类的addStudent方法
- 方法签名:
void addStudent(Student student) - 入参:
Student类型的对象(待添加的学生) - 功能:将传入的学生对象添加到系统内部的学生列表(
students)中,实现“添加学生”功能。 - 返回值:
void(无返回值)。
3. StudentManagementSystem类的searchByName方法
- 方法签名:
List<Student> searchByName(String name) - 入参:
String类型的name(待搜索的姓名) - 功能:遍历系统中的所有学生,筛选出姓名与入参一致的学生,将结果以
List<Student>形式返回。 - 返回值:
List<Student>(符合条件的学生列表,若无匹配则返回空列表)。
4. Main类的main方法
- 方法签名:
public static void main(String[] args) - 入参:
String[] args(命令行参数) - 功能:程序入口,通过控制台与用户交互,接收用户输入的操作指令(如添加、删除、查询学生),调用
StudentManagementSystem的方法完成对应功能,并输出结果。 - 返回值:
void(无返回值)。
5. 案例中的面向对象设计
(姓名:方致沅 学号:202421336050)
5.1 问题描述与名词、动词分析
案例解决的问题:实现一个学生管理系统,支持用户通过控制台操作,完成学生信息的添加、删除、按姓名/专业/GPA查询以及显示所有学生等功能。
- 名词(可能抽象为类或属性):学生(Student)、学生管理系统(StudentManagementSystem)、姓名(name)、年龄(age)、性别(gender)、学号(id)、专业(major)、绩点(gpa)、控制台(Scanner)、学生列表(List
)。 - 动词(可能抽象为方法):添加(add)、删除(remove)、搜索(search)、显示(show)、输入(input)、输出(output)、退出(exit)。
5.2 抽象的类及功能
根据上述分析,案例抽象出以下核心类,各有明确职责:
-
Student类- 功能:封装学生的属性(姓名、年龄、学号等)和行为(通过
getter/setter访问/修改属性、toString()返回信息),是系统中“学生”实体的抽象。
- 功能:封装学生的属性(姓名、年龄、学号等)和行为(通过
-
StudentManagementSystem类- 功能:负责学生信息的管理逻辑,包含学生列表的存储(
students属性)和核心操作方法(addStudent添加、removeStudent删除、searchByName等查询方法),是“管理行为”的抽象。
- 功能:负责学生信息的管理逻辑,包含学生列表的存储(
-
Main类- 功能:作为程序入口,处理用户交互(通过
Scanner接收输入、打印输出结果),调用StudentManagementSystem的方法响应用户指令,是“用户界面与系统交互”的抽象。
- 功能:作为程序入口,处理用户交互(通过
这种设计符合面向对象的“单一职责原则”:每个类专注于完成一类功能,降低代码耦合度,便于维护和扩展。

浙公网安备 33010602011771号