第二次Blog作业—航空货运管理系统
前言:在Java课程学习这段时间,题目集8和9可真是让我收获满满,也踩了不少坑。这两次题目集都围绕“航空货运管理系统”展开,就像一场升级打怪的冒险,从基础的类设计,一路打到继承与多态的进阶关卡。咱就是说,知识点、题量和难度,都值得好好唠一唠。
知识点:题目集8刚开始,主要就是搞类设计。我得琢磨着怎么把客户、货物、航班和订单这些信息,分别用合适的类来管理。这就像是给不同的东西找个“家”,每个“家”还得有自己的规矩,能处理相关的事儿。到了题目集9,直接开启“进阶模式”,继承与多态闪亮登场。客户得区分个人和企业了,货物也根据类型有不同的计费玩法,一下子就把面向对象编程的深度和广度给拓展了,感觉打开了新世界的大门。
题量与难度:题量上,这俩题目集都围绕着航空货运管理系统,输入输出格式虽然有点固定,但要处理的信息细节那叫一个多。题目集8相对来说还算“友好”,属于中等难度,就像新手村的小挑战,主要是搭好系统的基本类框架。可到了题目集9,难度直接飙升,继承与多态的加入,让类的关系变得错综复杂,感觉像走进了迷宫,得小心翼翼地规划每个类的关系和功能,真的是一场烧脑大作战。
设计与分析:
题目集8类结构设计:
1.Client类:这就是客户信息的小仓库,装着客户编号、姓名、电话和地址。用private把属性藏起来,再用public的方法去拿这些信息,就像给仓库上了把锁,只有有钥匙(方法)的人才能打开。这样能保证客户信息不会被乱改,安全性和一致性杠杠的。
2. hipmentItem类:专门对付货物信息,编号、名称、长宽高还有重量都在这儿。而且它还有个计算计费费率的方法,根据货物重量来定费率,超过50kg一个价,没超过又是另一个价。这就像给货物运输费用定了个小规则,让货物计费这块有章可循。
3.Airplane类:航班的事儿都归它管,航班号、起降机场、日期,还有最重要的载重量。它能算出还能装多少货,判断能不能接这个订单的货,装上货之后还能更新载重量。就像航班的小管家,把航班载重量的事儿安排得明明白白。
4.Order类:订单的各种信息都汇总在这儿,订单号、日期、发件收件信息,还有货物列表。它能算出订单货物的总重量和总费用,还能把订单信息整整齐齐地展示出来,是订单处理的核心“枢纽”。
优点:整体代码看着挺清爽,每个类干自己的活儿,互不干扰,这“高内聚、低耦合”的原则算是整明白了。比如Client类就专心管客户信息,和其他类交流就靠传递必要的参数,简单直接。处理订单的时候,各个类配合得也不错,像接力赛一样,一个接一个完成自己的任务,把订单流程顺顺利利地走完。
缺点:不过这代码也有短板,就是扩展性不太够。要是哪天来了新的客户类型或者货物类型,感觉现有的类结构得大动干戈。就拿货物计费来说,现在就靠重量算费率,要是以后还得看尺寸、运输距离啥的,这代码改起来可费劲了,感觉得重新捋一遍逻辑。

题目集9:类结构设计
1.Customer抽象类:这是客户类的老祖宗,把客户的通用信息都收拢起来了,编号、姓名、电话和地址都在这儿。设计成抽象类,就像立了个规矩,让后面的个人客户类和企业客户类都得照着这个规矩来,还防止有人瞎实例化它,代码规范这块拿捏得死死的。
2.IndividualCustomer类和CorporateCustomer类:它们从Customer抽象类继承下来,分别代表个人客户和企业客户。用父类的构造函数把基本信息初始化好,虽然现在还没加啥特殊的东西,但以后要是企业客户有特殊要求,在这个类里就能轻松扩展,继承的优势就体现出来了。
3.Cargo类:货物的基本信息都在这儿,还多了个货物类型枚举。根据不同的货物类型来算计费费率,普通货物、加急货物、危险货物,费率都不一样。这样计费规则就很清晰,以后要是改费率或者加类型,也好找地方改。
4.Order类:和题目集8比,它加了支付方式枚举的处理,在算订单总费用和展示订单信息这些地方也优化了不少。算总费用的时候,考虑了不同货物类型的费率,展示订单信息的时候,格式和内容都更细致,看着更专业了。
5.Flight类:基本功能和题目集8差不多,不过方法名字和功能实现更规范了,像获取剩余载重量的方法叫getAvailableCapacity,看着就更明白,代码规范这块进步明显。
优点:继承与多态这俩“大杀器”一用,代码的扩展性和可维护性直接起飞。有了抽象类和子类,不管是客户类型还是货物类型,再来新的都能轻松接住。比如再来个新客户类型,建个新子类继承Customer抽象类,把业务逻辑一写就行,完全不影响其他代码。而且在算货物费用、展示订单信息这些地方,多态一用,代码简洁又灵活,真的香。
缺点:不过有利就有弊,代码复杂程度直线上升。处理继承关系和多态调用的时候,特别容易出问题。比如子类重写父类方法,要是方法名字或者参数啥的没弄对,或者没好好调用父类方法,运行的时候就报错,而且还不好找错在哪。还有枚举类型和类之间的关联多了,调试起来也更麻烦,得仔仔细细检查每个类之间的互动,一个不小心就容易漏掉问题。

采坑心得:
题目集8:
1.数据输入处理问题:处理货物信息输入的时候,货物数量是动态的,在循环读货物属性时,我可没少掉坑里。有时候输入顺序错了,有时候数据类型转换出问题。比如输入的重量不是数字,转double的时候就报错。后来我就学聪明了,输入的时候加个格式检查,用正则表达式看看是不是对的格式,转换类型的时候用try - catch把异常抓住,错了就提示重新输,这才解决了问题。
2.航班载重量逻辑判断问题:判断航班能不能装订单货物的时候,我一开始没弄清楚航班当前载重量和最大载重量的关系。加载货物后没更新当前载重量,后面订单判断的时候就乱套了。后来我在Airplane类里专门加了个方法管载重量更新,每次加载货物就调用它,这才让航班载重量的判断准确起来。
题目集9:
1.继承关系中的构造函数调用问题:在弄个人客户类和企业客户类继承Customer抽象类的时候,构造函数调用给我整懵了。一开始没搞懂子类怎么调父类构造函数,结果客户对象初始化的时候属性没赋值对。后来我仔细研究了Java继承里构造函数的调用规则,知道用super关键字在合适的时候调用父类构造函数,这才把客户信息初始化的问题解决了。
2.多态方法调用问题:算货物计费费率的时候,虽然有不同货物类型的规则,可我对方法重载和重写理解不够,调用方法就出错了。在订单类算总费用的时候,没正确调用不同货物类型的计费方法,算出来的费用不对。后来我深入学了多态原理,搞清楚方法调用的优先级和规则,在订单类里用多态正确调用货物类计费方法,这才把费用算对了。
测试结果分析:
测试的时候,我用了好多测试用例,就为了看看代码对不对。题目集8主要测不同客户、货物、航班信息组合,还有订单总重量和费用算得对不对,重点看航班载重量判断准不准。测完发现了上面那些问题,改了之后就好多了。题目集9除了基本功能,还重点测继承和多态对不对,比如不同客户、货物类型处理得咋样,支付方式对不对。通过一堆测试用例,我不断调整代码,让代码更稳定可靠。


改进建议:
代码结构优化:
1.题目集8的代码,我觉得可以试试设计模式,比如工厂模式。用它来创建客户、货物这些对象,以后要是加新类型,在工厂类里改就行,不用到处改代码,能让代码更好维护和扩展。
2.题目集9的代码,虽然用了继承和多态,但类的层次结构还能优化。可以把一些通用方法提到抽象类里,减少子类代码重复。枚举类型相关的业务逻辑也可以再封装一下,让代码更简洁好懂。
错误处理与日志记录:
1.这两次题目集的代码,都得加强错误处理。除了用try - catch抓异常,还能把异常信息记到日志文件里。用Log4j这样的日志框架,把异常、输入错误啥的都记下来,出问题的时候就能顺着日志找原因,方便多了。
2.对于用户输入错误,光在控制台提示还不够。要是能有个友好的交互界面,像图形化界面里用对话框提示错误,再给个重新输入的按钮,用户体验肯定能提升不少。
代码复用与模块化:
1.看这两次题目集的代码,发现有些地方重复了,像输入数据的校验和类型转换。可以把这些代码抽出来,放工具类里,像InputUtils。以后要用直接调工具类方法,代码复用率就上去了,也不用到处写重复代码。
2.还能把代码模块化,客户管理、货物管理、航班管理、订单管理分开成不同模块,每个模块管自己的事儿,模块之间用接口交流。这样代码结构更清楚,团队开发或者自己维护都更方便。
总结:
经过题目集8和9的洗礼,我在Java面向对象编程上有了一定的收获。从一开始懵懵懂懂设计类,到后来熟练运用继承与多态,感觉自己像个“代码建造师”,一点点搭建起更复杂、更强大的系统。这过程中,我不仅学会了怎么设计合理的类结构,还明白了代码的可维护性、扩展性和健壮性有多重要。
学习收获:
1.现在我对类的设计原则门儿清,能根据需求把类的职责安排得明明白白,封装、继承、多态也能灵活运用。通过实际项目,我对面向对象编程的理解更深刻了,遇到问题也能更熟练地用这些概念解决。
2.代码调试和解决问题的能力也大幅提升。碰到错误和异常,我能通过分析错误信息、用调试工具找到问题,还学会了写测试用例验证代码。测试结果分析也让我知道怎么把代码写得更严谨。
3.我还懂了代码优化的门道。通过分析和改进代码结构,我知道怎么让代码更好读、更好维护、更好扩展。设计模式、代码复用和模块化这些方法,都能让代码更高效简洁。
进一步学习方向:
1.我打算深入研究更多设计模式,像代理模式、观察者模式,把它们用到项目里,让代码质量更上一层楼。
2.java的高级特性,像泛型、反射,我也得好好学学。这些特性在处理复杂业务逻辑的时候肯定能派上大用场,能让我的编程水平再提升提升。
3.软件测试这块我也得加强,除了写简单测试用例,还得学学自动化测试工具,像JUnit、Selenium,提高测试效率和覆盖率,保证代码质量杠杠的。
对课程及作业的建议:
1.课程方面:老师讲知识点的时候,要是能多来点实际项目案例分析就好了。通过具体案例,我们能更好理解知识点咋用。还可以讲讲前沿技术和最佳实践,拓宽我们的视野,让我们更有学习动力。
2.作业方面:作业里可以加点开放性问题,比如航空货运管理系统让我们想想怎么优化扩展,满足不同需求。这样能锻炼我们的独立思考和创新能力。作业反馈和评价也希望能更详细及时,让我们清楚自己哪儿学得好,哪儿还得加把劲。
这次对题目集8和9的总结,就像给我的学习之路做了个复盘。清楚了自己的收获和不足,也明确了以后的学习方向。以后我就朝着提升编程能力和解决实际问题能力的目标,继续冲冲冲!

浙公网安备 33010602011771号