第三次Blog作业

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

一、前言

作为计算机专业的核心课程,面向对象程序设计课程通过系统的教学安排和实践项目,使我全面掌握了面向对象编程的核心思想与技术。课程采用"理论学习-编程实践-设计分析-文档总结"的闭环教学模式,通过Blog作业、PTA编程作业、实验项目等多种形式,循序渐进地培养了我们的面向对象设计能力。

课程工作量呈现明显的递增趋势。初期PTA作业以基础语法和简单类设计为主,每周2-3题,每题目代码量约100-200行;中后期题目集8和9难度显著提升,如航空货运管理系统代码量突破1000行,Blog分析需8-10小时;实验项目如电梯调度系统更达到2000行以上规模,需要团队协作完成。

二、面向对象技术总结

1. 封装的理解与应用

封装是面向对象的基础特性,在航空货运系统中,我通过将客户信息封装在Customer类中,使用访问控制实现信息隐藏:

public class Customer {
    private String id;
    private String name;
    private String phone;
    
    // 封装getter/setter方法
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        if(id == null || id.isEmpty()) {
            throw new IllegalArgumentException("ID不能为空");
        }
        this.id = id;
    }
    // 其他属性和方法...
}

在电梯调度系统中,Elevator类封装了电梯状态和操作,外部只能通过定义好的接口交互,避免了状态不一致问题。

2. 继承与多态的实践

继承与多态是面向对象的核心概念。在航空货运系统中,我设计了客户和货物的继承体系:

// 客户继承体系
public abstract class Customer {
    // 公共属性和方法
}

public class IndividualCustomer extends Customer {
    // 个人客户特有属性
}

public class CorporateCustomer extends Customer {
    // 企业客户特有属性
}

// 货物继承体系
public abstract class Cargo {
    public abstract double calculateFreight();
}

public class NormalCargo extends Cargo {
    @Override
    public double calculateFreight() {
        // 普通货物计费逻辑
    }
}

public class DangerousCargo extends Cargo {
    @Override
    public double calculateFreight() {
        // 危险货物计费逻辑
    }
}

3. 抽象类与接口的设计

抽象类和接口是实现多态的重要手段。我设计了费率计算策略接口:

public interface RateCalculator {
    double calculateRate(double weight);
}

public class StandardRateCalculator implements RateCalculator {
    @Override
    public double calculateRate(double weight) {
        // 标准费率计算
    }
}

public class ExpeditedRateCalculator implements RateCalculator {
    @Override
    public double calculateRate(double weight) {
        // 加急费率计算
    }
}

4. 集合框架的应用

在航空货运系统中,我合理选择了集合类型:

// 使用LinkedHashMap保持订单插入顺序
private Map<String, Order> orders = new LinkedHashMap<>();

// 使用PriorityQueue实现请求优先级队列
private Queue<Request> requestQueue = new PriorityQueue<>(
    Comparator.comparingInt(Request::getPriority)
);

5. 异常处理机制

我加强了程序的健壮性处理:

public Cargo(String id, double weight, double volume) {
    if(weight <= 0 || volume <= 0) {
        throw new IllegalArgumentException("重量和体积必须为正数");
    }
    this.id = id;
    this.weight = weight;
    this.volume = volume;
}

// 业务异常类
public class OverloadException extends Exception {
    public OverloadException(String message) {
        super(message);
    }
}

三、采坑心得

  1. 输入处理边界问题:初期未对货物尺寸进行非负校验,导致计算异常。改进后:
public void setDimensions(double length, double width, double height) {
    if(length <= 0 || width <= 0 || height <= 0) {
        throw new IllegalArgumentException("尺寸必须为正数");
    }
    // 设置值...
}
  1. 类职责混乱:Order类曾同时承担订单管理、费用计算和输出功能。重构后:
// 分离职责
public class Order {
    // 只负责订单数据管理
}

public class OrderCalculator {
    // 负责费用计算
}

public class OrderPrinter {
    // 负责订单输出
}
  1. 多态与容器类型陷阱:子类方法签名不一致导致异常。修正后:
// 基类
public abstract class Element {
    public abstract String display();
}

// 子类
public class Point extends Element {
    @Override
    public String display() {
        // 保持一致的方法签名
    }
}

四、改进建议与总结

课程建议
  1. 增加设计模式案例教学,如工厂模式创建客户/货物对象

  2. 加强性能优化内容,如集合框架性能比较、调度算法优化

  3. 引入代码规范检查工具和单元测试要求

  4. 丰富项目类型,如图书管理系统、聊天系统等

    学习总结

通过本课程,我系统掌握了面向对象编程的核心技术,培养了良好的设计思维:

  1. 理解了封装、继承、多态三大特性
  2. 掌握了抽象类、接口、集合框架等Java核心技术
  3. 培养了系统设计能力和问题解决能力
  4. 认识到代码质量和规范的重要性

未来我将继续深入学习设计模式和软件架构,提升系统设计能力,将面向对象思想应用到更多实践项目中。

posted @ 2025-06-22 21:39  金币吧  阅读(13)  评论(0)    收藏  举报