第一次blog作业

本学期在面向对象程序设计课程学习中,我依次完成了三次课程编程作业。这三次作业均围绕航空货运装载、多货舱分配及航空器载重平衡配平这一核心主题展开,内容前后连贯、知识点由浅入深层层递进,紧密贴合课堂所学的面向对象理论知识,实战性极强,每一次作业都是对所学知识的检验与巩固,也让我逐步从面向过程编程的思维模式中转变过来。
第一次作业侧重Java基础语法与面向对象入门知识的应用,重点练习类与对象的创建、成员变量的封装、键盘输入的读取、数组的使用以及基础冒泡排序算法的实现,初步建立起单一职责的编程设计思维,学会将不同功能拆分到不同的类中;第二次作业在第一次作业的基础上进行了功能升级与拓展,新增多货舱管理相关功能,重点练习多条件逻辑判断、货物的定向装载以及单货舱与整机的双重超载判定,进一步强化了代码模块化编写思维,提升了逻辑梳理能力;第三次作业则是前两次学习内容的全面整合与最终升级,新增旅客与行李信息录入模块,精准统计旅客及其随身行李的整体载重数据;同时融入航空载重平衡相关的专业计算内容,依靠固定的物理公式计算出整机总力矩、飞机实际重心以及重心百分比,以此判定飞机整体配平状态是否安全合规;此外还完善了全流程的输入数据校验机制,能够有效拦截负数、超限数值等各类非法录入数据,全方位提升了程序的完整性与实际使用实用性。三次作业的代码量、难度逐步提升,从基础入门到综合实战,让我逐步摆脱了传统面向过程的编程习惯,积累了扎实的代码实操经验,也清晰认识到自身在编程学习中的不足。
本次我结合自己三次作业编写完成的源代码,借助SourceMonitor代码静态检测工具生成的代码度量报表,对三次作业的设计思路逐一进行梳理、对代码结构进行详细分析,同时结合自身实际编写过程写下真实的学习心得,做到数据与实际编程经历紧密结合,客观反映自己在本阶段的学习成果与不足。
第一次作业要求编写一个简易的航班货运装载程序,核心需求是定义航班与货物两个核心实体类,通过键盘手动录入航班的最大载重数值以及各类货物的相关信息,包括货物名称、货物重量等,程序需要按照货物重量从高到低的顺序完成排序操作,自动统计所有货物的总重量,最终判断装载的货物总重量是否超出航班的额定载重,完整实现数据录入、货物排序、重量统计、结果输出的整套基础运行流程,同时要求遵循面向对象的基本规范,拆分功能模块,避免单一类包揽所有功能。
204f2930b44410453485adfa4b555791
通过SourceMonitor工具对本次编写的代码进行静态检测,能够直观查看代码的各项基础统计数据,具体数据显示:代码总行数166行,有效可执行语句84条,共划分6个功能类,平均每个类包含3.17个方法;分支语句占比15.5%,最大圈复杂度为6,平均圈复杂度1.61,最大代码嵌套深度为5;每个方法平均包含2.68条语句,注释率为0%,未添加任何代码注释。
这些数据完全符合入门级程序的特征,6个类的划分以及3.17的平均方法数,说明我在编写过程中已经初步践行了单一职责原则,每个类的职责相对单一,没有出现“一个类包揽所有功能”的情况,代码的模块化程度初步达标;较低的圈复杂度和嵌套深度,也说明程序的逻辑简单清晰,没有复杂的多层条件判断,代码的可读性和可维护性较好,便于后期调试和修改。但注释率为0%是本次代码的明显不足,由于初期没有养成编写注释的习惯,导致时隔一段时间再回看自己编写的代码,部分简单的逻辑都需要重新梳理,后续作业中需重点改进这一问题。
作为首次系统运用面向对象思想编写程序,我在动手编写代码之前,刻意改变了以往直接堆砌代码的坏习惯,先仔细梳理程序的整体运行步骤,再依据不同的运行步骤划分对应的功能模块,确保每个模块的职责清晰。在实际编码过程中,我遇到最多的问题就是键盘输入错乱、读取空内容等基础问题,比如使用nextInt()方法录入数字后,没有及时处理残留的换行符,导致后续使用nextLine()方法读取字符串内容时直接获取空值,反复调试了多次才找到对应的解决办法,也牢牢记住了Java键盘输入使用过程中的各类细节要点。在编写冒泡排序算法实现货物降序排列功能时,我还多次写错循环边界条件,频繁出现数组下标越界报错,只能一次次修改数值、逐行试运行代码,逐步修正所有错误,最终实现了货物的正确排序。通过将输入、排序、统计、输出等功能拆分到不同的功能类中,我深刻体会到单一职责原则带来的调试便利,彻底摒弃了单类包揽所有功能的不良编程习惯,也初步感受到了面向对象编程的优势。
第二次作业在第一次货物装载程序的基础上完成了功能升级与优化,核心新增多货舱管理相关功能,具体要求是一架航班可以划分多个独立的货舱,每一个货舱都需要设置专属的最大载重上限与行列位置信息,模拟真实航班的货舱布局;录入货物信息时,需要填写货物需要存放的目标货舱编号,程序先统一对所有货物按照重量进行排序,再依次向对应货舱完成货物装载操作,同时程序不仅需要判定单个货舱是否出现超载情况,还要整体核验整架航班的货物总重量是否超标,最后完整展示所有货舱的装载详情以及整机的装载状态,确保程序的实用性和逻辑性。
7f330375e388f8ee3e1c7816beb7f84b
对比第一次作业的代码检测数据,第二次作业的代码整体规模有着十分明显的提升,工具统计得出具体数据如下:总行数387行,有效可执行语句197条,共划分8个类,平均每个类包含5.50个方法;分支语句占比10.7%,最大圈复杂度为8,平均圈复杂度1.51,最大代码嵌套深度为5;每个方法平均包含2.84条语句,注释率仍为0%,依旧没有添加任何代码注释。
本次作业的类数量较第一次有所增加,这与新增的多货舱管理、货物定向装载、双重超载判定等业务逻辑是完全对应的,新增的类主要用于封装货舱、货舱位置等实体以及相关的工具功能。5.50的平均方法数虽较第一次有所上升,但仍在合理范围之内,未出现严重的职责耦合问题,每个类依旧保持相对单一的职责。值得注意的是,虽然本次作业的业务逻辑比第一次更复杂,但分支语句占比和平均圈复杂度反而有所下降,这说明我通过更好的逻辑梳理和代码组织,避免了不必要的条件分支和逻辑嵌套,代码质量有了明显提升,但注释缺失的问题仍然没有解决,代码的可读性还有很大的提升空间。
本次作业的练习过程,让我对面向对象模块化编程有了更加深刻的认知和理解。在最开始设计程序运行结构时,我常常分不清航班、货舱、货物等不同实体之间的从属关系,导致前期编写的代码结构混乱,运行流程杂乱无章,后续通过反复对照课堂学习内容,仔细梳理不同实体之间的关联关系,才慢慢理清了整体的设计思路。在代码编写实操阶段,耗费时间最多的就是货物定向装载逻辑,需要遍历所有货物匹配对应的货舱,同时完成货舱局部超载、航班整体超载的双重判定,多层条件嵌套很容易出现逻辑漏洞,频繁出现货物装载失败、超载判定结果出错等各类问题。我只能采用分步测试的方式,先单独调试单个货舱的装载功能,确保单个货舱能够正常装载货物并完成超载判定,再逐步核验整机重量的判定功能,一步步排查程序错误,不断完善整体的运行逻辑。同时,在货舱编号匹配的过程中,我因误用“==”符号比对字符串内容,导致货舱匹配失败,经过多次报错纠正之后,我牢牢记住了引用类型与基本类型数据的比对区别,编程习惯得到进一步规范,也更加注重代码编写的细节。
第三次作业是前两次学习内容的全面整合与最终升级,在保留多货舱货物装载功能的基础之上,新增了旅客信息、随身行李信息的录入模块,能够精准统计旅客及其随身行李的整体载重数据,完善了航班载重的统计范围;同时融入了航空载重平衡相关的专业计算内容,需要依靠固定的物理数值和计算公式,计算出整机总力矩、飞机实际重心以及重心百分比,以此判定飞机整体配平状态是否安全合规,贴合真实的航空货运配载需求;此外,本次作业还要求完善全流程的输入数据校验机制,能够有效拦截负数、超限数值等各类非法录入数据,比如货物重量不能为负数、货舱数量不能超出合理范围等,全方位提升程序的完整性与实际使用实用性,同时进一步规范代码结构,提升代码的可读性和可维护性。
ba57ca6a36f55d28a5adedc2cfa1a45b
第三次作业作为本阶段的综合性实战练习作业,代码规模达到了三次作业之中的最大值,工具检测得出具体数据如下:总行数274行,有效可执行语句159条,共划分10个类,平均每个类包含1.60个方法;分支语句占比12.6%,最大圈复杂度为8,平均圈复杂度2.31,最大代码嵌套深度为5;每个方法平均包含6.63条语句,注释率依旧为0%,未添加代码注释。
本次作业的类数量达到了10个,这与新增的旅客、行李、配平计算、数据校验等多个功能模块完全对应,体现了我对单一职责原则更严格的践行,类的拆分更加精细,每个类的职责非常单一,甚至有些类只承担一个核心功能,有效降低了类与类之间的耦合度,便于后期的修改和维护。同时,最大圈复杂度为8,与第二次作业持平,说明虽然本次作业新增了配平计算和数据校验等复杂逻辑,但通过合理的方法拆分,我避免了单个方法的逻辑过于复杂,圈复杂度始终控制在安全范围内,不会影响代码的可读性和可维护性。分支语句占比12.6%,处于三次作业的中间水平,也说明我通过良好的逻辑组织,有效控制了条件分支的泛滥,代码逻辑更加清晰有序。
第三次作业整合了前两次所有所学的知识点,编写代码的过程也是对本阶段基础编程知识的全面复盘与巩固,更是对自身编程能力的一次综合检验。本次编写过程中,最大的难点不再是基础语法的运用与程序结构的设计,而是理清航空配平的专业计算公式,将书本上抽象的理论运算逻辑转化为可以正常运行的Java代码。初期我很难理清重量、力臂、力矩三者之间的运算顺序,也不清楚重心百分比的计算逻辑,只能反复对照公式,带入实测数据进行演算推演,逐步理清运算步骤,才顺利完成相关计算代码的编写。同时,全流程的输入数据校验也是本次作业重点练习的内容,以往编写代码时,我很少考虑使用者非法录入数据的情况,编写出来的程序容错率极低,一旦录入错误数据就会导致程序报错崩溃。本次作业要求拦截负数重量、超出限定范围的各类数值,录入错误数据后直接进行提示并终止录入,在不断完善校验逻辑的过程中,我慢慢学会站在使用者的角度编写程序,不再只追求程序能够正常运行合法数据,更加注重程序的实用性和容错性。在程序结构设计层面,经过前两次的练习积累,我已经能够快速独立拆分各类业务功能模块,基本不会出现类职责混乱的情况,实体类专注于存储基础数据,工具类仅实现单一的专属运行功能,调度类串联整体的运行流程,整体编码过程十分顺畅,调试排查错误的次数也明显少于前两次作业。但同时我也清晰发现自身存在的短板,比如对于List等常用集合容器的运用不够熟练,日常编写代码依旧习惯使用数组存储数据,导致代码的灵活度与拓展性不足,后续还需要多加练习巩固,提升代码的灵活性。
历经三次作业的完整编写、反复调试以及多组数据的测试运行,作为一名初学面向对象编程的学生,我踩中了诸多新手高频易错问题,在一次次改错、调试、实测的过程中积累了详实的实战经验,所有问题均结合代码结构、编写思路、程序运行测试等真实场景总结,贴合日常学习实际情况,也让我对面向对象编程有了更深刻的理解。

  1. 实体类封装书写不够标准,初期编写代码时,时常随意定义成员变量,部分私有属性忘记配套编写取值与赋值方法,导致在调用实体类内部数据时频繁出现报错,无法正常获取或修改数据,经过多次修改练习后,我牢牢记住了代码封装的基本规范,私有属性必须搭配完整的存取方法,才能保障程序内部数据的正常调用。2. 键盘输入处理频频出现失误,混合使用不同的数据录入方法时,换行符残留问题反复出现,比如使用nextInt()录入数字完成后,会遗留回车符,直接造成后续使用nextLine()读取字符串时录入为空,前期没有养成提前处理换行符的习惯,耗费了大量时间排查这类低级错误,后期固定了标准的书写格式,彻底解决了这类问题。3. 程序业务判定逻辑顺序错乱,编写超载判定、飞机配平安全判定相关代码时,时常颠倒判定的先后顺序,导致最终程序输出的判定结果与实际情况截然相反,比如先判定整机超载再判定单舱超载,不符合实际业务逻辑,我通过分步打印程序中间运行数据,对照标准运行结果梳理流程,慢慢理顺了各类判定逻辑的先后顺序。4. 手写排序代码边界设置失误,自己编写冒泡排序代码的过程中,内外层循环的范围、循环终止条件频繁写错,极易引发数组下标越界异常,在实现同重量货物稳定排序功能时,还曾经颠倒排序的先后顺序,只能依靠多组测试数据逐一修正错误,逐步掌握了排序算法的编写技巧。5. 代码重复编写现象严重,代码利用率较低,前期编写代码时,同类数据的录入、数值判定等逻辑在多个位置重复书写,不仅增加了整体的代码总量,后期修改维护程序时也十分繁琐,需要在多个位置同时修改,后期慢慢学会抽取通用的运行功能,整合至独立的工具类中统一调用,有效减少了重复代码,提升了代码利用率。6. 程序测试不够全面细致,完成代码初步编写后,一开始只使用常规的合法数据测试程序运行效果,忽略了零数值、临界满载值、极限安全重心等边界数据,导致作业提交之后暴露出诸多隐藏问题,后续我养成了多场景测试的良好习惯,全方位检测程序的运行稳定性,减少隐藏错误的出现。这些问题既有基础语法使用上的疏漏,也有面向对象编程设计思路上的偏差,每一次排查程序错误、修改完善代码的过程,都是巩固知识点、积累实战经验的过程,这些亲身经历的问题,远比书本上枯燥的理论知识记忆更加深刻牢固,也让我在后续的编程学习中能够有效规避同类错误。
    经过本阶段三次面向对象课程作业的系统练习,我在理论知识掌握、代码实操能力、编程思维养成等多个方面都收获满满,自身的整体编程水平得到了实实在在的提升,也清晰认清了自身存在的不足,为后续的深入学习指明了方向。
    在理论知识学习层面,我吃透了面向对象编程最核心的类与对象相关概念,熟练掌握了封装这一核心编程特性,能够独立自主完成各类业务实体类的设计与数据封装工作,不再出现封装不规范的问题;熟练掌握了数组运用、手写基础排序算法、多层条件逻辑判断、键盘输入规范处理等Java基础核心知识点,能够灵活运用这些知识点解决实际的编程问题;同时慢慢学会将书本上简单的数理运算公式,转化为可以正常运行的程序代码,真正做到了理论知识与编程实操的相互结合,不再是单纯记忆理论,而是能够将理论应用到实践中。在代码实操能力层面,我的程序报错排查、问题调试能力进步最为明显,从最开始遇到程序运行报错就毫无头绪,不知道如何下手排查,到如今能够依靠报错提示快速锁定错误位置,从容处理数组下标越界、输入异常、字符串匹配失败等各类常见的编程问题;同时养成了良好的编程习惯,不再盲目上手堆砌代码,而是先梳理完整的业务运行流程,规划好功能划分之后,再分步编写代码,有效减少了错误的出现;日常编码也愈发注重代码排版的整洁度,编写出来的代码规整度、可读性相比入门阶段有了极大进步,便于他人查阅和后期维护。在编程思维塑造层面,我成功建立起基础的程序分层设计思维,深刻明白正规程序开发不能杂乱堆砌代码,必须拆分独立的功能模块,明确各个模块的职责分工,让不同模块相互配合、协同运行,实现程序的正常运转。这种模块化、面向对象的设计思维,不仅适用于本次航空货运配载相关的作业练习,更能灵活运用到往后所有的编程学习与代码开发当中,为后续的深入学习筑牢了思维根基。
    除此之外,在完成综合性作业的过程中,我的逻辑梳理能力、复杂问题拆解能力也得到了充分锻炼。面对繁琐复杂的业务需求,我能够慢慢将整体的大需求拆分为一个个简单细小的功能点,逐个完成编写与调试,逐步整合拼接成完整的程序,独立解决问题的能力稳步提升。当然我也清楚知晓自身依旧存在不少需要精进的地方,比如目前三次作业的注释率均为0%,代码的可读性还有很大提升空间,后续需要养成编写注释的习惯,对核心方法、关键逻辑进行详细说明;对List等常用集合容器的运用不够熟练,代码的灵活度与拓展性不足,需要加强集合类的练习;部分方法的语句数偏多,后续可以进一步拆分成更小的子方法,让逻辑更加清晰。在后续的学习过程中,我会继续坚持多动手敲写代码、多多进行实操练习,查漏补缺补齐自身的知识短板,深耕面向对象相关的基础知识,稳步夯实自身的编程基础,认真钻研后续的课程学习内容,持续积累实战经验,一步步提升自身的综合编程能力,不断完善自我,努力成为一名更加专业的编程学习者。
posted @ 2026-05-18 18:09  寞093  阅读(10)  评论(0)    收藏  举报