***使用自己已经学习的面向对象知识,针对学生管理系统编写简易面向对象分析报告***
一. 案例中哪里体现出的封装性及其好处?
(张子翔 202221336080)
在学生管理系统中,封装性的体现主要在于将学生的属性(如姓名、学号、性别等)和学生的行为(如增加学生、删除学生、查找学生等)封装在“学生”这个类中。这样做的好处有:
- 提高安全性:通过封装,我们可以限制对内部属性的直接访问,防止数据被随意修改。例如,我们可以用private来修饰学生成绩,这样学生就无法自行更改。
- 提高可维护性:首先,学生管理系统可以采用模块化设计,当某个模块需要修改时,只需要对该模块进行更改,而不会影响到其他模块的正常运行。这降低了维护的难度和成本。其次学生管理系统中的某些功能可能会被多次使用,例如学生信息的增加和查询。通过封装这些功能和逻辑在单独的类或方法中,可以在不同的地方重复使用这些代码,节省时间,避免了重复编写和修改。
- 简化接口:通过封装,我们可以把复杂的内部实现简化成一个简单的接口,方便其他类进行调用。例如,学生类可以提供查询成绩的方法,而不需要关心成绩是如何计算的。
二. 案例中的setter/getter模式与封装性
(张子翔 202221336080)
1.什么是setter/getter模式?怎么自动生成?
setter/getter模式是学生管理系统中常用的一种设计模式,其主要目的是为了实现封装性。在Java等面向对象的编程语言中,通常会为类的每一个属性设置一个getter方法(用于获取属性值)和一个setter方法(用于设置属性值)。
在学生管理系统中我们可以有如下:
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; } 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; }
- 打开Eclipse,并在Package Explorer中选择要为其生成setter和getter的Java类。
- 右键单击所选的Java类,然后选择“Source”菜单下的“Generate Getters and Setters”选项。
- 在弹出的“Generate Getters and Setters”对话框中,选择要生成setter和getter的字段,然后单击“OK”按钮。
三. 案例中某些类的toString()方法
(梁星星 202221336072)
1)简述toString()方法从哪里来?toString方法有什么用?toString一般应包含什么内容?
toString()方法是从Object类继承而来的。
在学生管理系统中,toString()方法通常用于返回学生的一些信息(姓名,性别,成绩等)。这样做的好处是当我们需要打印学生信息时,不需要一个一个的获取学生信息,而是直接使用toString()方法。
toString()方法一般应包含足够的信息来唯一标识一个对象(姓名,年纪,性别等),但是最好不要把一些隐私信息放在里面。在学生管理系统中toString()方法一般包含如下信息:
public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + ", id='" + id + '\'' + ", major='" + major + '\'' + ", gpa=" + gpa + '}'; }
四. 案例中几个常用方法解析
(陈健 202221336070)
简述案例代码几个常用方法的解析:
sms.searchByName(String name),功能:按照学生姓名在学生管理系统中进行搜索。它接受一个String
类型的参数name
,并返回一个包含所有姓名与搜索条件匹配的学生对象的List<Student>
类型的列表。
sms.searchByMajor(String major),功能:按照学生专业在学生管理系统中进行搜索。它接受一个String
类型的参数major,并返回一个包含所有专业与搜索条件匹配的学生对象的List<Student>
类型的列表。
sms.searchByGpa(double gpa),功能:按照学生GPA在学生管理系统中进行搜索。它接受一个double
类型的参数gpa,并返回一个包含所有gpa与搜索条件匹配的学生对象的List<Student>
类型的列表。
五. 案例中的面向对象设计
(何涛 202221336074)
5.1 尝试用一段话描述案例所解决的问题。找到其中的名词与动词。
学生管理系统主要解决的问题是记录和管理学生的信息,包括他们的个人信息、成绩、专业课等。名词包括学生、个人信息、成绩、专业课等;动词包括增加、删除、搜索等。
5.2 如果让你设计,根据上面的分析你会抽象出什么类?各具备什么功能?
1.学生类(Student):存储和管理学生个人信息,如姓名、学号、登陆密码等。
2.课程类(Course)存储和管理课程信息,如课程名、课程编号、教师等。
3.成绩类(Grade):存储和管理学生成绩,如课程成绩、平均成绩等。
4.登陆界面类(Login):登录学生管理系统。
这些类之间可以通过关联、依赖,聚合等方式进行交互,形成一个完整的学生管理系统。