面向对象设计与构造第一单元航班配载作业总结

一、前言
本单元课程学习围绕航班货物配载、重量管控、航空载重平衡三大核心业务展开,依次完成三次递进式编程习题集作业,整体学习节奏由浅入深,知识点层层叠加,从基础面向对象类封装逐步过渡到完整业务流程开发,完整模拟了小型航空货运管理系统的开发迭代过程。
三次习题集整体题量适中,整体难度平稳上升,不存在难度骤增情况,作业考察侧重点各有不同。第一次习题集偏向 Java 基础语法、实体类封装、集合基础使用与简单排序逻辑,整体难度偏低,主要用于熟悉面向对象基本编写规范;第二次习题集在原有货物管理基础上拓展多货舱划分、定向货物分配、多层级重量校验,增加业务分支判断,难度有所提升;第三次习题集融合旅客重量、行李重量、前后舱分区装载、力矩运算、航空重心百分比计算以及安全配平判定,贴合真实航空实操场景,业务逻辑最为复杂,也是本单元综合性最强的一次作业。
从知识点覆盖层面来看,三次作业依次巩固了私有成员变量封装、构造方法设计、getter 与 setter 规范编写、List 集合遍历、自定义排序算法、BigDecimal 高精度数值处理、输入数据合法性校验、对象组合调用、静态常量定义、数学公式业务化落地、程序异常流程拦截等核心内容。在完成三次作业的过程中,我逐步摆脱以往面向过程的编程思维,建立起以对象为核心、职责分层划分的面向对象编程思想,同时也在多次调试与评测过程中,发现自身代码编写、边界逻辑处理、输出格式把控上存在诸多漏洞,尤其是第三次习题集出现部分测试点未通过的情况,让我意识到工程级代码编写不仅要实现基础功能,更要兼顾流程严谨性、输入容错性与题目格式规范性。
本次总结博客将结合本人三次作业实际提交源码,从代码设计结构、源码运行逻辑、工具复杂度分析、实际做题踩坑经历、代码优化改进思路以及课程学习整体感悟多个维度进行全面复盘,做到结合代码实际、结合测试数据、结合报错结果进行分析,摒弃空泛论述,完成阶段性学习梳理。
二、设计与分析
(一)第一次习题集:基础航班货物排序与超载判定

  1. 整体类结构设计
    本次作业我共划分五大核心类,严格遵循基础封装思想进行编写,分别为货物实体类Cargo、货物排序工具类CargoSorter、装载清单管理类LoadManifest、航班信息类Flight以及程序主入口类Main,各类之间分工明确,无冗余职责交叉。
    Cargo类作为最小数据实体,私有化定义货物名称与重量属性,构造方法完成参数初始化,考虑到浮点数值运算精度丢失问题,重量属性直接采用BigDecimal类型存储,同时提供对外获取数据的 get 方法,严格遵循封装原则,拒绝外部直接修改成员变量。LoadManifest类专门负责统一管理当前航班所有货物集合,实时统计货物总重量,实现货物批量添加与总重量实时累加功能。Flight航班类整合航班编号与最大限定载重,关联装载清单类,完成航班整体数据整合。独立编写CargoSorter工具类,将排序逻辑与业务实体彻底分离,采用手写选择排序算法,实现货物按照重量从大到小降序排列。主类仅负责控制台数据录入、对象实例化调用、结果格式化输出,不掺杂复杂业务逻辑。
  2. 源码运行逻辑与设计心得
    程序运行流程为先读取航班编号、航班最大载重限制、货物数量,循环录入每一件货物信息并完成货物对象创建,统一加入航班装载清单中,调用排序工具类完成货物重量排序,遍历输出排序完成后的所有货物信息,最后统计航班货物总重量,与航班最大载重进行数值比对,判定航班配载处于正常状态还是超载状态。
    在代码编写过程中,我刻意区分普通double浮点类型与BigDecimal高精度类型的使用场景,在重量对比、数值累加环节全部使用compareTo方法完成判断,规避浮点运算出现的数值偏差问题。从代码结构层面而言,本次作业设计较为合理,实现了数据层、工具层、业务层的简单分离,代码可读性较强。但同时也存在明显不足,全程使用手写选择排序,未调用 Java 内置集合排序工具,代码执行效率偏低;同时未添加任何输入数据合法性校验,面对负数重量、空数据等异常输入无任何拦截机制,代码健壮性存在明显短板。
  3. 第一次代码部分如下

image

(二)第二次习题集:多货舱划分与定向货物分配

  1. 整体类结构设计
    在第一次作业基础上完成功能迭代升级,本次新增仓位位置类Position、独立输入校验工具类InputValidator、货物调度分配类LoadDispatcher,重构货物实体类与货舱管理类,形成更为完善的分层架构。
    Position类用于存储货舱行列位置信息,规范化仓位位置表述;重构后的Cargo类新增目标货舱编号属性,实现货物定向装载需求;CargoCompartment货舱实体类独立管理单个货舱的最大载重、已装载货物集合、实时总重量,单独封装货舱超重判定方法;Flight航班类不再单一管理货物清单,转而统一管理多个不同编号的独立货舱,提供根据货舱编号精准查找货舱的方法;LoadDispatcher调度类负责完成批量货物排序,本次采用手写冒泡排序实现重量降序排列;InputValidator工具类单独封装整数、浮点数范围校验方法,统一规范输入校验逻辑。
  2. 源码运行逻辑与设计心得
    程序先录入航班基础起飞参数与业载参数,依次创建多个不同载重、不同行列规格的货舱并绑定至航班对象,再批量录入所有待装载货物信息,统一完成货物重量降序排序,根据货物预设的目标货舱编号,自动匹配对应货舱完成装载,装载完成后逐一判定单个货舱是否超载,最后汇总全航班所有货物总重量,分别对比航班最大起飞重量与最大业载重量,分级输出不同程度的超载警告信息。
    本次作业架构相比第一次更加贴合实际业务,多对象组合调用更加流畅,独立校验工具类的加入也让代码容错性有所提升。但源码依旧存在两处核心缺陷,其一放弃了第一次使用的BigDecimal高精度类型,重新使用double存储重量数据,大批量货物累加后极易出现精度误差;其二货物装载逻辑仅完成形式上的分配,未在装载前严格校验货舱剩余容量,存在超限强行装载的逻辑漏洞;同时字符串货舱编号匹配过程中,初期误用==进行比对,后期整改为equals方法,也体现出字符串比对细节掌握不够扎实。
  3. 第二次代码部分如下

image

(三)第三次习题集:旅客行李整合与航空载重平衡计算

  1. 整体类结构设计
    本次为本单元综合性最强的作业,融合旅客、随身行李、分区货物、航空力学配平等多重业务,类结构设计最为完善,划分出行李类Luggage、旅客类Passenger、货物类Cargo、分区货舱类CargoCompartment、整合航班类Flight以及核心载重平衡计算工具类WeightBalanceCalculator。
    Luggage行李类单独封装行李重量属性;Passenger旅客类设定固定人均标准体重 75kg,整合自身重量与随身行李重量,计算单人整体重量;货舱类分为前舱与后舱两大装载区域,内部封装货物新增、货物 ID 升序排序、货舱超重判定等功能;Flight航班类统一收纳全体旅客信息与前后两大核心货舱,整合全航班人员与货物数据;WeightBalanceCalculator作为整个程序的核心静态工具类,统一定义航空配平固定常量,包含空机重量、各类物品标准力臂、重心安全区间等,封装力矩计算、整体重心 CG 计算、重心百分比 % MAC 换算、配平安全等级判定等核心业务公式,所有复杂数学运算统一归集在此类中,实现数据与运算逻辑彻底解耦。
  2. 源码运行逻辑、评测结果与错误分析
    本次作业我最终评测得分70/100,顺利通过重心高低危险判定、行列位置校验、基础非法数值校验等七组测试用例,但在前舱容量不足、后舱容量不足、前舱货物装载数量超限三组核心测试点出现答案错误,直接丢失 30 分,是本次作业最核心的问题所在。
    程序标准运行流程为录入航班编号、前后货舱规格与最大载重限制,录入旅客人数及每位旅客随身行李重量,再录入总货物数量、分配前后舱货物数量,依次录入货物信息完成装载,装载完成后自动排序舱内货物,调用配平计算工具类核算全航班空机重量、旅客总重量、货物总重量,累加计算整体起飞总重量,结合不同位置力臂核算整体力矩,换算出飞机实际重心与重心安全百分比,最终对照安全区间输出标准航空载重平衡舱单,并给出安全或危险的配平评估结果。
    结合评测报错详情分析自身源码存在的硬性逻辑漏洞:第一,货舱货物添加方法逻辑缺失前置容量判定,我编写的addCargo方法直接执行货物添加与重量累加操作,未在装载前判断当前货舱剩余载重是否能够容纳当前货物,导致超限货物依旧可以强行装入货舱,仅能在全部装载完成后统一判定超重,完全不符合题目 “容量不足禁止装载” 的核心要求,直接导致前舱、后舱容量不足两组测试用例判定失败。第二,前舱货物装载数量范围校验逻辑不完善,虽然源码中设置了frontCargoNum数值范围判定条件,但错误提示语句格式、程序终止时机未严格贴合题目标准要求,非法数值录入后未第一时间终止程序运行,依旧执行后续货物录入逻辑,造成输入范围非法测试点答案错误。第三,边界场景处理存在疏漏,货物重量、人员数量等非负校验仅完成基础拦截,未对临界零值、满负荷装载等极端场景做针对性逻辑适配,程序严谨性不足。
    从设计层面总结心得,本次作业面向对象思想落地最为彻底,静态工具类统一管理常量与计算公式的写法极大简化了主类代码冗余度,标准化舱单输出格式也贴合行业规范。但过度注重核心计算公式的实现,忽视了业务前置拦截、流程顺序把控等基础细节,重核心功能、轻边界校验,是本次作业失分最主要的原因,也让我深刻意识到编程评测中流程优先级高于核心运算。
  3. 第三次代码部分如下

image

  1. 第三次测试点情况

image

三、采坑心得
结合三次作业完整编写流程、多次调试过程以及第三次作业真实评测失分情况,以实际代码数据、逻辑流程、测试结果为依据,详细梳理全程遇到的各类问题与实操感悟,杜绝空泛总结。
(一)第一次作业实操踩坑
其一,BigDecimal数值对比失误,初期习惯使用基础数据类型==等值比对方式编写代码,忽略BigDecimal属于引用数据类型,无法使用常规等值符号判断大小,多次出现重量比对结果错误,反复调试后才熟练掌握compareTo方法的三种返回值判定规则。其二,选择排序排序方向颠倒,最开始编写排序内层循环时,判定条件书写错误,实现了货物重量升序排列,与题目要求的降序排列截然相反,耗费大量时间核对循环逻辑才完成修正。其三,输出格式把控不严,使用printf格式化输出时,小数保留位数设置混乱,部分输出结果格式不统一,出现多余空格、小数位数不整齐等细节问题。
(二)第二次作业实操踩坑
首先,字符串编号匹配出错,在编写货舱查找方法时,直接使用> ==比对货舱编号字符串,造成同编号货舱无法正常匹配,货物定向分配功能直接失效,后续整改为equals方法才恢复正常逻辑。其次,批量重量累加统计失误,遍历多货舱统计全航班货物总重量时,出现漏遍历单个货舱的低级失误,导致整体总重量统计数值偏小,超载判定结果出现偏差。最后,行文本拆分解析异常,使用split方法分割控制台多行录入数据时,未考虑数据空格分隔的统一规范,偶尔出现数组下标越界异常,输入解析稳定性较差。
(三)第三次作业实操踩坑(核心失分痛点)
第一,装载逻辑顺序本末倒置,这是本次作业最致命错误,正确业务逻辑应为先校验容量,再执行装载,而我的源码逻辑为直接装载,最后统一校验,完全违背题目评测规则,前后舱容量不足测试点直接零分。货物添加方法无任何前置判断,无论货舱剩余载重是否充足,都直接累加重量并存入货物集合,评测系统判定装载逻辑不合格。
第二,非法输入处置流程不规范,针对前舱货物数量超出总货物数量这一非法场景,虽然编写了数值范围判断代码,但错误提示文案未严格沿用题目标准文案,同时判定拦截后未使用 return 语句直接终止 main 方法运行,程序继续向下执行货物录入代码,产生冗余输出内容,系统自动判定答案错误。
第三,航空重心换算公式调试耗时久,初期编写 % MAC 重心百分比换算公式时,混淆机翼前缘位置参数与标准机翼长度参数,参数代入顺序颠倒,多次计算得出完全偏离标准范围的重心数值,反复对照公式推演、代入测试数据核算后,才修正公式参数顺序,完成精准计算。
第四,异常数据拦截存在遗漏,仅完成负数重量、负数人数的基础拦截,未对零货物、零旅客、空舱满载等极限业务场景做逻辑适配,代码覆盖测试用例范围不全。
(四)三次作业共性问题总结
纵观全部三次习题集编写过程,我自身存在三处长期未改正的编程陋习。第一,偏爱手写基础排序算法,三次作业分别使用选择排序、冒泡排序完成排序需求,全程未熟练运用 Java 自带Collections工具类内置排序方法,代码编写效率低、算法运行效率差。第二,前期忽视输入合法性校验,前两次作业几乎无完善的异常数据拦截代码,仅在第三次作业补充基础校验,代码整体容错能力偏弱。第三,代码注释编写偏少,核心业务逻辑、计算公式无简明注释标注,后期复盘查看源码时,需要重新梳理逻辑,代码可维护性较差。
四、改进建议
结合自身三份源码存在的逻辑漏洞、编写陋习、评测失分问题,从代码逻辑整改、架构优化、算法优化、健壮性提升、编写习惯五大维度,制定具备可落地性、可持续迭代的优化改进方案。
(一)核心逻辑针对性整改
优先完成第三次失分代码紧急整改,修正货舱货物装载核心逻辑,重构addCargo方法,在方法内部新增载重容量前置判定,仅当货舱剩余载重可容纳当前货物时,才执行货物添加与重量累加操作,同时返回布尔值反馈装载成功与否,严格贴合题目装载规则。规范所有非法输入拦截流程,所有数值范围判定完成后,使用 return 语句立即终止程序运行,杜绝冗余代码执行,错误提示文案严格参照题目标准格式编写,保证输出内容一字不差。
(二)整体代码架构优化
统一全作业数值存储规范,后续所有涉及重量、金额等需要精准运算的数值,全部统一使用BigDecimal类型存储与运算,彻底摒弃double浮点类型,从根源杜绝运算精度丢失问题。进一步深化职责单一设计原则,拆分超长业务方法,将输入解析、数据运算、结果输出三大模块彻底拆分,避免单个方法承载过多业务逻辑,降低代码耦合度。合理运用静态常量,将所有固定参数、安全区间、标准力臂等数据统一归集至静态常量区,摒弃代码内硬编码数值,便于后期参数统一修改维护。
(三)排序算法与工具调用优化
放弃手写基础冒泡、选择排序算法,熟练掌握Comparator比较器自定义排序规则,调用 Java 内置集合排序方法完成货物排序需求,将排序时间复杂度从 O (n²) 优化至 O (n log n),提升代码运行效率。针对多货舱查找匹配场景,摒弃传统 for 循环遍历查找方式,使用HashMap集合存储货舱编号与货舱对象映射关系,实现编号精准快速匹配,提升数据查找效率。
(四)程序健壮性与测试体系优化
搭建完善多层级输入校验体系,覆盖负数数值、超限数值、空数据、格式错误等全场景异常输入,完善异常捕获机制,使用 try-catch 异常捕获语句替代简单的 if 判断拦截,提升程序运行稳定性。扩充自测测试用例,日常编写代码完成基础功能后,自主设计边界测试用例、极限满载测试用例、非法异常测试用例进行自测,提前排查逻辑漏洞,避免正式评测出现大面积失分。
(五)个人编写习惯优化
养成先梳理业务流程、绘制简易逻辑流程图,再动手编写代码的习惯,杜绝边写边改、逻辑混乱的编写模式。规范代码注释编写习惯,对核心实体类作用、核心运算公式、特殊判定逻辑添加简明易懂注释,提升代码可读性与复盘效率。做完作业后及时使用简易复杂度分析工具自查代码,精简冗余判断语句,删减无效代码,持续优化代码整体质量。
五、综合总结
(一)本阶段学习收获
经过本单元三次航班配载系列作业的完整学习与实操练习,我成功完成了从面向过程编程思维到面向对象编程思维的平稳过渡,彻底掌握了 Java 基础面向对象核心语法与实操用法。在知识层面,熟练掌握实体类封装、对象组合调用、集合常用操作、高精度数值处理、业务公式代码落地、控制台规范输入输出等必备技能;在实操层面,熟悉了迭代式作业的开发模式,理解了简单业务系统从基础功能到复杂综合功能的升级思路;在心态层面,第三次作业部分测试点未通过的经历,让我摒弃了只追求核心功能实现的浮躁心态,深刻认识到程序编写细节、流程顺序、格式规范在课程评测与实际开发中的重要地位。
同时,通过编写航空载重平衡相关代码,我也初步了解了基础航空货运配载的简易行业常识,实现了编程语言知识与简易行业业务知识的融合学习,拓宽了代码编写的应用场景认知。
(二)自身现存不足与后续学习方向
目前我在面向对象编程学习中依旧存在诸多明显短板,首先是设计模式相关知识储备不足,仅能完成基础类划分与对象调用,无法灵活运用工厂模式、接口规范等进阶设计思想优化代码架构;其次是复杂多层嵌套业务逻辑梳理能力偏弱,面对多对象联动、多公式叠加的复杂场景,代码编写条理不够清晰;最后是自主测试与漏洞排查能力不足,无法快速精准定位隐藏性逻辑 bug,自测纠错效率偏低。
在后续的课程学习中,我将重点补齐面向对象进阶知识,系统学习常用基础设计模式,强化复杂业务逻辑梳理训练;增加算法练习频次,熟练掌握各类实用排序、查找工具用法;刻意加强边界场景、异常场景的代码编写练习,全方位提升代码严谨性与健壮性;同时坚持写完代码及时复盘总结,不断积累做题与调试经验。
(三)课程、作业与课堂组织改进意见
从学生学习实操角度出发,提出几点温和合理的课程优化建议,不提及课程难度相关问题。第一,建议课堂教学中增加简短代码实操演示环节,结合单元作业真题案例讲解类结构划分思路,帮助我们更快理清作业编写架构。第二,建议课后适当分享往届优秀作业源码与易错点汇总,通过优质代码对照学习,让我们直观发现自身代码编写存在的不足。第三,建议增加课后小组代码互查交流环节,同学之间互相查看作业源码,互相排查简单逻辑漏洞,在交流探讨中共同提升代码编写水平。第四,作业迭代式出题模式十分合理,循序渐进的需求升级能够稳步夯实编程能力,希望后续能够继续沿用此种作业布置模式。
整体而言,本单元的学习经历让我收获颇丰,三次迭代作业既是对 Java 基础语法的巩固,也是对面向对象编程思想的实战打磨。此次第三次作业的失分经历更是一次宝贵的经验教训,在今后的编程学习中,我会秉持严谨细致的编写态度,兼顾核心功能实现与细节逻辑把控,稳步补齐自身编程短板,认真完成后续所有课程学习与编程作业,不断提升自身代码编写能力与综合实操水平。

posted @ 2026-05-18 11:28  ht_Boost  阅读(8)  评论(0)    收藏  举报