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

news/2025/10/10 20:12:08/文章来源:https://www.cnblogs.com/nuomiji/p/19133788

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

小组成员:李天瑞 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.mzph.cn/news/934376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20251010周五日记

20251010周五日记今天十点多回学校了,好不容易不下雨了。没想到国庆还真加了那么多天班= = 今日: 1.早上吃完早饭收拾东西慢慢悠悠回来了,打印朋辈表多亏师哥妙手回春。准备去开学代会,说来又要翘课了。 2.中午吃了…

k8s 主节点重启后 从节点 get 异常 - 教程

k8s 主节点重启后 从节点 get 异常 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

多维索引技术优化数据湖查询性能

本文介绍了一种通过多维索引技术优化数据湖查询性能的解决方案。该技术可直接集成到现有数据湖架构中,支持跨列复杂过滤,提升查询速度最高达6倍,同时降低70%计算成本,兼容主流计算引擎无需重构数据管道。Qbeast获7…

训练笔记:博弈杂题

[7-/7] A. 黎明\(1\sim n\) 排成一个环进行约瑟夫(隔一个删一个),求有多少个时刻,被删除的数的异或和为 \(0\)。 多测 \(10^5\) 组,\(n<10^{18}\)。hint:考虑把约瑟夫的过程分解为 \(\lceil\log n\rceil\) 个…

HTML5拖放API核心功能解析

好的,我们来详细解析一下 HTML5 拖放 API 的核心功能。 HTML5 拖放 API 允许用户在浏览器中抓取一个元素,并将其拖放到另一个位置。它原生支持在浏览器标签页、甚至不同浏览器、乃至桌面应用之间拖放,是现代 Web 应…

[USACO07NOV] Telephone Wire G

dp题,做法有点套路但是一开始没想到。 设 \(dp{_i}_j\) 表示第 \(i\) 位为 \(j\) 的最小花费。 然后直接往下转移就好了。点击查看代码 #include<bits/stdc++.h> #define fir first #define sec second #define…

springboot配置多个数据源

springboot配置多个数据源在我们的实际业务中可能会遇到;在一个项目里面读取多个数据库的数据来进行展示,spring对同时配置多个数据源是支持的。 使用到的框架:springboot+mybatis 方法:在配置文件中配置多个数据源…

Umi-OCR_文字识别工具 免安装使用教程(附下载安装包)!永久免费,开源离线OCR识别软件下载

软件介绍 在外面日常工作汇中,我们经常需要将图片、截图中的文字转换为可编辑文本。Umi-OCR应运而生——这是一款完全开源免费的离线OCR识别工具,无需联网即可本地完成高精度文字识别,保护你的数据隐私同时确保高效…

常量指针 和 指针常量

常量指针 和 指针常量Posted on 2025-10-10 19:52 steve.z 阅读(0) 评论(0) 收藏 举报如何牢记 “常量指针” 和 “指针常量” 的区别?🧩 一、先看词序规律:「前修后主」 在汉语里:前面的词修饰后面的词。比…

PyTorch 神经网络工具箱完全指南 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Apache POI:Java操控Office文档的利器

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【汇总】OPPO r9m 分区名、分区功能

一、分区名、分区功能编号 分区名 英文说明 中文说明 备注、示例0preloaderfastboot 底层系统初始化程序分区 比 u-boot 更底层1pgpt2recovery系统救援工具、维护手机类似电脑PE系统3para4reserve15reserve26reserve37…

完整教程:LVDS系列30:Xilinx 7系 ADC LVDS接口参考设计(一)

完整教程:LVDS系列30:Xilinx 7系 ADC LVDS接口参考设计(一)2025-10-10 19:48 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !import…

【JAVA】从入门到放弃-01-HelloWorld - 指南

【JAVA】从入门到放弃-01-HelloWorld - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…

离线应用程序

离线应用程序(也称为离线Web应用程序或PWA,Progressive Web Applications)是一种使用现代Web技术开发的,能够在没有网络连接的情况下运行的Web应用程序。这类应用通常使用服务工作线程(Service Workers)、缓存存…

2025表面瑕疵检测厂家TOP5推荐:表面瑕疵检测,薄膜瑕疵检测,瑕疵检测设备,瑕疵在线检测,铝箔瑕疵在线检测,外观瑕疵检测机,薄膜瑕疵检测仪,陶瓷膜瑕疵检测各种类型检测,精准高效的质量守护

在当今制造业高质量发展的背景下,表面瑕疵检测已成为保障产品质量的关键环节。随着人工智能和机器视觉技术的快速发展,表面瑕疵检测设备在精度、速度和智能化程度方面都实现了质的飞跃。这类设备通过对产品表面的划痕…

表格识别:不仅能识别文字,更能理解表格的结构和逻辑关系,实现输出可编辑、可分析的结构化数据

在日常工作和商业运营中,表格以其结构化的方式,承载着海量的关键信息——从财务报表、医疗处方到物流单据和调查问卷。然而,这些信息一旦被打印或扫描成图片,就变成了“数据孤岛”,无法被计算机直接理解和处理。传…

同步FIFO

一、原理介绍 FIFO(First in, First out),顾名思义是先入先出存储器,数据的写入顺序和读出顺序一致。 一条数据流中有两个模块A和B,B接收A处理好的数据。假如A处理10个数据的时间,B只能处理5个数据,那么就会丢失5…

docker容器的三大核心技术UnionFS(下) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …