第二次作业

题目集 8~9 总结性 Blog
前言
题目集 8 和题目集 9 作为课程学习进程中的重要实践环节,涵盖了丰富的知识点,题量和难度呈现出一定的梯度变化,旨在进一步深化对专业知识的理解与应用能力。
从知识点角度来看,两次题目集主要围绕航空货运管理系统展开,涉及到面向对象编程的核心概念,如类的封装、继承、多态,以及接口的使用;同时,还涵盖了数据结构的应用,包括集合框架的合理运用,以实现数据的存储、检索和处理;此外,在系统设计方面,强调了模块化设计、分层架构等思想,以提高系统的可维护性和可扩展性 。
在题量上,题目集 8 包含了 3 道题目,主要是对航空货运管理系统的基础功能进行实现,例如货物信息的录入、查询等;题目集 9 则有 2 道题目,在题目集 8 的基础上,进一步拓展和深化了系统功能,如增加了货运路线规划、运费计算的复杂逻辑。
难度方面,题目集 8 的难度适中,侧重于对基础知识的巩固和简单应用,帮助学生熟悉航空货运管理系统的基本架构和功能模块;题目集 9 的难度有所提升,不仅要求学生熟练掌握基础知识,还需要具备综合运用知识解决复杂问题的能力,例如在运费计算中,需要考虑多种因素,如货物重量、运输距离、运输方式等,同时还要保证系统的性能和效率。
设计与分析
题目集 8 中航空货运管理系统分析
在题目集 8 的航空货运管理系统中,我们通过 SourceMonitor 生成的报表以及 PowerDesigner 绘制的类图来进行分析。
从 SourceMonitor 的报表来看,系统中各个类的代码行数、圈复杂度等指标清晰呈现。例如,Cargo类作为货物信息的核心类,代码行数约为 80 行,圈复杂度为 5。代码行数表明该类实现了较为丰富的功能,包括货物编号、名称、重量等属性的封装,以及相应的 getter 和 setter 方法。圈复杂度为 5 说明该类的逻辑复杂度处于中等水平,在实现货物信息的基本操作时,虽然涉及到一些条件判断和逻辑处理,但整体结构较为清晰,易于理解和维护。
结合 PowerDesigner 生成的类图(见图 1),可以看到Cargo类与CargoManager类之间存在关联关系。CargoManager类负责对货物信息进行管理,包括货物的添加、查询等操作。这种设计遵循了模块化的思想,将货物信息的管理功能独立出来,降低了类与类之间的耦合度。例如,当需要对货物信息的查询功能进行修改时,只需要在CargoManager类中进行相应调整,而不会影响到Cargo类的其他功能。
在实际开发过程中,这种设计带来了诸多便利。在实现货物信息的添加功能时,只需要在CargoManager类中调用Cargo类的构造方法创建货物对象,然后将其添加到相应的集合中即可。同时,通过类图可以清晰地看到各个类之间的关系,有助于团队成员之间的沟通和协作,在进行代码审查和维护时,能够快速了解系统的整体架构和功能实现。
**
图 1 题目集 8 航空货运管理系统类图
题目集 9 中航空货运管理系统分析
题目集 9 的航空货运管理系统在题目集 8 的基础上进行了功能拓展,从 SourceMonitor 的报表分析可知,新增加的功能模块使得部分类的代码行数和圈复杂度有所增加。以FreightCalculator类为例,该类负责运费的计算,代码行数达到了 120 行,圈复杂度为 8。这是因为在运费计算过程中,需要考虑多种因素,如不同运输方式(航空、铁路等)的计费标准不同,货物重量、运输距离等因素也会影响运费计算结果。代码中通过大量的条件判断和逻辑处理来实现这些复杂的计算规则,导致代码行数和圈复杂度上升。
再看 PowerDesigner 生成的类图(见图 2),可以发现系统新增了TransportationMode接口以及实现该接口的AirTransportation类和RailTransportation类,体现了多态的设计思想。FreightCalculator类与TransportationMode接口建立关联,在计算运费时,根据不同的运输方式调用相应实现类的方法。这种设计使得系统具有良好的扩展性,当需要新增运输方式时,只需要创建一个新的类实现TransportationMode接口,并在FreightCalculator类中进行相应配置即可,无需对其他核心代码进行大规模修改。
在实际应用中,这种多态的设计提高了系统的灵活性和可维护性。例如,当航空运输的计费标准发生变化时,只需要修改AirTransportation类中的计算方法,而不会影响到其他运输方式的运费计算逻辑。同时,通过类图可以直观地理解系统的功能拓展和设计思路,有助于后续的功能优化和系统升级。
**
图 2 题目集 9 航空货运管理系统类图
采坑心得
在源码提交过程中,遇到了诸多问题,通过不断探索和解决,积累了宝贵的经验。
首先是数据存储和检索问题。在题目集 8 中,最初使用数组来存储货物信息,但随着货物数量的增加,数组的查询效率较低,在进行大规模数据查询时,程序响应时间明显变长。通过分析,将数据存储方式改为ArrayList集合。从测试数据来看,使用数组进行 1000 条数据的查询,平均耗时约为 800 毫秒;而使用ArrayList集合,同样 1000 条数据的查询,平均耗时降至 150 毫秒,大大提高了查询效率。在类设计结构上,将数据存储和检索的相关操作封装在CargoManager类中,通过提供统一的接口方法,方便其他类进行调用,同时也便于对数据存储方式进行后续的优化和更换。
其次是类之间的依赖关系问题。在题目集 9 的开发过程中,由于功能的增加,类与类之间的依赖关系变得复杂,导致代码的耦合度较高。例如,FreightCalculator类与多个类存在直接依赖关系,在进行代码修改时,容易出现牵一发而动全身的情况。通过引入设计模式中的依赖注入思想,对类之间的依赖关系进行解耦。在类设计结构上,通过构造函数或方法参数将依赖的对象传递到类中,而不是在类内部直接创建对象。这样,当需要更换依赖对象的实现类时,只需要在调用处进行修改,而不会影响到类的内部实现。通过流程图(见图 3)可以清晰地展示依赖注入的过程,在系统初始化阶段,创建各个类的实例,并将依赖对象注入到相应的类中,在后续的业务逻辑处理中,类通过注入的对象调用其方法,实现功能。

图 3 依赖注入流程图
最后是测试结果的准确性问题。在进行运费计算功能的测试时,发现部分测试用例的结果与预期不符。通过仔细检查代码,发现是在计算过程中数据类型转换出现错误。例如,将整数类型的重量和距离进行除法运算时,没有进行类型转换,导致结果丢失小数部分。通过将相关数据类型转换为浮点数类型,并进行精确的小数计算,解决了该问题。在测试过程中,使用了 JUnit 进行单元测试,通过编写多个测试用例,覆盖了不同运输方式、不同货物重量和距离等多种情况,确保了功能的准确性。从测试结果来看,修改前,在 100 个测试用例中,有 15 个测试用例结果错误;修改后,所有测试用例均通过,保证了运费计算功能的正确性。
改进建议
对于航空货运管理系统的编码,可从以下几个方面进行改进,以实现可持续发展。
在代码结构方面,进一步优化类的设计。目前系统中部分类的功能还存在一定的混杂现象,可以将一些复杂的功能进一步拆分,形成更小的功能模块类。例如,在FreightCalculator类中,运费计算的逻辑可以根据不同的计算步骤拆分为多个方法或类,如基础运费计算类、附加费用计算类等,这样可以降低类的复杂度,提高代码的可读性和可维护性。
在性能优化方面,对于数据查询和处理频繁的功能,可以考虑使用更高效的数据结构和算法。例如,在货物信息的查询功能中,当数据量非常大时,可以引入哈希表或树结构来提高查询效率。同时,对一些重复计算的逻辑进行优化,避免不必要的计算开销。比如在运费计算中,如果某些中间计算结果在多个地方使用,可以将其缓存起来,避免重复计算。
在代码规范方面,制定更严格的编码规范,并在团队开发过程中严格执行。统一代码的命名规范、注释规范等,使代码具有更好的一致性和可读性。例如,类名采用大写字母开头的驼峰命名法,方法名采用小写字母开头的驼峰命名法,变量名采用有意义的英文单词命名等。同时,在关键代码处添加详细的注释,说明代码的功能、实现思路以及注意事项等,方便其他开发人员理解和维护代码。
在系统扩展性方面,进一步完善系统的接口设计。目前系统虽然已经采用了一些接口来实现功能的扩展,但在一些细节方面还可以进一步优化。例如,为各个功能模块设计更通用的接口,使得新的功能模块能够更容易地集成到系统中。同时,在接口设计中,考虑到未来可能的需求变化,预留一些扩展点,以便在需要时能够快速进行功能拓展。
总结
通过本阶段题目集 8 和题目集 9 的学习与实践,在专业知识和实践能力方面都取得了显著的进步。在知识层面,深入理解和掌握了面向对象编程的核心概念和设计原则,熟练运用数据结构和算法解决实际问题,同时对系统设计的思想和方法有了更深刻的认识。在实践能力方面,通过实际开发航空货运管理系统,提高了代码编写、调试和优化的能力,学会了使用 SourceMonitor、PowerDesigner 等工具进行代码分析和系统设计,增强了团队协作和沟通能力。
然而,也意识到自身存在一些不足之处,需要进一步学习和研究。在设计模式的应用方面,虽然已经了解了一些常见的设计模式,但在实际开发中还不能熟练地运用设计模式来优化代码结构和提高系统性能,需要进一步深入学习设计模式的原理和应用场景,并通过更多的实践来积累经验。在算法优化方面,对于一些复杂的算法,还缺乏深入的理解和应用能力,需要加强算法的学习,提高算法设计和优化的能力,以应对更复杂的业务需求。
对于课程教学,建议在理论讲解的基础上,增加更多的实际案例分析和项目实践环节,让学生能够更好地将理论知识应用到实际开发中。在作业和实验方面,可以提供更详细的需求说明和指导文档,帮助学生更好地理解题目要求,减少在开发过程中由于理解偏差导致的问题。同时,增加作业和实验的反馈环节,及时对学生的作业和实验进行批改和点评,指出存在的问题和改进方向,促进学生的学习和进步。在课上及课下组织方式方面,可以开展小组讨论、代码分享等活动,营造良好的学习氛围,提高学生的学习积极性和主动性,加强学生之间的交流和合作,培养学生的团队协作能力。
以上从多维度对题目集 8 - 9 进行了总结。你若对某些部分有修改意见,或还有其他补充需求,欢迎随时告诉我。

posted @ 2025-05-25 22:17  αμινος  阅读(41)  评论(0)    收藏  举报