学生管理系统项目案例作业 2

目录

1. 案例中哪里体现出了封装性及其好处?(202321336040  郭梦妍)

2. 案例中的setter/getter模式与封装性(202321336040  郭梦妍)

什么是setter/getter?有什么用?怎么自动生成?

3.案例中某些类的toString()方法 (202321336034 黄诗婷)

4. 案例中几个常用方法解析 (202321336034 黄诗婷)

5. 案例中的面向对象设计 (202321336034 黄诗婷)


1. 案例中哪里体现出了封装性及其好处?(202321336040  郭梦妍)

1.封装的定义:封装是面向对象编程的一个基本特性,它指的是将数据和操作数据的方法绑定在一起,隐藏对象的内部状态和细节,并仅暴露对外的接口。在Java中,实现封装性的主要手段包括使用访问控制符(如private)、构造器、getter和setter方法。

2.举例说明

Student类:

name 属性被声明为私有的 (private String name;)。这意味着类的外部代码不能直接访问或修改这个属性。只有通过类内部的方法,比如上图所示的getter和setter,它们允许外部代码获取和设置name属性的值,才能对这个属性进行操作。

通过重写toString方法展示了如何以一种可读的方式展示对象的状态,这也是封装的一部分表现形式。

StudentManagementSystem类:

students 列表是一个私有成员变量。这表示从类的外部无法直接访问或修改这个列表,只有通过类提供的公共方法才能对其进行操作。

类提供了构造函数、addStudent、getStudents等公共方法。这些方法允许外部代码与StudentManagementSystem对象交互,又不暴露其内部的实现细节。例如,要向系统中添加一个学生,应该调用addStudent方法,而不是直接修改students列表。

3.封装性的好处

3.1  通过将类的数据成员声明为私有(private),可以防止外部代码直接访问或修改这些数据。只有通过类提供的公共方法(通常是getter和setter)才能访问这些数据成员。这样可以有效地保护对象的状态不受外部影响。

3.2  类的内部实现细节被隐藏起来,当需要更改类的内部实现时,不会影响到该类其他代码的使用。

3.3  封装使得类更加独立,降低了因一处改动而导致多处问题的风险。

3.4  封装有助于调试,可以通过公共方法调用来观察对象,而不需要了解内部实现。

2. 案例中的setter/getter模式与封装性(202321336040  郭梦妍)

什么是setter/getter?有什么用?怎么自动生成?

1.下图为案例中的setter/getter,出现在Student类。

2.setter/getter

2.1 定义:

Getter方法是一种读取类中私有成员变量值的方法。通常,getter方法名称是以get开头,后跟成员变量名称(首字母大写)。例如,如果有一个私有成员变量name,那么对应的getter方法名称将是getName。此方法通常返回该成员变量的值。
Setter方法是一种设置类中私有成员变量值的方法。通常,setter方法名称是以set开头,后跟成员变量名称(首字母大写)。例如,如果有一个私有成员变量name,那么对应的setter方法名称将是setName。此方法通常接受一个参数,并用该参数的值来更新成员变量。

2.2 功能:

setter和getter方法主要用于访问和修改类的私有成员变量,它们是实现封装的重要工具,能够提供对类内部状态的受控访问。

2.3 如何自动生成(下图是用IDEA举例)

(1)单击鼠标右键点击生成或直接使用快捷键Alt+Insert

(2)选择Getter和Setter

(3)选择自己想要生成的变量(可以按住shift键再右击)

(4)生成结果例子

3.案例中某些类的toString()方法 (202321336034 黄诗婷)

(1)简述toString方法有什么用?

  toString方法用来返回一个表示对象的字符串

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

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

在上述代码中,toString方法包含类名Student,以及对象的信息如name,age,gender,id,major,gpa。因此toString方法一般会包含类名以及对象的重要信息。

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

toString方法是 Java 语言中 Object 类的一个成员方法。Object 类是所有 Java 类的根父类,故Student类中的toString方法是继承其父类Object的toString方法。

4. 案例中几个常用方法解析 (202321336034 黄诗婷)

构造方法(用于初始化)

(1)Student类

  • 功能描述:当创建一个新的 Student 实例时,通过这个构造方法可以设置学生的姓名、年龄、性别、学号、专业和GPA。每个参数都对应于一个实例变量,并且使用 this 关键字将传入的参数值赋给相应的实例变量。
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;
    }

(2)StudentManagementSystem类

  • 此构造方法用于创建一个新的 StudentManagementSystem 实例,并初始化一个用来存储 Student 对象的列表。
public StudentManagementSystem() {
        students = new ArrayList<>();
    }

方法

(1)addStudent

  • 入参:一个Student类型的对象
  • 返回参数:void
  • 功能描述:用于向students列表中添加Student对象
public void addStudent(Student student) {
        students.add(student);
    }

(2)removeStudent

  • 入参:一个Student类型的对象
  • 返回参数:void
  • 功能描述:用于移除students列表中的Student对象
public void removeStudent(Student student) {
        students.remove(student);
    }

(3)getStudents

  • 入参:无
  • 返回参数:一个包含所有Student的列表
  • 功能描述:此方法返回当前StudentManagementSystem实例中管理的所有Student对象的列表
public List<Student> getStudents() {
        return students;
    }

(4)searchByName

  • 入参:学生姓名
  • 功能:通过姓名查询学生
  • 返回参数:一个包含所有匹配姓名的Student对象的列表。如果没有任何学生匹配,则返回一个空列表
  • 功能描述:遍历存储在students 列表中的所有Student对象,并将那些姓名与给定name参数相匹配的学生对象添加到一个新的列表result中
//通过姓名查询学生
    public List<Student> searchByName(String name) {
        List<Student> result = new ArrayList<>();
        for (Student student : students) {
            if (student.getName().equals(name)) {
                result.add(student);
            }
        }
        return result;
    }

(5)searchByMajor

  • 入参:专业名称
  • 功能:通过专业查询学生
  • 返回类型:一个包含所有匹配专业的Student对象的列表。如果没有任何学生匹配,则返回一个空列表
  • 功能描述:遍历存储在students 列表中的所有Student对象,并利用equals方法将那些专业名称与给定major参数相匹配的学生对象添加到一个新的列表result中
//通过专业查询学生
    public List<Student> searchByMajor(String major) {
        List<Student> result = new ArrayList<>();
        for (Student student : students) {
            if (student.getMajor().equals(major)) {
                result.add(student);
            }
        }
        return result;
    }

(6)searchByGpa

  • 入参:平均绩点
  • 功能:通过平均绩点查询学生
  • 返回类型:一个包含所有匹配gpa的Student对象的列表。如果没有任何学生匹配,则返回一个空列表
  • 功能描述:遍历存储在students 列表中的所有Student对象,并利用equals方法将那些平均绩点与给定gpa参数相匹配的学生对象添加到一个新的列表result中
 public List<Student> searchByGpa(double gpa) {
        List<Student> result = new ArrayList<>();
        for (Student student : students) {
            if (student.getGpa() == gpa) {
                result.add(student);
            }
        }
        return result;
    }

5. 案例中的面向对象设计 (202321336034 黄诗婷)

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

描述:将学生的姓名,性别,年龄,学号,专业,平均绩点存入学生管理系统中,在系统中可以增加学生,删除学生。通过姓名,专业,平均绩点查询学生。

名词:姓名,年龄,学号,专业,平均绩点,学生,学生管理系统

动词:增加,删除,查询

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

Student类:用于存放学生信息

StudentManagementSystem类:用于处理学生信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值