对案例进行面向对象分析

一. 案例中哪里体现出了封装性及其好处?(王梅 202321336068)

该案例封装性主要体现在Student类的设计上

  • 1.私有成员变量:
    在Student类中,成员变量如name、age、gender、id、major和gpa都被声明为private。这意味着这些变量不能被类外部的代码直接访问和修改,只能通过类提供的方法来操作。
    好处:
    这确保了数据的完整性和安全性,因为类的内部逻辑可以控制对成员变量的访问,防止外部代码进行不恰当的修改。
  • 2.公共访问器(getter)和修改器(setter)方法:
    对于每个私有成员变量,Student类都提供了公共的访问器(getter)和修改器(setter)方法,如getName()、setName(String name)、getAge()、setAge(int age)等。
  • 好处:
    通过这些方法,可以在不暴露内部实现细节的情况下,允许外部代码获取和修改对象的状态。同时,可以在这些方法中加入逻辑来验证数据的正确性。
  • 3.方法实现细节隐藏:
    类的方法,如addStudent(Student student)、removeStudent(Student student)、searchByName(String name)等,都隐藏了它们的实现细节。外部代码不需要知道这些方法是如何工作的,只需要知道如何使用它们。
  • 好处:
    这提高了代码的可维护性,因为可以自由地更改类的内部实现而不影响使用该类的其他代码。

封装性的具体好处:

  • 数据保护:防止外部直接访问和修改对象内部状态,确保对象状态的一致性。
  • 简化接口:通过公开有限的接口来操作对象,隐藏了复杂的内部实现,使得类的使用更加简单。
  • 提高灵活性:由于内部实现细节对外部不可见,因此可以在不影响其他代码的情况下更改内部实现。
  • 增强安全性:可以控制对类的成员变量的访问,防止不恰当的访问和修改。

二、 案例中的setter/getter模式与封装性(王梅 202321336068)

  • Student 类使用了setter/getter模式来实现封装性。

什么是setter/getter?

  • 在Java编程中,setter/getter模式是一种实现封装性的常见做法,通常用于类中,以提供对私有属性的安全访问和修改。

有什么用?

  • 封装:

通过将类的属性设置为私有,并通过公共的setter/getter方法提供对这些属性的访问,可以保护对象的内部状态,防止直接从外部修改。

  • 控制:

可以在setter方法中添加逻辑来验证输入值,确保对象状态的一致性和有效性。

  • 抽象:

允许在不暴露内部实现细节的情况下,向外部提供对对象属性的访问。

  • 灵活性:

如果将来需要更改属性的访问方式或实现细节,可以只修改setter/getter方法,而不影响使用这些属性的其他代码。

怎么自动生成?

在IDEA中当你想要自动生成时,使用快捷键Alt + Insert,然后选择你所需要的自动生成的。
可选择你所需要的

三、案例中的某些toString()方法 (王梅 202321336068)

1.简述toString方法有什么用?

  • toString()方法是Java中Object类的一个方法,它被用来返回对象的字符串表示形式。例:
  • (1)当需要打印对象信息时,可以直接调用toString()来获取一个可读的字符串。
  • (2)在调试过程中,可以快速查看对象的状态。
  • (3)在进行字符串连接操作时,如果对象被用在字符串表达式中,toString()方法会被隐式调用。

2.toString一般应包含什么内容?

通常,toString()方法应该返回一个包含对象所有重要属性值的字符串,这样可以通过这个字符串了解到对象的状态。例如,对于一个Student类,toString()方法可能会包含以下内容:
学生姓名
年龄
性别
学号
专业
GPA

3.toString()方法从哪里来?

toString()方法继承自Java的Object类,是所有Java类的超类。因此,所有的Java对象都有这个方法。当创建一个新类时,如果没有显式覆盖toString()方法,则默认使用Object类中的实现,这个实现通常返回一个由类名、'@'符号和对象的哈希码组成的字符串,这样的字符串对于调试和显示对象信息来说通常不是很有用。

如下:

@Override
public String toString() {
    return "Student{" +
            "name='" + name + '\'' +
            ", age=" + age +
            ", gender='" + gender + '\'' +
            ", id='" + id + '\'' +
            ", major='" + major + '\'' +
            ", gpa=" + gpa +
            '}';
}

四、案例中几个常用方法解析(王宇轩 202321336065)

在这里插入图片描述
==>Student.Student(String name, int age, String gender, String id, String major, double gpa)
功能描述:这是Student类的构造方法,用于创建Student对象时初始化学生的姓名、年龄、性别、学号、专业和GPA。

StudentManagementSystem 类

  • addStudent(Student student)
    入参 :Student 对象
    功能:将给定的 Student 对象添加到学生管理系统中。
    返回参数:无(void)
  • removeStudent(Student student)
    入参 :Student 对象
    功能:从学生管理系统中移除指定的 Student 对象。
    返回参数:无(void)
  • getStudents()
    入参:无
    功能:获取学生管理系统中所有学生的列表。
    返回参数:List,包含系统中所有学生的列表。
  • searchByName(String name)
    入参:String(学生姓名)
    功能:根据学生姓名搜索学生,并返回匹配的学生列表。
    返回参数:List,包含姓名匹配的学生列表。
  • searchByMajor(String major)
    入参:String(学生专业)
    功能:根据学生专业搜索学生,并返回匹配的学生列表。
    返回参数:List,包含专业匹配的学生列表。
  • searchByGpa(double gpa)
    入参:double(学生 GPA)
    功能:根据学生 GPA 搜索学生,并返回匹配的学生列表。
    返回参数:List,包含 GPA 匹配的学生列表。

五、案例中的面向对象设计(王宇轩 202321336068)

5.1 尝试用一段话描述案例所解决的问题。找到其中的名词与动词。

该案例通过面向对象的方式设计了一个学生管理系统,该系统允许用户添加、删除、以及按姓名、专业和 GPA 搜索学生信息,并展示所有学生的列表。用户通过命令行界面与系统交互,系统内部则通过 Student 和 StudentManagementSystem 类来存储和管理学生数据。

5.2 如果让你设计,根据上面的分析你会抽象出什么类?各具备什么功能?

  • Student 类
  • 功能:表示一个学生对象,包含学生的姓名、年龄、性别、学号、专业和 GPA 等属性。
  • 方法:构造函数用于初始化对象,toString() 方法用于输出学生的详细信息(便于打印)。
    StudentManagementSystem 类
  • 功能:管理学生信息,包括添加、删除、搜索学生等功能。
  • 方法:
    addStudent(Student student):添加学生到系统中。
    removeStudent(Student student):从系统中移除学生。
    getStudents():获取系统中所有学生的列表。
    searchByName(String name):按姓名搜索学生。
    searchByMajor(String major):按专业搜索学生。
    searchByGpa(double gpa):按 GPA 搜索学生。
  • Main 类(或称为命令行界面类)
  • 功能:作为程序的主入口,负责接收用户输入,并调用 StudentManagementSystem 类的方法来执行相应的操作。
  • 方法:main(String[] args) 方法,包含程序的主循环,用于处理用户输入和调用其他类的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值