第二次blog作业

  1. 前言
    本阶段题目集(8~9)以航空货运管理系统为核心,逐步深入面向对象设计(OOD)的核心思想。题目集8聚焦基础类设计与逻辑实现,题目集9则通过继承与多态实现系统扩展性,体现了从单一功能到复杂系统的设计演进。
    2.设计与分析:
    题目集08 7-3 NCHU_航空货运管理系统(类设计)
    第一次迭代代码的SourceMontor报表内容和类图如下:


类结构:
Client:存储客户基本信息(编号、姓名、电话、地址)。
Cargo:货物属性(编号、名称、尺寸、重量),计费重量=实际重量。
Flight:管理航班容量,验证订单总重量是否超限。
Order:整合客户、货物、航班信息,生成订单明细。
输入处理逻辑:
输入顺序固定,无类型字段(如客户类型、货物类型)。
货物数量通过循环解析,直接存入列表。
计费逻辑:
固定费率(如微信支付固定为25元/kg)。
总费用计算:总重量 × 固定费率。
第二次迭代代码的SourceMontor报表内容和类图如下:


类结构升级:
抽象基类:
AbstractClient:派生IndividualClient(个人客户)和CorporateClient(企业客户,享折扣)。
AbstractCargo:派生NormalCargo、ExpediteCargo、DangerousCargo(差异化计费规则)。
策略模式:
PaymentStrategy:接口定义calculateFee(),实现类WechatPayment、AliPayPayment、CashPayment。
输入处理改进:
新增类型字段解析(客户类型、货物类型、支付方式)。
输入校验增强(如客户类型仅限Individual/Corporate)。
计费逻辑升级:
货物计费规则:
普通货物:计费重量=实际重量,费率30元/kg。
加急货物:计费重量=体积重量与实际重量取最大值,费率40元/kg。
危险品:计费重量=实际重量×1.2,费率50元/kg。
支付策略:
微信支付:费率固定。
支付宝支付:总费用×0.95(95折)。
现金支付:无折扣。
3. 采坑心得:编码问题与解决方案
3.1 题目集8的典型问题
问题1:输入解析逻辑混乱
现象:处理多行输入时,因未明确数据顺序导致解析错误。
测试用例:当货物数量为0时,程序未处理异常。
解决:封装InputParser类,使用状态机管理输入流程。
问题2:硬编码费率
现象:费率直接写在Order类中,违反开闭原则。
数据:修改费率需改动多处代码。
解决:将费率配置移至外部文件,通过Properties类加载。
3.2 题目集9的多态陷阱
问题1:子类未覆盖抽象方法
现象:DangerousCargo未实现getRate(),运行时抛出AbstractMethodError。
测试用例:未覆盖所有货物类型的单元测试。
解决:使用IDE的@Override注解强制检查,并补充测试用例。
问题2:策略模式初始化复杂
现象:支付策略工厂类包含冗余条件判断。
优化:通过反射动态加载策略类,简化工厂逻辑:
4. 改进建议:可持续优化方向
4.1 设计模式深化
工厂模式:引入CargoFactory根据类型动态创建货物对象。
观察者模式:当航班载重变化时,通知相关订单更新状态。
4.2 性能与可维护性
输入校验增强:使用正则表达式验证电话号码、日期格式。
日志记录:集成Log4j记录系统操作,便于调试与审计。
4.3 测试全覆盖
边界测试:超重订单、空货物列表、无效支付方式等场景。
性能测试:模拟1000个并发订单,评估系统吞吐量。
5. 总结:收获与展望
5.1 学习成果
OOP核心能力:通过继承与多态实现高内聚、低耦合的设计。
设计模式实践:策略模式解决支付逻辑扩展问题。
工程化思维:从功能实现到可维护性设计的转变。
5.2 待提升方向
并发处理:多线程环境下的资源竞争与同步机制。
分布式系统:如何将单机系统扩展为微服务架构。
5.3 课程建议
案例驱动教学:增加企业级项目(如京东物流系统)的分析。
代码审查机制:通过Peer Review提升代码质量意识。
工具链集成:教授JUnit 5、Jacoco等测试与覆盖率工具。
结语:题目集8~9是面向对象设计思想的实战演练。通过这两次练习,我深刻体会到“代码的扩展性决定系统的生命力”。未来将继续探索设计模式与架构设计,致力于编写更优雅、更健壮的代码。

posted @ 2025-05-26 00:15  sgsgsgsg  阅读(17)  评论(0)    收藏  举报