第三次bolg作业
第三次blog作业
(1)前言:课程学习全景回顾
本课程以实战驱动理论的模式展开,通过PTA作业、实验项目和Blog反思构建完整学习闭环。在航空货运管理系统开发中,我深刻体会到:
- 工作量分布:JavaFX界面开发占40%,业务逻辑实现占30%,数据持久化占20%,异常处理占10%
- 难度曲线:多窗口数据传递最具挑战性,其次是集合框架的线程安全、物流状态机设计和JavaFX动画集成
- 课程节奏优势:PTA基础语法训练 → 实验项目模块化开发 → Blog技术反思,形成螺旋上升的学习路径
核心感悟:5000+行代码的实战让我明白——面向对象不是语法规则,而是解决复杂系统的思维方式
(2)面向对象技术应用总结
1. 封装
- 代码体现:
// 严格数据隐藏 public class Order { private String orderId; // 私有属性 public String getOrderId() { // 受控访问 return this.orderId; } } - 收获:在订单管理模块中,通过封装保证数据修改入口唯一性
- 不足:跨类边界控制(如
Flight与Order的载重校验)仍需加强
2. 继承与多态
- 实践案例:物流状态枚举实现多态行为
enum OrderStatus { PENDING { /* 待处理特有逻辑 */ }, IN_TRANSIT { /* 运输中逻辑 */ } } - 认知突破:在物流跟踪模块用
PathTransition实现不同状态动画(多态应用) - 痛点:向下转型(
instanceof)在订单编辑中的安全校验不够完善
3. 抽象类与接口
- 应用局限:未充分使用接口定义行为契约
- 改进方向:可设计
Payable接口统一支付方式:public interface Payable { void processPayment(Order order); } class WechatPay implements Payable {...}
4. 集合框架
- 高效应用:
// 使用Stream API处理订单 long pendingCount = orders.stream() .filter(o -> o.getStatus() == OrderStatus.PENDING) .count(); - 踩坑记录:
- 初期用
ArrayList直接删除元素导致ConcurrentModificationException - 改用
Iterator.remove()解决(见订单删除逻辑)
- 初期用
5. 异常处理
- 规范实践:
try (PrintWriter writer = new PrintWriter("orders.txt")) { // try-with-resources // 文件操作 } catch (FileNotFoundException e) { showAlert("文件错误", "数据文件丢失!"); } - 不足:自定义异常体系缺失(如
FlightOverloadException)
6. JavaFX
- 掌握能力:
- 控件数据绑定:
TableView与ObservableList联动 - 动画集成:物流跟踪的路径动画
- 控件数据绑定:
- 难点突破:
// 多窗口数据传递方案 flightCombo.setCellFactory(param -> new ListCell<Flight>() { @Override protected void updateItem(Flight item, boolean empty) { super.updateItem(item, empty); if (item != null) { setText(item.getFlightNumber() + " - " + item.getDepartureAirport()); } } }); - 架构缺陷:Controller中混入业务逻辑(如直接操作数据库)
(3)采坑心得:关键成长点
1. 集合框架的线程之痛
- 问题:在foreach循环中删除元素引发
ConcurrentModificationException - 解决方案:
// 正确姿势:使用迭代器 Iterator<Order> it = orders.iterator(); while (it.hasNext()) { if (it.next().isExpired()) { it.remove(); // 安全删除 } }
2. JavaFX线程阻塞陷阱
- 现象:数据库查询导致界面冻结
- 优化方案:
Task<Void> task = new Task<>() { protected Void call() { // 后台查询 return null; } }; new Thread(task).start(); // 异步执行
3. 对象关系设计失误
- 错误案例:初期让
User继承Address导致强耦合 - 重构方案:改用组合关系
public class User { private Address address; // 组合替代继承 }
总结:
本课程实现了从语法使用者到系统设计者的蜕变。最大的收获不是掌握多少API,而是学会用对象思维分解现实问题。建议增加代码重构实践:用学期末的知识优化前期代码,让成长肉眼可见。

浙公网安备 33010602011771号