最后一次第三次博客

Java面向对象程序设计课程总结

1. 前言

在本次Java面向对象程序设计课程中,通过系统的PTA作业、实验项目、线上课程学习和线下实践,我对面向对象编程有了更深入的理解。课程内容循序渐进,从基础语法到高级特性,再到图形界面开发,形成了完整的知识体系。

工作量与难度分析

  • PTA作业:共完成9次题目集,前7次侧重基础语法和简单类设计,后2次聚焦面向对象设计原则的应用
  • 实验项目:JavaFX航空货运管理系统是课程的高潮,整合了前期的知识
  • 线上课程:提供了丰富的学习资源,但需要较强的自主学习能力
  • 线下课程:通过讲解和答疑加深理解,课堂互动效果良好

整体工作量适中但富有挑战性,特别是题目集8和9的航空运输问题,需要综合运用多种面向对象技术。难度曲线合理,从基础到进阶,再到综合应用,符合认知规律。

2. 面向对象技术总结

2.1 封装

封装是面向对象的基石。通过PTA作业中的点线面问题、雨刷问题等练习,我掌握了将数据和操作封装在类中的技巧:

  • 使用private保护数据
  • 通过public方法提供访问接口
  • 隐藏实现细节,提高安全性

认知:良好的封装能减少耦合,提高代码可维护性。在航空货运系统中,将订单、货物等封装为独立类,使系统结构清晰。

2.2 继承

继承是实现代码复用的重要手段:

  • 在航空运输问题中,创建了Cargo基类和具体子类
  • 客户类继承体系的设计(个人/企业客户)
  • 合理使用super调用父类构造方法

认知:继承关系应符合"is-a"原则,避免过度继承导致类层次复杂化。在题目集9中优化了继承结构,使系统更灵活。

2.3 多态

多态是面向对象的精髓:

  • 通过接口实现多种支付方式(支付宝、微信、现金)
  • 使用父类引用操作子类对象
  • 运行时动态绑定方法

认知:多态提高了代码的扩展性。在物流追踪功能中,通过多态实现不同状态的处理逻辑。

2.4 抽象类与接口

这两者是面向对象设计的关键工具:

抽象类

  • 在题目集8中设计Calculable抽象类
  • 包含抽象方法和具体实现
  • 适用于有共同特征的类族

接口

  • 定义了Rateable、Discountable等接口
  • 实现多重行为继承
  • 解耦功能定义与实现

认知:抽象类强调"是什么",接口强调"能做什么"。在题目集9中优化了接口设计,使系统更符合开闭原则。

2.5 集合框架

集合框架是Java的核心组件:

  • 使用ArrayList管理订单集合
  • 通过HashMap实现快速查找
  • JavaFX中的ObservableList支持数据绑定

应用:在航空货运系统中,集合框架用于:

  • 订单管理
  • 货物列表存储
  • 物流状态跟踪

欠缺:对复杂集合(如ConcurrentHashMap)的使用还需加强。

2.6 异常处理

异常处理保证程序健壮性:

  • 文件操作中的IOException处理
  • 数据转换时的NumberFormatException捕获
  • 自定义异常的应用

认知:异常处理应遵循"早抛出,晚捕获"原则。在文件存储功能中,完善的异常处理保证了数据可靠性。

2.7 JavaFX

JavaFX是现代GUI开发框架:

  • FXML实现界面与逻辑分离
  • CSS美化界面
  • 属性绑定实现数据同步
  • 动画API创建物流追踪效果

掌握情况

  • 熟练使用布局管理器
  • 掌握事件处理机制
  • 能实现基本动画效果
  • 欠缺:复杂自定义组件开发能力

3. 踩坑心得

3.1 设计原则的理解偏差

在题目集8的航空运输系统初版设计中:

  • 过度设计了类层次结构
  • 接口职责不够单一
  • 类间耦合度过高

教训:通过重构,在题目集9中:

  • 简化类结构
  • 明确接口职责
  • 降低耦合度
  • 提高系统扩展性

3.2 调试技巧不足

在题目集8中:

  • 体积计算公式错误(乘法误写为加法)
  • 输出格式与预期不符
  • 冒号使用中英文混用

解决方案

  1. 使用IDE调试功能设置断点
  2. 编写测试用例验证核心算法
  3. 仔细核对输出规范
  4. 建立检查清单避免常见错误

3.3 JavaFX线程问题

在物流追踪功能开发中:

  • 后台线程直接更新UI导致崩溃
  • 动画控制逻辑混乱

解决方案

Platform.runLater(() -> {
    // UI更新代码
});

并重构动画控制逻辑,使用Timeline和KeyFrame管理动画状态。

3.4 集合的并发修改

在订单管理功能中:

  • 遍历时删除元素导致ConcurrentModificationException

解决方案

Iterator<Order> it = orders.iterator();
while(it.hasNext()) {
    if(shouldRemove(it.next())) {
        it.remove();
    }
}

3.5 文件路径问题

资源加载失败问题:

  • 相对路径与绝对路径混淆
  • 资源文件位置错误

解决方案

getClass().getResource("/style.css")

并统一资源管理策略。

4. 改进建议及总结

4.1 课程改进建议

  1. 增加代码评审环节

    • 组织同学互评代码
    • 学习优秀设计,发现不足
    • 建立代码质量标准
  2. 提供更多真实案例

    • 展示开源项目中的面向对象设计
    • 分析设计模式在实际中的应用
    • 增加企业级项目案例
  3. 强化测试驱动开发

    • 将单元测试纳入评分标准
    • 教授JUnit使用技巧
    • 培养测试思维
  4. 完善JavaFX教学资源

    • 提供更多自定义组件示例
    • 增加高级动画教程
    • 介绍MVVM设计模式
  5. 阶段性重构实践

    • 从简单实现开始
    • 逐步添加需求
    • 体验重构过程

4.2 个人学习总结

通过本课程的学习,我获得了以下收获:

  1. 面向对象思维的形成

    • 从过程式思维转向对象思维
    • 学会通过类和对象建模现实问题
    • 理解高内聚、低耦合的设计理念
  2. 设计能力的提升

    • 掌握SOLID设计原则
    • 学会使用UML设计类图
    • 能够设计可扩展的系统架构
  3. 工程实践能力的增强

    • 版本控制(Git)的使用
    • 调试技巧的提升
    • 代码重构能力
  4. 综合应用能力的培养

    • 将多知识点整合应用
    • 开发完整的GUI应用
    • 解决复杂问题的能力

在航空货运系统的开发过程中,我经历了完整的软件生命周期:

  1. 需求分析
  2. 系统设计
  3. 编码实现
  4. 测试调试
  5. 重构优化

这个项目让我深刻体会到良好的设计对系统可维护性的重要性。

4.3 未来学习方向

  1. 设计模式深入学习

    • 掌握常用设计模式
    • 理解模式适用场景
    • 在项目中实践应用
  2. 并发编程

    • 深入理解Java并发模型
    • 掌握线程安全技术
    • 学习高性能并发设计
  3. Java生态圈

    • 学习Spring框架
    • 了解微服务架构
    • 探索响应式编程
  4. 重构能力提升

    • 学习重构技巧
    • 培养代码嗅觉
    • 实践持续重构

结语

Java面向对象程序设计课程不仅传授了技术知识,更重要的是培养了面向对象的思维方式。从题目集8的迷茫到题目集9的自信,这一成长过程让我体会到了编程的乐趣和挑战。

课程中的航空运输系统开发经历尤其珍贵,它让我将分散的知识点串联成完整的知识体系。通过不断的重构和优化,我深刻理解了"软件设计是一门艺术"的含义。

感谢课程设计的系统性,感谢教师的悉心指导,这些都将成为我技术道路上的宝贵财富。面向对象的思想不仅适用于编程,更是一种分析和解决问题的通用方法,这将是伴随我职业生涯的核心能力。

posted @ 2025-06-21 17:24  Asunaa  阅读(14)  评论(0)    收藏  举报