学生管理系统面向对象分析报告

学生管理系统面向对象分析报告

目录

  1. 案例中哪里体现出了封装性及其好处?
  2. 案例中的setter/getter模式与封装性
  3. 案例中某些类的toString()方法
  4. 案例中几个常用方法解析
  5. 案例中的面向对象设计

1. 案例中哪里体现出了封装性及其好处?

(姓名:方致沅 学号:202421336050)

封装性是面向对象编程的核心特性之一,指将对象的属性和行为封装在类内部,通过访问控制符(如privatepublic)限制外部直接访问,仅通过类提供的公共方法交互。

在本案例中,封装性主要体现在Student类中:

  • Student类的所有属性(nameagegenderidmajorgpa)均被private修饰,外部无法直接读取或修改这些属性(如不能通过student.name = "Tom"直接修改姓名)。
  • 外部只能通过Student类提供的公共方法(getName()setName()getter/setter方法)访问或修改属性,实现了对属性访问的控制。

封装性的好处:

  1. 数据安全性:防止外部代码随意修改对象属性,避免不合理的值(如年龄为负数)被直接赋值(可在setter中添加校验逻辑实现)。
  2. 代码可维护性:属性的访问和修改逻辑集中在类内部,若需修改(如添加属性校验),只需修改类内方法,无需修改所有使用该类的外部代码。
  3. 信息隐藏:隐藏对象内部实现细节,外部只需关注类提供的功能,无需了解内部结构。

2. 案例中的setter/getter模式与封装性

(姓名:方致沅 学号:202421336050)

什么是setter/getter?

setter(设值方法)和getter(取值方法)是类中用于访问和修改私有属性的公共方法。

  • getter方法:命名格式为getXxx(),无参数,返回对应属性的值,用于读取私有属性。
  • setter方法:命名格式为setXxx(参数),接收一个与属性类型一致的参数,用于修改私有属性的值。

Student类中,getName()getter)用于获取姓名,setName(String name)setter)用于修改姓名,其他属性(如agegpa)也有对应的setter/getter方法。

setter/getter的作用

  1. 配合封装性:在不暴露私有属性的前提下,提供属性的访问和修改渠道,保证数据安全性。
  2. 控制逻辑:可在setter中添加校验逻辑(如setAge(int age)中判断年龄是否为正数),避免无效数据。
  3. 灵活性:若未来属性的存储方式改变(如将gpadouble改为float),只需修改getter/setter的实现,外部代码无需调整。

如何自动生成setter/getter?

主流IDE(如IntelliJ IDEA、Eclipse)均支持自动生成setter/getter

  1. 在类中定义私有属性后,右键选择“Generate”(或快捷键Alt+Insert);
  2. 选择“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()包含了nameagegenderidmajorgpa,这些属性完整描述了一个学生的信息。

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 抽象的类及功能

根据上述分析,案例抽象出以下核心类,各有明确职责:

  1. Student

    • 功能:封装学生的属性(姓名、年龄、学号等)和行为(通过getter/setter访问/修改属性、toString()返回信息),是系统中“学生”实体的抽象。
  2. StudentManagementSystem

    • 功能:负责学生信息的管理逻辑,包含学生列表的存储(students属性)和核心操作方法(addStudent添加、removeStudent删除、searchByName等查询方法),是“管理行为”的抽象。
  3. Main

    • 功能:作为程序入口,处理用户交互(通过Scanner接收输入、打印输出结果),调用StudentManagementSystem的方法响应用户指令,是“用户界面与系统交互”的抽象。

这种设计符合面向对象的“单一职责原则”:每个类专注于完成一类功能,降低代码耦合度,便于维护和扩展。

posted @ 2025-09-24 16:43  fangzhiyuan  阅读(59)  评论(0)    收藏  举报