题目集8-9总结性Blog:航空货运管理系统的面向对象设计与实现
题目集8-9总结性Blog:航空货运管理系统的面向对象设计与实现
前言
题目集8和题目集9是面向对象程序设计课程中的重要实践环节,主要围绕航空货运管理系统展开,深入考查了面向对象设计的核心原则和实现技巧。
知识点覆盖
两次题目集涵盖了以下核心知识点:
题目集8主要知识点:
- 类的基本设计与封装
- 继承机制的初步应用
- 方法重写与多态的基础概念
- 集合框架的使用(ArrayList等)
- 日期处理与格式化
- 异常处理机制
题目集9主要知识点:
- 抽象类与接口的设计
- 多态机制的深度应用
- 面向对象五大设计原则(SOLID原则)
- 工厂模式的应用
- 组合与聚合关系的实现
- 系统架构的可扩展性设计
题量与难度分析
题目集8:
- 题目数量:3题
- 难度等级:中等
- 主要挑战:类之间关系的建立和数据流转
题目集9:
- 题目数量:3题
- 难度等级:较高
- 主要挑战:面向对象设计原则的综合应用和系统架构的重构
从题目集8到题目集9,可以明显感受到难度的递进。题目集8更注重基础语法和简单的面向对象概念,而题目集9则要求学生具备更深层次的设计思维和架构能力。
设计与分析
题目集8航空货运管理系统分析
系统架构概述
题目集8的航空货运管理系统采用了相对简单的类设计结构,主要包含以下核心类:
Customer:客户信息管理Cargo:货物信息及费用计算Flight:航班信息管理Order:订单信息整合CargoDetail:货物明细处理

代码复杂度分析
通过SourceMonitor工具分析题目集8航空货运管理系统的代码质量:

主要指标分析:
- 代码行数:约300行
- 圈复杂度:平均1.67
- 类的耦合度:中等
- 方法长度:大部分在10-20行之间
设计特点与问题
优点:
- 类职责相对明确
- 基本的封装性得到保证
- 数据流转逻辑清晰
存在的问题:
- 缺乏抽象层次,扩展性不足
- 硬编码较多,如费率计算逻辑
- 违反开闭原则,新增货物类型需要修改现有代码
题目集9航空货运管理系统分析
重构后的系统架构
题目集9对系统进行了全面重构,引入了面向对象设计的五大原则:

核心设计改进
1. 单一职责原则的应用
每个类都有明确的单一职责:
Customer抽象类:专注于客户信息管理Cargo抽象类:专注于货物属性和费用计算Payment接口:专注于支付方式处理
2. 里氏替换原则的实现
通过继承体系确保了子类可以完全替换父类。
3. 开闭原则的体现
系统对扩展开放,对修改关闭。新增货物类型或支付方式无需修改现有代码。
4. 依赖倒置原则的应用
高层模块依赖于抽象,而非具体实现。Order类依赖于Customer、Cargo和Payment的抽象。
代码质量提升

对比分析:
- 代码行数:约500行
- 圈复杂度:0.00(SM测试出来的Average complexity项确实降为0.00)
- 类的耦合度:低(通过接口和抽象类降低耦合)
- 可维护性指数:显著提升
性能与扩展性分析
性能方面:
- 通过多态机制避免了大量的if-else判断
- 工厂模式提高了对象创建的效率
- 合理的继承层次减少了代码重复
扩展性方面:
- 新增客户类型:只需继承
Customer抽象类 - 新增货物类型:只需继承
Cargo抽象类 - 新增支付方式:只需实现
Payment接口
采坑心得
题目集8遇到的主要问题
问题1:费率计算逻辑混乱
问题描述:
初始实现时,将所有费率计算逻辑都写在了Cargo类的一个方法中,导致代码冗长且难以维护。
解决过程:
- 第一次提交:所有逻辑写在一个方法中,代码行数超过50行
- 第二次提交:尝试拆分方法,但仍然在同一个类中
- 最终解决:将不同类型的费率计算分别封装
心得体会:
单一职责原则不仅适用于类,也适用于方法。一个方法应该只做一件事情。
问题2:日期格式处理异常
问题描述:
在处理日期输入时,经常出现ParseException,导致程序崩溃。
数据分析:
- 主要原因:日期格式不统一
- 解决方案:统一使用
SimpleDateFormat并添加异常处理


题目集9遇到的主要问题
问题1:抽象类设计不当
问题描述:
初始设计时,将Customer设计为普通类而非抽象类,导致无法强制子类实现折扣率方法。
重构过程:
- 识别问题:发现
getDiscountRate()方法在父类中返回固定值 - 分析需求:不同客户类型应有不同的折扣率
- 重构方案:将
Customer改为抽象类,getDiscountRate()改为抽象方法
问题2:工厂模式实现复杂
问题描述:
在Main类中实现工厂方法时,出现了大量的if-else判断。
优化前后对比:
优化前:
- 代码行数:每个工厂方法15-20行
- 圈复杂度:6-8
- 可读性:较差
优化后:
- 代码行数:每个工厂方法8-12行
- 圈复杂度:3-4
- 可读性:良好
改进建议
代码层面的改进
1. 引入设计模式
建议引入的模式:
- 策略模式:用于费率计算策略的选择
- 观察者模式:用于订单状态变化的通知
- 建造者模式:用于复杂订单对象的构建
2. 异常处理机制优化
当前问题:
- 异常类型单一
- 错误信息不够详细
- 缺乏异常恢复机制
改进方案:
- 自定义异常类型
- 实现异常链传递
- 添加日志记录功能
3. 性能优化建议
内存使用优化:
- 使用对象池管理频繁创建的对象
- 实现延迟加载机制
- 优化集合类的使用
计算性能优化:
- 缓存费率计算结果
- 使用更高效的算法
- 减少不必要的对象创建
架构层面的改进
1. 分层架构设计
建议采用三层架构:
- 表示层:用户界面和输入输出处理
- 业务逻辑层:核心业务规则和计算
- 数据访问层:数据持久化和检索
2. 配置管理
建议实现:
- 费率配置外部化
- 支付方式配置化
- 系统参数动态调整
3. 扩展性设计
插件化架构:
- 货物类型插件化
- 支付方式插件化
- 费率计算插件化
测试策略改进
1. 自动化测试
建议实现:
- 单元测试自动化
- 集成测试自动化
- 性能测试自动化
2. 测试覆盖率提升
目标指标:
- 代码覆盖率:>90%
- 分支覆盖率:>85%
- 功能覆盖率:100%
总结
学习收获
通过题目集8-9的学习和实践,我深刻理解了面向对象程序设计的精髓:
1. 设计原则的重要性
SOLID原则的实际应用:
- 单一职责原则:让每个类都有明确的职责边界
- 开闭原则:通过抽象和多态实现系统的可扩展性
- 里氏替换原则:确保继承关系的正确性
- 接口隔离原则:设计精简而专注的接口
- 依赖倒置原则:依赖抽象而非具体实现
2. 架构思维的培养
从题目集8的简单类设计到题目集9的复杂系统架构,我学会了:
- 如何进行系统分析和设计
- 如何平衡复杂性和可维护性
- 如何设计可扩展的系统架构
3. 编程技能的提升
技术能力:
- 熟练掌握Java面向对象特性
- 理解并应用设计模式
- 具备代码重构能力
工程能力:
- 代码质量意识的提升
- 测试驱动开发的理念
- 文档编写和维护能力
需要进一步学习的领域
1. 高级设计模式
虽然在项目中应用了一些基础的设计模式,但对于更复杂的模式(如命令模式、状态模式等)还需要深入学习。
2. 系统架构设计
需要学习更多关于大型系统架构设计的知识,包括:
- 微服务架构
- 分布式系统设计
- 高并发处理
3. 性能优化技术
在性能优化方面还有很大的提升空间:
- JVM调优
- 算法优化
- 数据库优化
对课程的建议和意见
1. 教学内容方面
优点:
- 理论与实践结合紧密
- 题目设计循序渐进
- 注重实际应用能力培养
建议改进:
- 增加更多实际项目案例
- 加强代码审查和重构训练
- 引入更多现代开发工具和方法
2. 作业设计方面
优点:
- 题目具有很好的连贯性
- 难度梯度设置合理
- 注重设计原则的应用
建议改进:
- 提供更详细的评分标准
- 增加代码质量评估维度
- 加强同学间的代码交流
3. 实验组织方面
建议:
- 增加小组协作项目
- 加强版本控制方面的教学
4. 课堂教学方面
建议:
- 增加更多互动式教学
- 加强案例分析和讨论
- 引入业界最佳实践分享
结语
题目集8-9的学习过程是一个从简单到复杂、从理论到实践的渐进过程。通过这两次作业,我不仅掌握了面向对象程序设计的核心概念和技术,更重要的是培养了系统性的设计思维和工程实践能力。

浙公网安备 33010602011771号