第三次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,而是学会用对象思维分解现实问题。建议增加代码重构实践:用学期末的知识优化前期代码,让成长肉眼可见。

posted @ 2025-06-22 21:43  windstreet  阅读(37)  评论(0)    收藏  举报