题目集8~9总结:航空货运管理系统设计与实现

一、前言
本次题目集8~9围绕"航空货运管理系统"展开,主要考察面向对象程序设计能力。题目集包含1道综合性编程题,要求完成一个完整的航空货运管理系统,涉及客户管理、货物分类、航班调度、订单处理等核心功能。

知识点覆盖:

面向对象三大特性(封装、继承、多态)

抽象类与接口的应用

集合框架的使用

输入输出处理

二、设计与分析
题目集8分析
类图设计:
题目集8类图

核心类结构:

Customer抽象类作为基类

IndividualCustomer和CorporateCustomer作为具体客户类型

Cargo接口定义货物行为

三种具体货物实现类

SourceMonitor报表关键指标:

方法平均复杂度:2.3

最大复杂度:5(出现在费率计算方法)

注释率:18.5%

类平均方法数:6.2

设计亮点:

合理使用抽象类统一客户共性

通过接口实现多种货物类型

采用Stream API简化集合操作

题目集9改进分析
新增功能:

支付方式模块

航班载重控制

更完善的订单打印功能

类图演进:
题目集9类图

复杂度变化:

平均复杂度升至2.7

新增支付方式增加了系统灵活性

订单类承担了过多职责(需改进)

关键代码分析:

java
// 订单运费计算逻辑
public double getTotalFreight() {
double total = cargos.stream()
.mapToDouble(Cargo::calculateFreight)
.sum();
return total * customer.getDiscountRate();
}
这段代码很好地结合了Stream API和多态特性,是系统的核心算法之一。

三、采坑心得

  1. 对象创建问题
    问题现象:
    初始版本在Main类中直接创建对象,导致:

创建逻辑分散

新增类型需要修改多处代码

测试数据:

Corporate C001 公司A 13800138000 北京
Normal 2
N001 货物1 10 20 30 15
N002 货物2 15 15 15 10
CA123 北京 上海 2023-05-20 50
...
解决方案:
引入简单工厂模式,将对象创建集中管理:

java
class CargoFactory {
public static Cargo createCargo(String type, String id,
String name, double width,
double length, double height,
double weight) {
switch(type) {
case "Normal": return new NormalCargo(...);
// 其他类型...
}
}
}
2. 运费计算问题
错误案例:
最初将运费计算逻辑放在Main类中,违反了单一职责原则。

改进方案:
将计算逻辑分散到各货物类中,通过多态实现差异化计算。

测试结果对比:

方案 可维护性 扩展性 代码复用率
集中计算 差 差 低
分散计算 优 优 高
3. 航班载重控制
边界条件:
未考虑多个订单分配到同一航班的情况,导致载重计算错误。

修复方案:

java
// Flight类中添加方法
public synchronized boolean canAddCargo(double weight) {
return currentLoad + weight <= maxLoadCapacity;
}
使用synchronized保证线程安全

四、改进建议

  1. 架构层面
    引入分层架构:

将系统分为表现层、业务层、数据访问层

例如将订单打印功能分离到View层

应用DDD原则:

识别聚合根(如Order)

划分限界上下文(货运、客户、支付等)

  1. 代码层面
    费率计算重构:

java
// 使用策略模式替代if-else
interface RateStrategy {
double calculateRate(double weight);
}

class NormalRateStrategy implements RateStrategy {
public double calculateRate(double weight) {
// 实现具体逻辑
}
}
引入建造者模式:

java
Order order = new Order.Builder()
.withOrderId("O001")
.withCustomer(customer)
// 其他参数
.build();
增强异常处理:

java
public Flight(String flightNumber, ...) {
if (maxLoadCapacity <= 0) {
throw new IllegalArgumentException("载重必须大于0");
}
// ...
}
3. 功能扩展建议
添加货物追踪功能

实现运费分段计价

支持国际货运关税计算

增加数据持久化层

五、总结
通过这两次题目集的练习,我的收获主要体现在以下几个方面:

面向对象设计能力:

掌握了抽象类与接口的实际应用场景

理解了多态在业务系统中的价值

学会了识别类之间的关系

系统思维培养:

从全局视角设计系统架构

平衡功能的完整性与代码的简洁性

考虑业务规则的可扩展性

工程实践能力:

使用工具分析代码质量

通过重构持续改进设计

编写可维护的业务代码

需要进一步学习的领域:

设计模式的深入应用

这两次题目集让我深刻体会到,好的软件设计不仅要实现功能,更要考虑可维护性和扩展性。航空货运管理系统从简单实现到逐步完善的过程,正是我们面向对象编程能力成长的缩影。

posted @ 2025-05-23 14:08  yukinoacb  阅读(32)  评论(0)    收藏  举报