当前位置: 首页 > news >正文

项目案例作业2:对案例进行面向对象分析

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

小组成员:李天瑞 202421336012

目录
  • 学生管理系统面向对象分析报告
    • 1. 案例中哪里体现出了封装性及其好处?
      • 封装性的体现
      • 封装性带来的好处
    • 2. 案例中的setter/getter模式与封装性
      • 什么是setter/getter?
      • setter/getter的作用
      • 如何自动生成
    • 3. 案例中某些类的toString()方法
      • toString()方法的作用
      • toString()一般应包含的内容
      • toString()方法的来源
    • 4. 案例中几个常用方法解析
      • Student类构造方法
      • StudentManagementSystem.addStudent()
      • StudentManagementSystem.searchByName()
    • 5. 案例中的面向对象设计
      • 5.1 描述案例所解决的问题 找到其中的名词与动词
      • 5.2 类设计与功能分配
        • Student类
        • StudentManagementSystem类
        • Main类
        • 设计优势:

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

封装性的体现

  1. 私有属性
    e37460f658f2d7d0eeedcab03d41733

    所有属性都被声明为private,外部类无法直接访问和修改这些属性。

  2. 公共方法

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    // 其他getter和setter方法
    

    通过公共的getter和setter方法来控制对私有属性的访问。

  3. 数据隐藏
    StudentManagementSystem类中的学生列表也是私有的:

    private List<Student> students;
    

封装性带来的好处

  1. 数据保护:防止外部代码随意修改对象内部状态,确保数据的完整性和一致性。
  2. 实现细节隐藏:外部使用者不需要知道类内部如何存储数据,只需要知道如何使用公共方法。
  3. 易于维护:如果需要修改内部实现(如数据验证逻辑),只需修改类内部代码,不影响外部调用者。
  4. 灵活性:可以在setter方法中添加数据验证逻辑,如检查GPA范围是否合理。

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

什么是setter/getter?

Setter和Getter是用于访问和修改类私有属性的公共方法。

  • Getter(获取器):用于读取私有属性的值

    public String getName() {return name;
    }
    
  • Setter(设置器):用于修改私有属性的值

    public void setName(String name) {this.name = name;
    }
    

setter/getter的作用

  1. 控制访问权限:通过方法而非直接访问字段,可以在方法中添加额外的逻辑。
  2. 数据验证:在setter中可以验证输入数据的有效性。
  3. 保持兼容性:即使内部实现改变,对外接口保持不变。
  4. 支持只读或只写属性:只提供getter创建只读属性,只提供setter创建只写属性。

如何自动生成

在主流IDE中自动生成setter/getter的方法:

IntelliJ IDEA

  1. 右键点击代码区域
  2. 选择 "Generate" → "Getter and Setter"
  3. 选择要生成方法的字段

Eclipse

  1. 右键点击代码区域
  2. 选择 "Source" → "Generate Getters and Setters"
  3. 选择要生成方法的字段

3. 案例中某些类的toString()方法

3a701fc8c446e95cbecf47bad177be7

toString()方法的作用

toString()方法的主要作用是返回对象的字符串表示形式,便于调试、日志记录和显示。

toString()一般应包含的内容

  • 类名或对象标识
  • 所有重要属性的值
  • 格式清晰易读

toString()方法的来源

  1. 继承自Object类:所有Java类都隐式继承自Object类,而Object类包含默认的toString()实现。
  2. 默认实现的问题:Object类的toString()默认返回:类名@哈希码(如Student@1b6d3586),这对调试没有帮助。
  3. 重写(Override):为了提供有意义的字符串表示,子类需要重写此方法。

4. 案例中几个常用方法解析

Student类构造方法

public Student(String name, int age, String gender, String id, String major, double gpa)
  • 入参:学生的所有基本信息(姓名、年龄、性别、学号、专业、GPA)
  • 功能:创建Student对象并初始化所有属性
  • 返回:新的Student对象实例
  • 描述:用于快速创建包含完整信息的学生对象

StudentManagementSystem.addStudent()

public void addStudent(Student student)
  • 入参:要添加的Student对象
  • 功能:将学生对象添加到管理系统的学生列表中
  • 返回:void(无返回值)
  • 描述:核心的数据添加方法,维护学生集合

StudentManagementSystem.searchByName()

public List<Student> searchByName(String name)
  • 入参:要搜索的学生姓名
  • 功能:在现有学生列表中查找所有匹配指定姓名的学生
  • 返回:包含匹配学生的List集合
  • 描述:提供按姓名精确搜索的功能,返回可能多个同名学生的列表

5. 案例中的面向对象设计

5.1 描述案例所解决的问题 找到其中的名词与动词

问题描述
本系统需要管理大学中的学生信息,包括添加新学生、删除毕业学生、根据不同条件查询学生信息,以及展示所有在校学生。

名词分析

  • 学生(Student)
  • 学号、姓名、年龄、性别、专业、GPA(属性)
  • 管理系统(StudentManagementSystem)
  • 列表、集合(数据结构)

动词分析

  • 添加(add)
  • 删除(remove)
  • 搜索/查询(search)
  • 显示/获取(get)
  • 创建(构造方法)

5.2 类设计与功能分配

基于上述分析,我会设计以下类结构:

Student类

  • 属性:name, age, gender, id, major, gpa
  • 功能
    • 存储学生基本信息
    • 通过getter/setter提供属性访问
    • 重写toString()用于信息展示

StudentManagementSystem类

  • 属性:List students
  • 功能
    • addStudent(): 添加学生到系统
    • removeStudent(): 从系统移除学生
    • searchByXxx(): 多种条件搜索学生
    • getStudents(): 获取所有学生列表

Main类

  • 功能
    • 程序入口点
    • 接收用户输入
    • 调用管理系统功能
    • 显示操作结果

设计优势:

  1. 职责分离:每个类有明确的单一职责
  2. 高内聚低耦合:相关功能集中在同一类中,类间依赖清晰
  3. 易于扩展:可以轻松添加新的搜索条件或学生属性
  4. 可维护性:修改用户界面不影响核心业务逻辑
http://www.hskmm.com/?act=detail&tid=28234

相关文章:

  • JavaSE
  • CF2064E Mycraft Sand Sort
  • Servlet笔记
  • 第一个博客
  • k8s 主节点重启后 从节点 get 异常 - 教程
  • 多维索引技术优化数据湖查询性能
  • Umi-OCR_文字识别工具 免安装使用教程(附下载安装包)!永久免费,开源离线OCR识别软件下载
  • 【汇总】OPPO r9m 分区名、分区功能
  • 04_线程池实现
  • #D251010D. 未命名 10 (unnamed)
  • 【JAVA】从入门到放弃-01-HelloWorld - 指南
  • 离线应用程序
  • 2025表面瑕疵检测厂家TOP5推荐:表面瑕疵检测,薄膜瑕疵检测,瑕疵检测设备,瑕疵在线检测,铝箔瑕疵在线检测,外观瑕疵检测机,薄膜瑕疵检测仪,陶瓷膜瑕疵检测各种类型检测,精准高效的质量守护
  • 表格识别:不仅能识别文字,更能理解表格的结构和逻辑关系,实现输出可编辑、可分析的结构化数据
  • 同步FIFO
  • P13274 [NOI2025] 三目运算符
  • Microsoft Office不小心卸载或重装系统后,如何重新安装 ... - sherlock
  • HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包) - 实践
  • 使用JaCoCo进行代码覆盖率分析
  • 计算机视觉专家入选德国国家科学院
  • 2025 年工程管理软件/软件系统/软件App/软件平台/工程管理软件和验房系统公司/企业推荐榜:数字化转型下的实用选型指南
  • 【Java学习】【Java基础】--第1篇:入门Java和对面向对象的理解
  • solutions
  • 技术面:Spring (事务传播机制、事务失效的原因、BeanFactory和FactoryBean的关系)
  • 安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接
  • 04-最简单的字符设备驱动
  • 完整教程:手机可视化方案(针对浓度识别)
  • AI元人文系列文章:决策范式与无为而治
  • SAP导入证书
  • Kubernetes存储卷:保障有状态应用的数据持久化