最后一次第三次博客
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中:
- 体积计算公式错误(乘法误写为加法)
- 输出格式与预期不符
- 冒号使用中英文混用
解决方案:
- 使用IDE调试功能设置断点
- 编写测试用例验证核心算法
- 仔细核对输出规范
- 建立检查清单避免常见错误
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 课程改进建议
-
增加代码评审环节
- 组织同学互评代码
- 学习优秀设计,发现不足
- 建立代码质量标准
-
提供更多真实案例
- 展示开源项目中的面向对象设计
- 分析设计模式在实际中的应用
- 增加企业级项目案例
-
强化测试驱动开发
- 将单元测试纳入评分标准
- 教授JUnit使用技巧
- 培养测试思维
-
完善JavaFX教学资源
- 提供更多自定义组件示例
- 增加高级动画教程
- 介绍MVVM设计模式
-
阶段性重构实践
- 从简单实现开始
- 逐步添加需求
- 体验重构过程
4.2 个人学习总结
通过本课程的学习,我获得了以下收获:
-
面向对象思维的形成
- 从过程式思维转向对象思维
- 学会通过类和对象建模现实问题
- 理解高内聚、低耦合的设计理念
-
设计能力的提升
- 掌握SOLID设计原则
- 学会使用UML设计类图
- 能够设计可扩展的系统架构
-
工程实践能力的增强
- 版本控制(Git)的使用
- 调试技巧的提升
- 代码重构能力
-
综合应用能力的培养
- 将多知识点整合应用
- 开发完整的GUI应用
- 解决复杂问题的能力
在航空货运系统的开发过程中,我经历了完整的软件生命周期:
- 需求分析
- 系统设计
- 编码实现
- 测试调试
- 重构优化
这个项目让我深刻体会到良好的设计对系统可维护性的重要性。
4.3 未来学习方向
-
设计模式深入学习
- 掌握常用设计模式
- 理解模式适用场景
- 在项目中实践应用
-
并发编程
- 深入理解Java并发模型
- 掌握线程安全技术
- 学习高性能并发设计
-
Java生态圈
- 学习Spring框架
- 了解微服务架构
- 探索响应式编程
-
重构能力提升
- 学习重构技巧
- 培养代码嗅觉
- 实践持续重构
结语
Java面向对象程序设计课程不仅传授了技术知识,更重要的是培养了面向对象的思维方式。从题目集8的迷茫到题目集9的自信,这一成长过程让我体会到了编程的乐趣和挑战。
课程中的航空运输系统开发经历尤其珍贵,它让我将分散的知识点串联成完整的知识体系。通过不断的重构和优化,我深刻理解了"软件设计是一门艺术"的含义。
感谢课程设计的系统性,感谢教师的悉心指导,这些都将成为我技术道路上的宝贵财富。面向对象的思想不仅适用于编程,更是一种分析和解决问题的通用方法,这将是伴随我职业生涯的核心能力。
浙公网安备 33010602011771号