第二次Blog作业

前言
在本阶段的面向对象程序设计课程学习中,我依次完成了作业 4、作业 5、作业 6 三道有关数字电路模拟的编程题目。三道题目属于同一类型的递进式编程练习,整体围绕 Java 面向对象思想完成数字逻辑电路仿真程序开发,从基础逻辑门实现,到高级组合电路拓展,再到子电路封装与输入异常校验,整体呈现由易到难、逐步完善的学习过程。
从知识点层面来说,三次作业全面考察了 Java 封装、继承、多态三大核心特性,同时涉及字符串处理、正则表达式匹配、集合容器使用、程序逻辑分层设计、组合模式思想以及程序健壮性优化等内容。在实践过程中,我不仅巩固了 Java 基础编码能力,还基本掌握了 SourceMonitor 代码质量检测工具,学会从代码行数、方法复杂度、类结构设计等多个维度审视自己编写的程序。
从题量与难度划分来看,作业 4 作为入门迭代版本,仅要求实现五种基础逻辑门电路仿真,逻辑相对简单,侧重熟悉项目整体架构与面向对象继承设计思路;作业 5 在原有基础上新增多种高级数字电路元件,拓展程序功能边界,难度有所上升,需要更多的思考与投入时间,重点考验代码扩展性与原有结构兼容性;作业 6 回归基础逻辑门,新增子电路封装结构与多优先级输入错误检测机制,更偏向工程化程序优化与程序容错能力设计,但对代码规范性、逻辑严谨性要求最高。
整体完成三轮作业练习后,我虽然并没有完全答对这三道题目,但依然深刻体会到迭代式开发的实际意义,也发现了自身在代码编写、逻辑梳理、需求理解上存在诸多不足,本次总结博客将结合代码检测报表、实际编码经历与测试调试经验,完成全面复盘。
设计与分析
本次三次作业均为同一项目迭代开发,整体采用抽象父类统一规范、子类分别实现具体逻辑的核心架构,同时借助 SourceMonitor 工具对三份源码进行专业代码质量分析,结合检测数据完成程序设计层面的分析总结。
一、作业 4 程序设计与代码分析
作业 4 主要实现与门、或门、非门、异或门、同或门五种最基础数字逻辑门的电路信号仿真,搭建整个仿真程序最核心的运行框架。
从整体结构设计上,我定义统一抽象逻辑门父类,再分别创建五种逻辑门子类,重写父类中的核心运算方法,实现不同电路独有的逻辑计算规则,主程序类负责完成用户输入读取、电路连接解析、信号逐级传递与最终结果输出,整体结构层次清晰,严格遵循单一职责设计思想。
结合作业 4 SourceMonitor 分析截图来看,
屏幕截图 2026-06-24 120428
本次源码总行数 323 行,有效执行语句数量适中,代码注释占比合理,能够对核心代码逻辑进行清晰说明。程序一共划分 5 个核心类结构,类划分数量贴合业务需求,不存在类职责臃肿或者类划分过于零散的问题。在方法设计上,程序内平均每个类包含方法数量适中,单个方法平均代码行数较少,我在编写代码时刻意拆分冗长逻辑,避免出现巨型业务方法。
在程序复杂度层面,本次代码整体平均圈复杂度偏低,最高方法圈复杂度仅为 3,整体代码逻辑几乎不存在多层嵌套判断、复杂循环结构,代码可读性极强,后期修改和调试难度较低。同时代码整体嵌套深度合理,没有出现多层 if 嵌套、循环嵌套等影响代码维护性的写法,对于初学者完成基础电路仿真项目而言,整体代码设计规范合理,完全满足基础业务需求。
从实际设计心得而言,作业 4 的架构设计为后续两次迭代作业打下了坚实基础,统一父类的设计方式让后续新增电路元件无需大面积修改原有代码,充分体现出面向对象继承特性带来的代码复用优势。但本次设计也存在明显短板,输入解析方式较为简易,仅能适配基础格式输入,面对复杂格式输入兼容性较差,同时信号传递逻辑较为简单,无法适配多级级联电路的精准信号传递,这些问题也在后续作业中逐步进行优化整改。
二、作业 5 程序设计与代码分析
作业 5 是在作业 4 完整框架之上进行功能拓展迭代,保留原有五种基础逻辑门全部功能,新增三态门、译码器、数据选择器、数据分配器等多种高级组合数字电路,丰富程序仿真范围,完善电路控制引脚、多通道输出等全新业务逻辑。
在结构优化上,我对原有抽象父类进行小幅升级拓展,新增控制引脚相关属性与校验方法,适配高级电路独有的使能控制逻辑,原有基础逻辑门子类无需改动即可继续正常使用,仅新增对应高级电路子类完成新功能开发,最大程度保留原有代码,符合软件开发开闭原则。
结合作业 5 SourceMonitor 分析截图
屏幕截图 2026-06-24 120841
数据分析可知,随着功能不断增加,本次代码总行数提升至 410 行,代码整体规模实现合理增长,符合新增业务功能的开发体量。在类结构数量上,类总数相比作业 4 增加,对应新增多种高级电路实体类,类划分依旧保持清晰独立。
在代码细节层面,本次编写过程中我进一步拆分业务方法,让单个方法功能更加精简,平均单个方法内有效代码语句进一步减少,代码精细化程度相比作业 4 有所提升。但由于译码器、数据分配器等高级电路内部运算逻辑更为繁琐,部分核心业务方法内判断条件增多,使得本次代码整体平均圈复杂度略高于作业 4,其中处理译码器地址解码、控制信号校验的核心方法成为全程序复杂度最高的代码片段,也是本次代码后期最需要优化整改的部分。
同时在本次迭代开发中,由于为了优先完成功能实现,简化了代码注释编写工作,从报表数据能够清晰看出本次代码注释占比明显下降,关键复杂逻辑缺少文字说明,不仅不利于自己后期回看梳理代码,也降低了代码整体规范性与可读性,是本次开发过程中较为明显的不足。
三、作业 6 程序设计与代码分析
作业 6 作为本轮迭代最终优化版本,舍弃作业 5 内部分拓展电路功能,重新回归五种基础逻辑门仿真核心,重点完成两大核心优化内容:第一,引入组合模式思想设计子电路结构,实现小型电路模块化封装与重复调用;第二,新增多优先级输入错误检测功能,按照题目规定优先级依次校验多种电路连接错误,大幅提升程序容错能力与运行稳定性。
在整体架构上,本次在原有逻辑门体系之外,单独新增子电路管理类,实现主电路与子电路分层管理,子电路内部可以独立完成信号运算,外部主程序仅需调用子电路整体输入输出接口即可,实现电路结构模块化拆分,让复杂组合电路搭建更加便捷清晰。
结合作业 6 SourceMonitor 分析截图
屏幕截图 2026-06-24 121000
进行分析,本次代码精简掉大量冗余拓展代码后,总行数回落至 313 行,代码整体更加简洁化。在代码规范性上,我重新完善代码注释内容,注释覆盖率相比作业 5 大幅回升,核心校验逻辑、子电路调用逻辑都补充了清晰注释说明。
在代码复杂度控制上,本次优化效果最为明显,通过拆分错误校验逻辑、简化运算判断条件,程序整体平均圈复杂度降至三次作业最低水平,即便新增了五类不同优先级的错误判断逻辑,依旧通过方法拆分将复杂逻辑打散,没有出现高复杂度臃肿方法,代码整体逻辑清爽,运行稳定性极高。
本次设计让我充分体会到程序重构优化的价值,相比一味堆砌功能,精简代码、梳理逻辑、完善容错机制,更能提升程序整体质量。但本次设计依旧存在细微不足,子电路与主电路之间的信号传递依旧存在少量耦合性,未能做到完全解耦,在大型多层嵌套子电路场景下,依旧存在优化提升空间。
采坑心得
在依次完成三次迭代编程作业的编码、调试、测试全过程中,我遇到了大量实际开发中常见的问题,从需求理解偏差、逻辑编写错误,理解题目要求花费大量时间,到边界测试考虑不全、代码结构不合理等问题都逐一暴露,结合调试过程、测试结果与代码结构问题,将实际踩过的坑与对应解决心得总结如下:
第一,对题目业务需求理解不透彻,直接导致核心逻辑编写出现偏差。三次作业中多次出现因没有仔细研读题目规则,凭自我主观认知编写代码的情况。例如在完成作业 5 三态门开发时,初期没有准确掌握高阻态输出规则,在控制引脚未达到有效电平的情况下,依旧固定输出高低电平,不符合数字电路实际运行规则,导致多个测试用例无法通过;在编写译码器程序时,遗漏题目规定的控制引脚使能条件,忽略电平组合约束,最终电路解码结果全部出错;作业 6 中最为典型的错误就是错误排布异常检测优先级,没有严格按照题目给定顺序判定电路连接错误,出现多重错误并存时,程序输出错误提示优先级错乱,直接导致功能性测试失败。经过多次调试整改我深刻明白,编程开发第一步永远是读懂需求、梳理业务规则,不能急于上手编写代码,先梳理清楚运行流程、约束条件、输出规则,再进行编码,能够大幅减少返工修改的次数,此外再此过程中,因为没有很好的熟悉题目,导致完成进度效率。
第二,程序边界场景考虑缺失,仅适配常规正常输入,忽略异常输入与特殊电路结构。最开始编写作业 4 程序时,我只考虑所有引脚全部正常接入有效信号的理想场景,没有设计引脚信号缺失校验逻辑,一旦出现部分电路输入引脚未接入信号,程序直接出现空指针异常,直接终止运行;在电路信号传递逻辑编写中,仅设计单次信号传递流程,忽略多级级联电路需要多次迭代更新信号的实际情况,造成串联电路仿真结果全部错误。后续我不断补充边界判断代码,增加输入完整性校验、空值防护、循环迭代更新信号等逻辑,才让程序能够适配各类特殊电路结构,保证程序运行稳定性。这也让我意识到,合格的程序不仅要完成正常功能,更要全面覆盖边界场景、异常场景,做好程序容错防护。
第三,代码编写初期缺乏长远迭代思维,前期代码结构不合理,给后续功能拓展带来阻碍。在作业 4 开发初期,部分功能逻辑直接堆砌在主程序类中,没有做好功能分层,等到作业 5 需要批量新增电路元件时,发现主程序过于臃肿,新增功能无处安放,只能重新拆分重构代码结构,耗费大量时间;同时初期输入解析逻辑写法过于简陋,没有使用正则表达式进行统一匹配,仅依靠简单字符串分割处理输入内容,面对格式复杂的测试输入时,解析频繁出错,后期只能整体替换解析方式,重构输入模块。通过这件事我总结出,编写迭代式项目代码时,必须提前规划整体架构,做好功能分层与模块拆分,预留好功能拓展接口,避免前期随意编写代码,后期迭代寸步难行。
第四,调试方式过于单一,依赖盲目试错,缺少系统化排错思路。在程序出现测试用例不通过时,最开始我习惯直接修改代码反复提交尝试,没有梳理错误原因、打印中间运行数据排查问题,不仅效率极低,还容易衍生出新的 bug。后期我慢慢养成调试习惯,通过打印电路解析结果、引脚信号数值、方法运行返回值等中间数据,精准定位逻辑出错位置,结合流程图梳理信号传递走向,快速锁定问题根源,排错效率得到极大提升。同时在完成代码编写后,主动自行设计简易测试用例进行自测,不再完全依赖平台测试数据,提前发现大量隐藏逻辑漏洞。
第五,代码规范性重视程度不足,出现注释缺失、命名混乱、代码冗余等问题。从 SourceMonitor 检测报表中能够直观看出,作业 5 为了赶进度简化注释编写,后期回看代码时,自己都难以快速理解复杂逻辑含义;同时部分变量、方法命名随意,可读性较差,增加了代码维护难度。经过三次作业打磨,我慢慢养成规范编码习惯,统一命名格式,核心逻辑及时添加注释,精简重复冗余代码,让代码不仅能够运行,还具备良好的可读性与维护性。
改进建议
结合三次作业源码结构、代码质量检测数据以及实际运行过程中暴露的各类问题,从代码结构、功能逻辑、程序优化、工程化规范等多个层面,提出具备实际落地性的可持续改进方案,方便后续继续对该数字电路仿真程序进行升级完善。
第一,优化整体代码分层结构,拆分臃肿核心类,实现功能解耦。目前程序主程序类承担了输入解析、信号调度、结果输出、错误检测等过多职责,代码耦合度偏高。后续可以将整体功能进行拆分,单独创建输入解析工具类、电路错误校验工具类、信号调度管理类,把通用静态方法、重复调用逻辑全部抽离至工具类中,让主类仅负责整体流程调度,不再参与具体细节逻辑编写,让程序结构更加轻量化,后续修改单一功能时不会影响整体程序运行。
第二,使用枚举统一管理电路类型与固定约束条件。目前程序中判断电路类型、限定引脚数量依旧依靠字符、数字硬编码实现,编写繁琐且极易出现书写错误。后续可以创建电路类型枚举类,统一存储所有逻辑门标识、固定输入引脚数量、运算规则标识等固定信息,在创建电路实例、校验引脚数量时直接调用枚举内容,彻底杜绝硬编码带来的错误,同时大幅提升代码整洁度。
第三,自定义统一异常类,规范化管理程序错误提示。当前作业 6 中电路连接错误仅依靠普通字符串存储提示信息,错误类型杂乱,无法统一管理。后续可以自定义电路专属异常类,划分不同类型电路错误枚举,在检测到对应错误时主动抛出对应异常,通过异常捕获机制统一处理错误提示,既规范了程序异常处理流程,也方便后期拓展更多错误类型,让程序报错信息更加标准清晰。
第四,拓展程序实用功能,提升项目实用性与完整性。首先完善子电路嵌套功能,当前程序仅支持主电路调用单层子电路,后续优化后可以实现子电路内部继续嵌套其他子电路,搭建更加复杂的多层级组合电路;其次新增电路拓扑结构文本可视化输出功能,不再只单纯输出运算结果,直观打印出电路连接走向,方便使用者快速排查电路搭建错误;最后加入运算结果缓存机制,重复调用相同电路仿真时,直接调取历史运算结果,减少重复运算流程,提升程序运行效率。
第五,补充系统化单元测试,保障迭代更新稳定性。目前程序测试方式以手动输入测试用例为主,测试效率低且覆盖范围有限。后续可以借助单元测试工具,针对每一种逻辑门运算结果、每一类电路错误、子电路调用场景编写专属测试案例,在对代码进行修改重构、功能升级后,直接运行自动化测试,快速验证原有功能是否正常运行,避免代码迭代过程中修复旧问题、引出新 bug 的情况发生。
第六,统一制定个人编码规范,严格把控代码质量。结合 SourceMonitor 代码检测标准,给自己制定固定编码要求,日常编写代码时,严格控制单个方法代码行数、限制方法最大圈复杂度,杜绝多层嵌套复杂逻辑;保证项目整体注释覆盖率达标,业务逻辑、核心算法、特殊约束条件必须添加清晰注释;统一变量、类、方法命名规范,从日常编码习惯入手,长期提升个人代码编写质量。
总结
通过完成作业 4 至作业 6 三轮数字电路仿真迭代编程练习后,我在编程技术、学习思维、项目实践等多个层面都收获了很多,同时也清晰认清了自身存在的诸多短板与不足,为本阶段面向对象程序设计课程学习做出完整总结。
在知识与技术学习层面,我彻底吃透了 Java 面向对象三大核心特性,能够熟练运用抽象类、继承关系完成同类业务实体统一管理,学会使用组合模式实现模块化程序设计,熟练掌握正则表达式解析复杂文本、集合容器存储电路数据、循环迭代完成多级信号传递等实用编码技巧。同时逐渐掌握了 SourceMonitor 代码质量分析、PowerDesigner 类图绘制两款实用开发辅助工具,学会从专业角度评判自己编写代码的优劣,不再只以 “代码能够运行” 作为唯一编写标准,开始注重代码结构、复杂度、规范性等深层内容。
在项目实践思维层面,我完整体验了小型程序迭代开发的全流程,明白了软件开发并非一次性编写完成,而是在基础版本之上不断拓展功能、修复漏洞、重构优化的持续过程。在三次迭代中,我学会提前规划项目整体架构,预留功能拓展空间,优先保证原有代码稳定性再新增功能,建立起更加贴合实际开发场景的编程思维,不再局限于单一习题解题式编码。
在自我不足认知层面,我也发现了自身存在大量急需改进的问题。首先是课程专业知识结合能力不足,对数字电路相关专业原理掌握不够扎实,常常因为硬件原理理解不到位,导致程序逻辑编写出错;其次是代码优化意识薄弱,编写代码优先追求实现功能,缺少提前优化、精简逻辑的习惯,代码冗余、逻辑繁琐问题频繁出现;最后是自主学习与拓展能力不足,仅能完成题目指定基础功能,很少主动思考项目拓展方向,对于设计模式进阶运用、程序性能优化等进阶知识学习不够深入。
在后续的课程学习与自主练习中,我将针对性弥补自身短板。一方面重新巩固数字电路相关专业基础知识,打通专业知识与程序开发之间的壁垒,做到知原理再写代码;另一方面主动加强各类常用设计模式的实战练习,不再局限于基础继承与组合,灵活运用多种设计模式优化项目结构;同时坚持编写代码后进行自我复盘,借助代码检测工具不断优化代码质量,养成规范、精简、高效的编码习惯。除此之外,我也会主动尝试自主开发小型趣味实战项目,脱离课堂习题束缚,将课堂所学知识真正落地运用,不断积累项目开发经验。
总而言之,本轮三次迭代作业练习,不仅巩固了我的 Java 编程基础,更塑造了良好的程序设计思维与开发习惯。在今后的学习道路上,我会正视自身不足,稳步补齐知识漏洞,坚持多敲代码、多复盘、多总结,持续提升自身程序设计与开发能力,稳步朝着更加专业的编程学习方向不断前进。我也会多进行java代码的变成练习,做到快速读题,熟练运用java代码的知识点,在未来的开发设计中能够更好的从容应对。

posted @ 2026-06-24 16:45  25201527-柳远  阅读(4)  评论(0)    收藏  举报