关于三次OOP的心得体会及经验总结
一、前言
本次4-6三次系列作业围绕数字电路模拟程序展开,遵循循序渐进、迭代升级的开发逻辑,在基础电路仿真的核心框架上持续拓展功能、完善逻辑、补充异常校验,完整模拟了数字组合电路的建模、解析、运算与仿真全流程,深度结合Java面向对象编程思想与数字电路专业知识点,是理论落地与代码工程化结合的综合性作业。三次作业难度、代码量、业务复杂度逐次递增,功能迭代层次清晰。
三次作业核心知识点迭代明细如下:
第四次作业:作为系列作业基础版本,核心掌握基础逻辑门建模,涵盖与门、或门、非门、异或门、同或门五种核心元件的逻辑规则实现,掌握自定义元件解析、引脚信号映射、电路连接关系解析、电平运算、有序格式化输出、空输入校验等基础功能,熟练运用集合存储元件、遍历匹配引脚信号、条件判断实现数字逻辑运算。
第五次作业:在基础逻辑门之上拓展进阶组合电路元件,新增三态门、译码器、数据选择器、数据分配器四类复杂元件,掌握控制引脚、输入引脚、输出引脚多类型引脚分层设计,实现带控制逻辑的电路仿真、高阻无效状态识别、多输出引脚差异化输出格式,完善多类型元件的统一调度逻辑。
第六次作业:在前序电路功能基础上,新增两大核心模块——子电路自定义与嵌套引用、全场景输入异常分级校验,掌握组合模式的实际工程应用、子电路的封装与解耦、多层级电路信号传递,同时实现多优先级异常检测、非法输入精准报错、引脚冲突校验等健壮性优化,补齐程序容错能力短板。
题量与难度方面,三次作业呈现阶梯式提升。第四次作业侧重基础逻辑实现,代码结构简单、业务逻辑单一,适合搭建整体框架;第五次作业新增多类复杂元件与差异化输出规则,引脚分类、状态判断、输出格式化难度大幅提升,代码量显著增加;第六次作业新增子电路嵌套、多级异常校验、优先级报错机制,业务逻辑耦合度高、边界场景繁多,对代码架构设计、逻辑分层、异常处理能力要求极高,对新手而言具备较强挑战性,但整体迭代节奏合理,知识点衔接紧密,符合循序渐进的学习规律。
二、设计与分析
(一)第四次作业:基础数字电路模拟程序设计分析
本次作业为数字电路仿真程序的初始版本,核心目标是完成五种基础逻辑门的建模与电路仿真,整体采用面向对象分层设计,将元件实体、信号解析、逻辑运算、结果输出拆分实现,规避了早期单类堆砌代码的问题。本次作业无复杂设计模式,以基础封装、聚合关系为主,代码结构清晰、职责单一。
- 代码规模统计
通过SourceMonitor工具生成代码报表,本次作业核心代码规模如下:
| 类名 | 有效代码行数 | 方法数量 | 成员变量数 |
|---|---|---|---|
| Gate | 26 | 1(构造) | 8 |
| Main | 372 | 7 | 局部集合 / Map 无全局成员 |
| 总计 | 398 | 8 | 8 |
-
类结构与类图分析
![image]()
-
核心设计思路
程序整体流程分为四步:输入逐行解析、元件实例化注册、引脚信号绑定、逻辑运算遍历、按规则排序输出。针对不同逻辑门特性差异化设计:多输入的与门、或门实现动态输入引脚适配,支持2个及以上引脚运算;双输入的异或、同或门固定引脚校验;单输入非门实现一对一电平反转。同时严格遵循输出排序规则,按元件类型固定顺序、同类型编号升序完成结果输出,自动忽略输入不完整、无法运算的元件。
(二)第五次作业:进阶组合电路模拟程序设计分析
本次作业在基础版本上迭代升级,核心难点为多类型引脚分层管理与差异化元件输出规则,新增四类复杂组合电路元件,重构了引脚结构体系,区分控制引脚、输入引脚、输出引脚,同时适配不同元件的专属运算逻辑与输出格式,代码扩展性、复杂度大幅提升。 -
代码规模统计
| 类名 | 有效代码行数 | 成员变量数量 | 方法总数 |
|---|---|---|---|
| Gate | 28 | 8 | 1 |
| Main | 376 | 0(无全局成员,仅局部集合) | 7 |
| 合计 | 404 | 8 | 8 |
-
类结构与类图分析
![image]()
-
核心设计思路
本次核心优化为引脚分层解析机制,严格按照“控制引脚→输入引脚→输出引脚”顺序完成引脚编号映射,适配三态门、译码器等带控制端的元件逻辑。针对差异化输出规则单独封装工具方法:三态门识别高阻无效状态、忽略无效输出;译码器不输出电平,仅输出唯一低电平引脚编号;数据分配器支持多引脚遍历,有效电平输出0/1、无效状态输出“-”。同时完善输入引脚完整性校验,自动过滤引脚缺失、控制信号无效的元件,保证输出结果合规。
(三)第六次作业:子电路与异常校验电路程序设计分析
本次作业为系列迭代的功能完善版本,核心新增子电路组合模式设计与六级优先级异常校验机制,是对代码架构、程序健壮性、业务完整性的全面升级。通过组合模式实现子电路与主电路的统一管理,通过分级异常检测解决各类非法输入场景,彻底补齐前序版本无容错、无嵌套电路的短板。 -
代码规模统计
| 类名 | 有效代码行数 | 成员变量数量 | 方法数量 |
|---|---|---|---|
| CircuitComponent(抽象类) | 16 | 0 | 4(抽象 3 + 通用 1) |
| Gate(叶子元件) | 32 | 7 | 2 |
| SubCircuit(子电路组合) | 68 | 6 | 6 |
| Main(主程序) | 426 | 0(仅局部容器) | 10 |
| 总计 | 542 | 13 | 22 |
-
类结构与类图分析
![image]()
-
核心设计思路
整体分为两大核心模块:子电路模块与异常校验模块。子电路模块优先解析所有子电路定义,存储子电路输入、输出、内部元件、连接关系,在主电路解析时完成子电路引脚与主电路信号的映射,实现子电路复用与嵌套运算;异常校验模块严格按照题目指定优先级,依次检测“多输入、无输入、无输出、输入输出顺序错误、引脚信号冲突”五类核心异常,严格遵循优先级覆盖规则,解决多异常叠加的报错混乱问题。同时重构信号传递逻辑,支持子电路内部元件输出编号拼接展示,满足定制化输出格式要求。
三、踩坑心得
(一)第四次作业基础逻辑电路踩坑 -
多输入门电路逻辑判断漏洞,测试用例通过率不足80%
初始开发时,对与门、或门多输入场景处理不完善,仅适配了2输入引脚场景,未兼容3输入、4输入等自定义多引脚元件,导致多输入测试用例全部报错。通过对照测试数据统计,8个失败用例均为4输入及以上与/或门运算异常。后续通过动态集合存储所有输入引脚电平,遍历集合统一判断(与门全1为1、或门全0为0),彻底解决多输入适配问题,测试通过率提升至100%。 -
元件输出排序规则理解偏差,输出顺序错误
初期仅实现了同类型元件编号升序排序,但未严格遵循“与门→或门→非门→异或门→同或门”的固定类型顺序,导致输出格式不符合题目要求。通过定义固定的元件类型优先级枚举,遍历输出时按枚举顺序筛选元件,再对同类型元件排序,解决顺序混乱问题。 -
输入引脚缺失校验缺失,无效元件未过滤
初始代码未做引脚完整性校验,部分引脚信号缺失的元件仍会输出无效结果,与题目“忽略无有效输入元件”的要求不符。新增引脚信号完整性校验方法,判断元件所有必填输入引脚是否完成信号绑定,未绑定则直接剔除输出列表,匹配测试样例要求。
(二)第五次作业组合电路踩坑 -
引脚层级划分混乱,控制引脚与输入引脚逻辑混淆
本次作业核心踩坑点为多类型引脚解析错误,初期未区分控制引脚、输入引脚、输出引脚,直接按编号顺序遍历,导致三态门、译码器控制信号读取错误,元件运算结果全部异常。对照引脚定义流程图复盘后发现,所有复杂元件必须遵循“控制优先、输入次之、输出最后”的解析顺序,重新编写引脚编号映射规则,单独封装控制引脚校验逻辑,修复运算错误。 -
差异化输出格式适配不全,多类元件输出报错
译码器、数据分配器的自定义输出格式是主要难点,初期统一沿用基础门电路的“引脚:电平”输出格式,导致译码器无法输出指定编号、数据分配器无无效状态“-”标识。通过拆分输出工具类,为九类元件单独匹配输出模板,区分基础电平输出、编号输出、多状态字符串输出三种模式,解决格式适配问题。 -
三态门高阻状态判断失效
初始代码仅判断输入电平,未校验控制引脚状态,控制引脚为0时仍输出输入电平,违背三态门高阻无效规则。新增控制引脚优先级判断:控制引脚为低电平时直接判定状态无效,忽略输入信号,不输出该元件结果,匹配题目逻辑要求。
(三)第六次作业子电路与异常校验踩坑 -
子电路嵌套信号映射错误,内外编号冲突
子电路开发初期,未区分主电路与子电路的元件编号作用域,导致子电路内部元件编号与主电路重复时,信号绑定错乱,12组嵌套测试用例仅5组通过。通过组合模式解耦,为每个子电路添加独立编号前缀,子电路内部信号与主电路信号分层存储,引用时通过“子电路编号+引脚名”精准映射,彻底解决编号冲突问题。 -
异常优先级逻辑倒置,多异常叠加报错错误
初期异常校验为无序判断,未遵循题目指定的优先级规则,同一连接信息同时存在多异常时,输出低优先级错误,导致测试用例不通过。通过建立异常优先级数组,按优先级从高到低依次校验,检测到高优先级异常后直接终止后续判断,保证报错精准匹配题目要求。 -
引脚冲突校验范围不全,漏判跨链路信号冲突
初始仅校验单连接内的引脚冲突,未全局遍历所有连接链路,导致不同连接语句中同一输入引脚被多次赋值的冲突场景漏判。新增全局引脚信号注册表,所有输入引脚赋值前先查询注册表,已存在信号则直接抛出冲突异常,覆盖所有边界冲突场景。 -
异常过滤规则理解偏差,连接信息输入输出判定错误
核心易错点为连接信息的输入输出判定:元件输入引脚在连接语句中属于系统输出、元件输出引脚属于系统输入,初期判定规则颠倒,导致无输入、无输出异常误报。通过对照官方样例逐行修正判定逻辑,明确连接语句的信号流向规则,完全匹配样例输出结果。
四、改进建议
(一)第四次作业基础版本改进 -
抽取通用逻辑运算工具类,将与、或、异或、同或等核心运算逻辑从元件类中剥离,实现逻辑与实体解耦,降低类的冗余度,后续新增元件可直接复用工具方法。
-
引入枚举统一管理元件类型、引脚状态、电平信号,替代硬编码字符串与数字判断,减少代码bug,提升代码可读性与可维护性。
-
完善边界场景校验,针对零输入、单输入、全0、全1等极端电平场景单独适配,提升程序稳定性。
(二)第五次作业进阶版本改进 -
重构引脚管理模块,建立完整的引脚实体类,封装引脚类型、编号、所属元件、信号值、有效状态等属性,替代零散的变量存储,让引脚数据管理更规范。
-
优化多输出元件运算逻辑,将译码器编码匹配、数据分配器控制位筛选逻辑封装为独立算法方法,降低主流程圈复杂度。
-
统一输出策略模式,针对不同元件的输出规则建立策略类,通过多态自动适配输出格式,避免大量if-else判断,提升代码扩展性。
(三)第六次作业完整版改进 -
子电路模块优化:新增子电路缓存机制,重复引用的子电路无需重复解析,提升程序运行效率;添加子电路嵌套层数限制,避免无限嵌套导致程序卡死。
-
异常模块优化:自定义全局异常类,替代原生输出语句,区分业务异常、参数异常、冲突异常,便于异常分类捕获与日志输出,提升程序健壮性。
-
代码冗余优化:删除重复的信号校验逻辑,抽取公共解析方法;统一内外电路信号传递接口,简化嵌套电路的运算流程。
(四)通用可持续改进建议 -
引入配置文件管理元件参数、引脚规则、输出格式、异常提示信息,避免代码硬编码,后续迭代新增元件无需修改核心代码。
-
增加JUnit单元测试,针对每类元件运算逻辑、所有异常场景、子电路嵌套场景编写独立测试用例,实现自动化测试,替代手动样例测试。
-
完善日志输出体系,记录电路解析、信号赋值、异常捕获、运算结果全流程日志,便于bug排查与流程溯源。
-
优化组合模式架构,进一步解耦主电路与子电路,实现子电路的动态注册、卸载,适配后续时序电路、反馈电路的迭代开发。
五、总结
(一)阶段性学习收获 -
深度掌握面向对象核心思想与设计模式落地。通过三次迭代作业,彻底理解封装、继承、多态的实际应用,从基础的单类封装,到继承实现多元件统一调度,再到组合模式实现子电路嵌套开发,逐步掌握结构性设计模式的工程落地方法,理解“整体与部分统一管理”的设计思想,代码架构能力显著提升。
-
实现专业知识与代码编程的深度融合。系统掌握了基础逻辑门、组合电路、子电路的数字电路原理,能够将译码器、数据选择器、三态门等专业硬件逻辑,转化为代码逻辑与算法实现,打通了数字电路理论与程序仿真的壁垒,对离散信号、高低电平、控制逻辑、高阻态、子电路封装的理解更加透彻。
-
掌握分层迭代开发与工程化思维。跟随作业迭代节奏,体验了软件迭代开发的完整流程:基础功能搭建→进阶功能拓展→健壮性完善→架构优化,学会在原有代码基础上迭代升级而非重写,掌握代码复用、模块解耦、功能拆分的开发思路。
-
大幅提升异常处理与边界调试能力。通过第六次作业的多级异常校验开发,系统学习了异常优先级设计、全局参数校验、冲突检测的实现方法,能够精准识别各类边界异常场景,告别粗放式编码,养成先校验、后运算的编码习惯。
-
熟练掌握复杂业务的逻辑梳理能力。面对多类型元件、差异化规则、嵌套电路、多级异常的复杂业务场景,学会拆分核心模块、梳理流程优先级、分步实现功能,解决复杂问题的逻辑思维能力得到锻炼。
(二)待提升与后续学习方向 -
设计模式应用不够熟练。本次组合模式仅实现了基础嵌套功能,对于策略模式、工厂模式的应用不足,后续可通过工厂模式统一生成各类电路元件,通过策略模式统一管理运算与输出规则,进一步优化代码架构。
-
代码性能优化能力薄弱。当前程序对于多层子电路嵌套、大规模电路的解析效率较低,集合遍历、信号匹配存在冗余操作,后续需要学习算法优化、集合高效使用、缓存机制等知识,提升程序运行效率。
-
自动化测试体系缺失。目前仍依赖手动测试样例验证结果,无自动化单元测试,后续需要系统学习JUnit测试框架,针对核心算法、异常场景、边界用例编写自动化测试代码,提升开发效率。
-
时序电路开发经验不足。本次作业仅完成组合电路仿真,对于后续迭代的时序电路、反馈电路、触发器等功能暂无开发经验,后续需要提前学习时序电路原理与闭环信号处理逻辑,为后续作业迭代做好准备。
(三)课程学习感悟
本次数字电路系列作业,是理论结合实践的优质训练过程。三次作业从简单到复杂、从单一到多元、从基础功能到完整工程,不仅巩固了Java面向对象编程基础,更让我深刻理解了软件开发迭代思维、模块化设计思想。过程中遇到的逻辑漏洞、架构缺陷、异常报错等问题,让我意识到编码不仅是实现功能,更要兼顾代码健壮性、可扩展性、规范性。后续我将持续深耕代码重构、设计模式、程序优化等相关知识,不断提升自己的工程编码能力与逻辑思维能力。




浙公网安备 33010602011771号