数字电路模拟程序总结性博客
数字电路模拟程序总结性博客
前言
本次阶段性作业包含三道递进迭代开发题目:数字电路模拟程序 1(基础五逻辑门)、数字电路模拟程序 2(新增组合器件 + 控制引脚)、数字电路模拟程序 4(子电路封装 + 全输入异常校验),对应课程作业集 4、5、6,三道题目属于同一条业务需求的迭代升级,总题量 3 道,每道题满分 100 分,难度呈阶梯式上升。
作业集 4 的程序 1 为入门级面向对象仿真开发,仅实现与、或、非、异或、同或五类基础门电路,输入输出规则简单,无控制引脚、无子电路、无异常检测,核心考察抽象类、继承、工厂模式基础使用,代码规模约 380 行,初次完成调试耗时约 2.5 小时,测试样例共 6 组,无复杂边界用例。
作业集 5 的程序 2 为困难级扩展开发,在基础五门之上新增三态门、译码器、数据选择器、数据分配器四类组合器件,引入控制引脚、多输出引脚、差异化输出打印规则,重构了顶层抽象 Gate 类,拆分控制、输入、输出引脚集合,新增多进制编码计算逻辑,代码规模扩充至 720 行,调试耗时 5 小时,样例扩充至 10 组,存在译码器使能条件、多路选择控制位逆序计算两大易错点,初次提交得分 86 分,经逻辑修正后全 AC。
作业集 6 的程序 4 为高阶综合开发,在程序 1 基础上增加两大核心模块:子电路嵌套复用、全链路输入异常校验,同时保留基础五门电路逻辑,新增递归解析子电路、连线语法五级优先级错误判断、输入引脚多源冲突检测、子电路引脚映射、多层嵌套路径排序等复杂逻辑,代码规模达 950 行,调试耗时 7 小时,样例共 8 组,包含语法错误、信号冲突、多层子电路嵌套边界用例,初次提交仅 83 分,存在子电路引脚判断颠倒、异常终止逻辑缺失、嵌套输出格式错误三类核心漏洞,逐层修复后满分通过。
三道作业形成完整工程迭代思维:从单一基础组件仿真→多类型组合器件扩展→模块化封装 + 输入鲁棒性校验,完整复刻工业软件增量开发流程,知识点覆盖 Java 面向对象全套核心特性、组合设计模式、图论信号迭代仿真、递归文本解析、多优先级错误处理、自定义排序规则,同时接触软件工程静态代码分析工具 SourceMonitor、UML 类图工具 PowerDesigner,实现 “编码实现 - 结构分析 - 踩坑复盘 - 迭代优化” 完整开发闭环。
一、设计与源码结构分析
本部分结合三张 SourceMonitor 静态代码统计截图报表、PowerDesigner 绘制三套 UML 类图,分三次作业逐层分析源码架构、模块划分、设计模式落地效果,附图表数据解读与个人开发心得,满足作业 “有图有真相、拿数据说话” 的硬性要求。
1.1作业集4数字电路模拟程序1源码分析
1.1.1SourceMonitor代码统计报表数据

图 1 作业集 4 程序 1 静态代码度量报表
扫描结果:源码文件数量 1 个,总行数 Lines=353 行,有效可执行语句 Statements=227 行;分支语句占比 % Branches=22.9%,方法总调用次数 Calls=128 次;注释占比 % Comments 仅 0.3%;定义 Classes 类总数 9 个;平均每个类包含 Methods/Class=3.56 个方法;单方法平均执行语句 Avg Stmts/Method=5.38 行;全局单方法最高圈复杂度 Max Complexity=34;代码最大嵌套深度 Max Depth=8 层,全文件平均嵌套深度 Avg Depth=2.60 层。
9 个类完整对应设计分层:1 个顶层 Main 主类、1 个 Pin 引脚实体类、1 个 Gate 抽象父类、5 个门电路子类(AndGate/OrGate/NotGate/XorGate/XnorGate)、1 个 GateFactory 工厂类。平均每类仅 3.56 个方法,单方法平均仅 5.38 行代码,说明功能拆分粒度精细,几乎不存在超长臃肿业务方法。全局最高圈复杂度 34 集中在顶层 do-while 电平迭代仿真循环模块,平均嵌套深度仅 2.6 层,整体分支逻辑平缓,日常调试难度较低;但注释占比仅有 0.3%,仅零星行内注释,缺失类、方法标准化文档注释,代码可读性存在明显短板。
1.1.2PowerDesigner UML 类图结构解读

类图核心分层分为四层: 底层实体层:Pin 引脚类,封装引脚所属元件名、引脚编号、电平值三个私有属性,配套 get/set 访问方法,作为全局信号存储最小单元,所有门电路仅持有 Pin 对象引用,不重复存储电平数据,实现全局引脚数据统一管理; 抽象父类层:Gate 抽象类,定义统一标准接口 calcOutput ()(计算输出电平)、getTypeOrder ()(定义元件输出排序序号),统一存储输入引脚集合、单输出引脚对象、元件编号、输入引脚数量,所有逻辑门强制继承该类,依靠多态实现统一调度; 业务实现层:五类门电路子类,重写抽象计算方法,分别实现与、或、非、异或、同或运算逻辑;GateFactory 工厂类,静态方法 createGate () 根据元件名字符串自动识别门类型、解析输入引脚数量与元件编号,屏蔽外部对象创建细节,降低主类耦合; 顶层调度层:Main 主类,负责文本输入解析、连线存储、信号迭代仿真、元件分组排序、结果打印,使用 HashMap 容器存储全局引脚电平、全部门实例、连线映射关系。
1.1.3设计落地心得
程序 1 是面向对象封装思想的基础实践,对比纯面向过程代码有三大显著优势: 第一,通过抽象 Gate 统一规范所有门电路行为,后续新增器件仅需新建子类、重写计算方法,无需修改顶层仿真循环,完全符合软件设计开闭原则;第二,工厂模式隔离元件创建逻辑,主程序无需处理字符串拆分、类型判断等琐碎解析代码,单一职责划分清晰;第三,Pin 单独抽离实体,全局唯一存储引脚电平,避免多个门重复存储电平导致数据不一致、状态不同步的问题。 本次设计存在一处致命短板:Gate 类仅支持单一输出引脚,没有预留控制引脚扩展字段,直接导致后续程序 2 扩展三态门、译码器时必须完全重构父类,前期架构扩展性预判不足,是迭代开发中暴露的典型设计缺陷。
1.2作业集5数字模拟程序2源码分析
1.2.1SourceMonitor代码统计报表数据

图 2 作业集 5 程序 2 静态代码度量报表
扫描结果:源码文件数量 1 个,总行数 Lines=480 行,有效可执行语句 Statements=441 行;分支语句占比 % Branches=22.7%,方法总调用次数 Calls=131 次;注释占比 % Comments=0.0%,全程无任何注释;定义 Classes 类总数 13 个;平均每个类包含 Methods/Class=4.38 个方法;单方法平均执行语句 Avg Stmts/Method=6.18 行;全局单方法最高圈复杂度 Max Complexity=47;代码最大嵌套深度 Max Depth≥9 层,全文件平均嵌套深度 Avg Depth=3.23 层。
相比程序 1,本次迭代总行数增加 127 行,有效执行代码新增 214 行;类数量由 9 个扩充至 13 个,新增 TriStateGate 三态门、Decoder 译码器、Mux 多路选择器、Demux 数据分配器四类组合器件子类,完整匹配九类电路器件的继承架构;平均每类方法提升至 4.38 个,新增 calcOutput、printOutput 两套重写方法,落地差异化多态打印逻辑。 但代码质量缺陷十分突出:译码器、多路选择器运算方法多层 if 嵌套,全局最高圈复杂度达到 47,最大代码嵌套深度突破 9 层,平均嵌套深度上升至 3.23,复杂分支逻辑极易产生计算逻辑漏洞,本次初次提交失分的控制位顺序、译码使能条件两处 bug 均来源于此;同时代码完全无注释,分支逻辑阅读、排错成本极高。
1.2.2PowerDesigner UML 类图结构解读

对比程序 1 类图,核心改动集中在 Gate 抽象父类完全重构:
1.新增List<Pin> controlPins控制引脚集合、List<Pin> outputPins多输出引脚集合,废弃原单一 outputPin 属性,兼容译码器、分配器多输出引脚,兼容三态门独立控制引脚;
2.新增抽象方法printOutput(),取消顶层统一打印逻辑,交由每个器件子类自定义输出格式,适配译码器输出编号、分配器拼接 “-” 占位符、三态门指定输出引脚号等差异化打印需求,充分利用多态消除 Main 主类大量 if-else 判断;
3.四类新增器件子类补充至继承树,Decoder 译码器新增私有成员 inputBits 存储输入编码位数,Mux/Demux 新增 ctrlBits 存储控制引脚数量,单独存储器件专属配置参数;
4.GateFactory 工厂类扩展字符分支,新增 S/M/Z/F 四类器件名字符串解析逻辑,自动分配对应数量控制、输入、输出引脚并存入 pinMap 全局引脚表。
1.2.3迭代设计心得
本次迭代修正了程序 1 父类扩展性不足的缺陷,通过拆分控制 / 输入 / 输出三类引脚集合,完美兼容九类引脚结构完全不同的器件;自定义 printOutput 抽象方法将输出格式内聚到器件自身,大幅简化 Main 主类调度逻辑。 但本次设计遗留两处无法规避的缺陷:一是没有预留子电路封装扩展接口,所有器件仅支持顶层全局电路,无法复用重复电路模块;二是输入文本解析、异常校验模块完全空白,输入格式错乱、引脚多信号冲突无任何容错处理,为程序 4 的开发增加大量额外工作量。
1.3作业集5数字模拟程序3源码分析
1.3.1SourceMonitor代码统计报表数据

1.3.2PowerDesigner UML 类图结构解读

图 3 作业集 6 程序 4 静态代码度量报表 扫描结果:源码文件数量 1 个,总行数 Lines=382 行,有效可执行语句 Statements=341 行;分支语句占比 % Branches=35.8%,方法总调用次数 Calls=178 次;注释占比 % Comments=0.0%;定义 Classes 类总数仅 3 个;平均每个类包含 Methods/Class=5.67 个方法;单方法平均执行语句 Avg Stmts/Method=17.94 行;全局单方法最高圈复杂度 Max Complexity=20;代码最大嵌套深度 Max Depth=7 层,全文件平均嵌套深度 Avg Depth=3.06 层。
本次架构重构删除程序 2 多余四类组合器件,回归基础五门电路,新增 SubCircuit 子电路复合类、全套异常校验工具方法;总行数回落至 382 行,有效代码 341 行;类数量大幅精简至 3 个(Gate 门实体、SubCircuit 子电路、Main 主类),取消多层子类继承设计,改用 typeSeq 字段区分门类型,简化类继承树,采用组合模式统一管理电路单元。 全局最高圈复杂度降至 20,相比程序 2 的 47 大幅优化,彻底消除译码器、多路选择器带来的超高复杂度分支;但新增五级优先级连线语法校验、多层递归子电路解析逻辑,分支语句占比飙升至 35.8%,所有工具方法全部内聚至 Main 类,单方法平均语句高达 17.94 行,超长分支方法极易出现逻辑颠倒、优先级判断遗漏等 bug,本次初次提交丢失 17 分的核心漏洞全部集中在语法校验超长方法内;代码全程无注释,多层分支排查难度极大。
1.3.2 PowerDesigner UML 类图全新结构解读
本次类图引入标准组合设计模式思想,新增 SubCircuit 子电路类作为复合组件,Gate 逻辑门作为叶子组件,顶层 Main 统一管理两类组件,核心结构: 叶子组件:Gate 基础逻辑门类,简化原有抽象继承结构,typeSeq 严格按照题目输出顺序 1~5 编号,新增 subNestPath 嵌套路径集合存储子电路层级编号; 复合组件:SubCircuit 子电路类,封装子电路 INPUT 输入标识列表、OUT 输出标识列表,作为可多层嵌套复用的组合单元,内部包含多个 Gate 叶子组件,通过统一前缀映射子电路内部引脚名称; 全局辅助实体:Pin 引脚类完全复用程序 1 设计,新增多组全局映射表存储子电路、连线关系、引脚电平、信号冲突源集合; 分层工具方法:拆分独立静态方法实现引脚类型判断、语法错误校验、嵌套路径拆分、冲突检测、递归解析,规避 Main 主类代码臃肿问题,单一方法仅负责单一功能,符合单一职责原则。
1.3.3高阶设计心得
程序 4 是软件工程模块化、鲁棒性设计的综合考察,两大核心设计收获: 第一,组合模式落地:将子电路与基础门抽象为可统一调度的电路单元,子电路内部可嵌套其他子电路,递归解析天然适配多层嵌套场景,实现电路模块复用,解决重复电路重复定义的冗余问题; 第二,多优先级异常分层设计:将连线语法错误按题目给定优先级分层判断,单一方法内按固定顺序校验,直接返回最高优先级错误,全局仅记录第一条异常并终止程序,完全匹配题目输入约束; 第三,解耦优化:将文本解析、错误判断、门创建、仿真迭代拆分为独立静态方法,理论上每个方法代码长度控制在 50 行以内,对比前两版高度耦合的 Main 主类,长期维护难度显著降低。 本次设计遗留两处可持续优化点:异常提示文案全部硬编码在方法内,未统一常量管理;子电路与顶层电路共用一套 pinMap 全局引脚表,未做命名空间隔离,极端场景下顶层引脚名与子电路内部引脚重名会造成电平覆盖、数据错乱。
二、踩坑详实心得
2.1作业集4程序1踩坑记录
仿真迭代循环逻辑漏洞(失分 6 分)
测试现象:级联电路输出电平计算错误,如与门输出接入非门,非门输出电平永久固定为无效值 - 1; 流程图根因:原始代码仅单次执行 “传递连线→计算门输出”,未循环迭代至全部引脚电平稳定;电平更新时序颠倒,先计算门输出、再传递连线信号,级联信号无法完成传递收敛; 数据佐证:对应报表最高圈复杂度 34 的仿真循环方法,原始循环缺少新旧电平对比标记; 修复方案:新增 do-while 循环,每次迭代前保存全部引脚旧电平,迭代完成后对比新旧电平标记 changed,无电平变化时退出循环;调整执行时序为先批量传递所有连线信号,再统一计算全部门输出,修复后 6 组官方样例全部通过。
同类门排序逻辑错误(失分 3 分)
类设计缺陷:Gate 实体仅存储门编号,冒泡排序未按编号升序比较,同类型门随机乱序输出,不符合题目打印规范; 修复方案:编写独立 sort 静态工具方法,遍历同类门列表,冒泡交换门编号更大的对象,输出时严格从小到大排序打印。
2.2作业集5程序2踩坑记录
多路选择器 Mux 控制位计算顺序颠倒(失分 8 分)
测试样例 9 输入:INPUT: A-1 B-0 C-0,Z (1) 1 控制端 C=0、输入 A=1、B=0,标准答案预期输出 1,原始代码输出 0; 根因:控制引脚正序遍历叠加二进制数值,题目规定控制引脚下标 0 为高位,必须逆序叠加计算选择下标; 数据佐证:报表中单方法最高圈复杂度 47 即包含该多路选择器 calcOutput 分支; 修复方案:循环从 controlPins 列表末尾向前遍历,先乘 2 叠加高位数值,修正后多路选择器全部测试用例匹配标准答案。
译码器使能条件判断逻辑写错(失分 4 分)
题目规则:译码器正常工作有效条件 S1=1,S2+S3=0(即 S2=0 且 S3=0),原始代码误写为S1==1 || S2==0 && S3==0,使用逻辑或代替逻辑与; 修复:修改判断条件为s1.getLevel() == 1 && s2.getLevel() == 0 && s3.getLevel() == 0,不满足使能条件时所有输出引脚电平统一置 - 1。
三态门输出引脚打印编号错误(失分 2 分)
类设计缺陷:TriStateGate 器件输出引脚固定编号为 2,原始代码统一打印 - 0,与样例输出格式不符; 修复:重写 printOutput 方法,固定输出格式gateName+"-2:"+lev,匹配题目输出规范。
2.3作业集6程序4踩坑记录
2.3.1子电路引脚类型判断颠倒
测试样例 1:C1 子电路 INPUT:A B、OUT:C,连线[A A(2)1-1],原始代码持续报语法错误input and output sequence error; 根因(UML 类结构缺陷):isSubSourceToken与isSubDestToken内部判断逻辑完全颠倒,将子电路 INPUT 输入标识判定为信号输出源、OUT 输出标识判定为目标输入引脚,子电路内部连线语法校验全部失效; 流程图逻辑漏洞:子电路内部信号流向定义混淆,子电路 INPUT 是外部传入的目标输入引脚,子电路 OUT 是内部向外输出的信号源,原始代码定义完全倒置; 修复数据:交换两类标识判断分支,子电路 OUT 名称判定为输出源、INPUT 名称判定为目标输入,样例 1、2 语法校验全部正常。
2.3.2异常处理优先级与终止逻辑缺失
测试现象:同一份输入同时存在连线语法错误、引脚信号冲突,程序会同时打印两条 ERROR 报错,违反题目 “仅输出第一条最高优先级异常” 硬性规则;多条连线存在错误时,多条报错刷屏输出; 根因:无全局异常标记变量,检测到引脚冲突立刻打印输出,未先判断是否存在前置语法错误;无程序终止逻辑,报错后继续解析电路、执行电平仿真; 修复方案:新增hasGlobalError全局布尔标记、firstErrorMsg字符串存储第一条错误;检测到任意语法错误立刻赋值标记并终止所有解析流程,直接打印第一条错误后退出程序;仅在无语法错误前提下,才检测引脚多源冲突。
2.3.3子电路输出引脚格式与排序错误
测试样例 2 预期输出C1-N1-0:1,初次运行输出N1-0:1,缺失子电路编号前缀;多层嵌套子电路未按嵌套路径升序排序; 根因:创建门实例时未拼接子电路前缀字符串,拆分嵌套路径方法仅读取末尾门编号,未逐层存储完整子电路编号用于排序; 修复方案:递归解析子电路时传递完整层级前缀,门全名拼接Cx-前缀;新增 splitNestPath 方法拆分层级编号列表,自定义 Comparator 逐层比较嵌套路径,输出格式完全匹配题目规范。
2.4通用共性踩坑总结
1.空字符串分割容错不足:输入行使用 split 按空格分割后产生空 token,导致源 / 目标引脚计数错乱;统一修复方案:分割后遍历过滤所有空字符串再存入列表;
2.引脚电平空值未判空:未连线的引脚不会存入 pinLevel 映射表,直接 get 获取返回 null,运算时触发空指针异常;统一处理:每次读取电平先判断 key 是否存在,不存在等效为无效电平 - 1;
3.忽视题目输出排序规则:每一次迭代开发都出现同类元件编号乱序、器件类型输出顺序错乱问题;固定解决方案:用 HashMap 按 typeSeq 分组,1~5 顺序遍历分组,每组内部冒泡排序门编号。
三、编码可持续改进建议
3.1代码结构与设计模式改进
常量统一抽取,消除全量硬编码
当前三个版本错误提示文案、器件类型字符、输出排序序号、三态 / 译码器固定引脚编号全部硬编码分散在各个方法内,修改维护成本极高;改进方案:新建全局 Constant 常量类,统一存储 ERROR 文案、GATE_TYPE 字符集合、TYPE_ORDER 排序序号、各类器件固定引脚编号,后续修改输出文案、调整器件顺序仅需修改常量类,无需改动业务逻辑代码。
拆分独立异常处理模块,自定义分层异常类
当前全部版本使用全局布尔标记传递异常状态,模块耦合度高;可持续改进:自定义 WireSyntaxException、SignalConflictException 两类运行时异常,不同语法错误抛出对应独立异常,顶层 main 方法使用 try-catch 统一捕获,集中输出异常信息,完全符合 Java 官方异常处理规范,后续新增异常类型仅需新增异常子类,无需修改现有校验逻辑。
子电路命名空间隔离,彻底消除引脚冲突风险
当前顶层电路与所有子电路共用同一个 pinMap 全局引脚表,极端场景下顶层引脚名与子电路内部引脚重名会造成电平覆盖、数据错乱;改进方案:将每个 SubCircuit 封装独立本地引脚映射表,子电路仅通过 INPUT/OUT 字段对外暴露引脚,内部引脚与顶层完全隔离,实现真正模块化封装,支持无冲突多层嵌套。
3.2高复杂度模块逻辑简化
- 程序 2 译码器、多路选择器 calcOutput 方法圈复杂度达到 47,多层 if 分支嵌套;优化方案:将使能条件判断、输入编码数值计算拆分为独立私有工具方法,每个子方法仅执行单一计算逻辑,拆分后单方法圈复杂度可降至 4 以内,大幅降低调试难度;
- 程序 4 五级优先级连线语法校验方法分支过多;优化方案:将五类错误封装为有序枚举类型,按优先级顺序存入有序列表,循环依次判断,匹配到错误直接返回对应枚举文案,后续新增错误类型仅需扩展枚举,无需修改多层 if-else 分支。
3.3输入解析鲁棒性持续优化
当前代码仅能处理题目规定的标准输入格式,无非法字符、残缺格式容错;可持续改进:
- 增加文本行合法性校验,过滤非法符号、残缺方括号、INPUT/OUT 关键词缺失、子电路 Cx: 格式错误等异常输入,补充对应 ERROR 提示;
- 增加同种元件重复编号检测,题目明确规定同种元件编号不可重复,当前三套代码均无检测逻辑,新增重复编号专属异常提示;
- 增加输出引脚短接检测,题目约束多个输出引脚不能连接同一目标引脚,新增短接异常校验,完整覆盖题目全部输入约束。
3.4工程规范与可维护性改进
1.完善标准化注释体系:三张截图显示三套代码注释占比最高仅 0.3%,大量代码无任何注释;统一规范:每个类添加文档注释说明整体功能,所有静态工具方法添加入参、返回值注释,关键循环、分支添加行内注释,降低他人阅读、后续迭代理解成本;
2.统一语义化命名规范:局部变量、集合名简化简写命名,当前部分变量使用 src/dest 简写,可优化为 sourcePin/targetPin、subCircuitPrefix,语义一目了然;
3.抽离独立 IO 工具类:文本读取、行过滤、字符串分割逻辑重复出现在主解析、子电路递归解析中,新建 FileIO 工具类封装所有输入读取、清洗方法,消除代码重复冗余。
3.5面向时序电路预留扩展接口
下一版程序需要增加 D 触发器、JK 触发器等时序元件,当前 Gate 抽象类无时钟引脚存储支持;提前改进:在 Gate 父类预留 clockPins 时钟引脚集合,不改动现有基础门、组合器件逻辑,后续时序器件直接复用父类字段,实现无缝增量开发,无需再次大规模重构顶层抽象类。
四、阶段性综合总结
4.1本阶段三次作业学到的核心知识与工程思维
1.Java 面向对象完整落地能力:从基础封装、继承、多态,到工厂模式、组合模式两大常用创建型 / 结构型设计模式完整实践,理解抽象类统一接口、子类差异化实现的核心价值,能够根据业务迭代需求提前预判、设计可扩展父类;
2.增量迭代开发工程思维:三道题目完整模拟真实软件版本迭代流程,学会复用历史成熟代码、最小化重构改动、兼容旧版业务逻辑,建立 “先实现基础功能、再扩展组件、最后完善鲁棒性” 的标准开发流程,摒弃一次性写完全部功能的粗糙开发方式;
3.离散事件仿真逻辑实现:掌握数字电路信号迭代仿真收敛算法,理解电平传递、器件运算的时序先后关系,能够通过循环迭代让电路电平稳定收敛,具备简单离散系统仿真编码能力;
4.递归模块化解析能力:实现多层嵌套子电路递归读取、存储、调度,掌握树形结构文本解析思路,理解复合组件与叶子组件的统一调度逻辑;
5.多优先级错误分层处理:学会梳理业务约束优先级,按文档规则分层校验输入,保证异常输出完全匹配需求文档,养成先校验输入、再执行业务的稳健编码习惯;
6.软件工程分析工具使用:能够通过 SourceMonitor 静态代码统计报表量化评估代码质量(圈复杂度、代码复用率、类拆分粒度、注释覆盖率),使用 PowerDesigner 绘制 UML 类图梳理代码分层结构,从可视化图表、量化数据中提前发现设计缺陷。
4.2仍存在不足、需要深入学习研究方向
1.设计模式运用不够主动熟练:仅被动根据题目硬性需求使用工厂、组合模式,无法主动预判业务扩展点提前选用合适设计模式,后续需要系统学习单例、策略、装饰器等常用模式,自主练习完整架构设计;
2.复杂时序图、环路仿真算法薄弱:本次仅实现无反馈简单线性迭代仿真,无法处理带反馈环路、时序触发器的电路,下一版时序电路包含反馈环路,需要系统学习有限状态机、时序迭代收敛算法,深入研究数字时序电路底层仿真原理;
3.标准化异常体系设计欠缺:本次仅使用全局标记简易处理异常,未掌握 Java 自定义异常、分层异常捕获、全局异常拦截的标准工业写法,需要系统学习 Java 完整异常处理机制,练习大型项目统一异常框架搭建;
4.代码质量优化意识滞后:初次编写代码优先完成功能,忽略 SourceMonitor 报表反映的圈复杂度、代码复用、注释覆盖率、命名规范等工程指标,后续开发需要先用工具评估代码质量,再调试业务功能,养成高质量编码习惯;
5.边界测试用例自主设计能力不足:开发时仅对照官方样例调试,自主梳理极端边界用例(多层嵌套、多异常叠加、空输入、无效悬空引脚)的能力较弱,后续开发需先梳理全部边界场景,再编写测试用例全覆盖题目约束。
4.3阶段整体感悟
本次三道数字电路模拟程序作业并非单纯的 Java 语法练习题,而是一套完整微型工程开发实训。从最基础的单一组件仿真,到多类型器件扩展,再到模块化封装、输入鲁棒性完善,完整走完小型软件从 v1 到 v3 的迭代流程。开发过程中多次因前期架构设计缺陷、逻辑细节遗漏导致大量失分,结合三张 SourceMonitor 度量报表的量化数据复盘后,我深刻意识到:编码实现业务功能只是软件开发最基础的一环,合理分层架构、完备输入校验、贴合需求的异常处理、高复用低耦合的代码结构,才是工业级软件开发的核心要求。 后续学习中,我会彻底转变 “写完功能即可” 的粗放编码思维,开发前优先梳理业务需求分层、绘制 UML 结构、预判迭代扩展点再动手编码,同时主动练习边界测试设计、静态代码质量分析,补齐时序电路、设计模式、规范化异常处理等薄弱知识点,为后续大型综合项目开发打下扎实基础。