第三次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);
}
}
三、采坑心得
- 输入处理边界问题:初期未对货物尺寸进行非负校验,导致计算异常。改进后:
public void setDimensions(double length, double width, double height) {
if(length <= 0 || width <= 0 || height <= 0) {
throw new IllegalArgumentException("尺寸必须为正数");
}
// 设置值...
}
- 类职责混乱:Order类曾同时承担订单管理、费用计算和输出功能。重构后:
// 分离职责
public class Order {
// 只负责订单数据管理
}
public class OrderCalculator {
// 负责费用计算
}
public class OrderPrinter {
// 负责订单输出
}
- 多态与容器类型陷阱:子类方法签名不一致导致异常。修正后:
// 基类
public abstract class Element {
public abstract String display();
}
// 子类
public class Point extends Element {
@Override
public String display() {
// 保持一致的方法签名
}
}
四、改进建议与总结
课程建议
-
增加设计模式案例教学,如工厂模式创建客户/货物对象
-
加强性能优化内容,如集合框架性能比较、调度算法优化
-
引入代码规范检查工具和单元测试要求
-
丰富项目类型,如图书管理系统、聊天系统等
学习总结
通过本课程,我系统掌握了面向对象编程的核心技术,培养了良好的设计思维:
- 理解了封装、继承、多态三大特性
- 掌握了抽象类、接口、集合框架等Java核心技术
- 培养了系统设计能力和问题解决能力
- 认识到代码质量和规范的重要性
未来我将继续深入学习设计模式和软件架构,提升系统设计能力,将面向对象思想应用到更多实践项目中。

浙公网安备 33010602011771号