项目案例作业2:对案例进行面向对象分析
对案例进行面向对象分析
1.案例中哪里体现出了封装性及其好处?
答:1)Student 类将 name 和 grade 声明为 private 私有属性,外部无法直接访问,只能通过 setter/getter 方法操作。
2)StudentManagement 类封装了学生创建的业务逻辑,隐藏了具体实现细节。
好处是:1)可以防止外部直接修改对象内部状态;2)业务逻辑与输入输出分离,模块化便于后期的维护以及扩展。
2. 案例中的setter/getter模式与封装性
什么是setter/getter?有什么用?怎么自动生成?
答:setter/getter是类中用于访问和修改私有属性的公共方法。getter 用于获取属性值,setter用于设置属性值。
作用是控制属性的访问权限,实现封装;
在setter中添加数据验证逻辑可确保数据合法性。
自动生成方式:在IDEA中,右键类文件→Source(或Generate)→Generate Getters and Setters,选择需要生成的属性即可自动生成。
3.案例中某些类的toString()方法
简述 toString 方法有什么用?
toString 一般应包含什么内容?
toString()方法从哪里来?
答:用于返回对象的字符串表示形式。
通常包含对象的关键属性值,格式要清晰易懂。
toString()来源于 java.lang.Object 类的方法,所有 Java 类都默认继承该方法。默认实现为“类名@哈希值”,通常需要在自定义类中重写以提供有意义的信息。
4.案例中几个常用方法解析
简述案例代码几个常用方法的解析:
类名.构造方法名,功能描述;
类名.方法签名(入参、功能、返回参数),功能描述;
类名.方法签名(入参、功能、返回参数),功能描述。
答:
Student.Student(String name, int grade):
入参:学生姓名(name)、成绩(grade);
功能:初始化 Student 对象的 name 和 grade 属性;
返回:无返回值。
StudentManagement.createStudent(String name, int grade):
入参:学生姓名(name)、成绩(grade);
功能:封装学生创建的业务逻辑;
返回:创建的Student对象。
StuManagementDemo.addStudentMenu(Scanner sc):
入参:Scanner对象;
功能:处理用户输入,调用createStudent创建学生;
返回:创建的Student对象。
5.案例中的面向对象设计
5.1尝试用一段话描述案例所解决的问题。找到其中的名词与动词。
答:
问题:实现一个学生信息管理系统,支持添加学生信息包含姓名和成绩,并区分输入输出逻辑与业务逻辑。
名词:学生(Student)、学生管理(StudentManagement)、菜单(mainMenu)、输入(Scanner)。
动词:添加学生、输入信息、验证成绩、创建学生对象、展示信息。
5.2如果让你设计,根据上面的分析你会抽象出什么类?各具备什么功能?
答:
1)Student类:
功能:封装学生的属性(姓名、成绩)及访问方法(setter/getter),重写toString() 用于展示学生信息。
2)StudentManagement类:
功能:封装学生管理的核心业务逻辑(如创建学生、验证学生信息合法性、查询学生等)。
3)StuManagementDemo类:
功能:负责用户交互(菜单展示、输入输出处理),调用业务逻辑类完成操作,实现界面与业务的分离。