电路仿真迭代编程作业集 4-6 阶段性复盘总结博客

一、前言
本次软件工程课程作业集 4、作业集 5、作业集 6 为连续迭代式数字电路仿真系统开发任务,是面向对象思想、组合模式、分层架构、迭代增量开发、异常校验、复杂逻辑封装的综合性实战训练。三次作业呈现由简到繁、功能递进、架构升级的完整开发流程,覆盖了基础逻辑门仿真、复杂器件拓展、子电路复合组件、语法错误校验、电路信号迭代传播、多类型器件兼容输出等核心知识点。
作业集 4 为基础版数字电路仿真,核心任务是实现与门、或门、非门、异或门、同或门五种基础逻辑门,完成输入信号解析、线路连接、信号迭代推演、分类排序输出,是整个项目的基础架构奠基阶段,题量适中,难度偏基础,重点考察类的继承、抽象类设计、多态调用、集合容器使用。
作业集 5 为功能拓展迭代版,在基础逻辑门之上,新增三态门、译码器、数据选择器、数据分配器四种复合型数字器件,重构了引脚匹配、信号赋值、多引脚输出、特殊器件专属计算逻辑,题量大幅提升,难度中等偏上,重点考察代码拓展性、方法重写、多分支类型判断、差异化输出逻辑。
作业集 6 为架构终极迭代版,引入子电路复合组件(组合模式),支持自定义子电路嵌套、子电路输入输出映射、全局线路错误语法校验(多输入、无输入、无输出、顺序错误、信号冲突五大错误)、全局信号递归传播,是三次作业中难度最高、架构最复杂、代码量最大的一次,重点考察组合设计模式、分层解析架构、语法校验、递归迭代、字符串解析、复杂业务逻辑解耦。
三次作业遵循软件工程增量迭代开发思想,每一次作业均在上一版本代码基础上拓展功能、修复缺陷、优化架构,完整模拟了工业软件开发的迭代流程。本人在三次作业开发过程中,经历了基础功能实现→功能拓展兼容→架构重构优化的完整过程,同时也暴露了自己在面向对象设计、代码规范性、边界测试、异常处理、架构解耦上的诸多问题。本文将从代码设计分析、真实踩坑心得、代码改进方案、阶段总结四个维度,对本次阶段性迭代作业进行全面详实复盘。
二、设计与分析
(一)整体架构迭代分析
三次作业的代码架构呈现明显的迭代升级特征,完全贴合面向对象的抽象、继承、多态、组合四大核心特性,整体类结构分层清晰:
作业集 4 基础架构
核心架构:抽象逻辑门父类 + 5 种基础门子类 + 工具类 + 连线类 + 主解析类
抽象类 LuojiMen 统一封装所有逻辑门的通用属性(名称、输入数组、输出值、有效状态)和通用方法(输入赋值、输入校验、抽象计算方法);
五大基础门继承父类,重写专属jisuan()计算方法,实现多态;
GongJu工具类统一实现门创建、排序、输出、数字提取通用功能;
Lianjie连线类封装信号源与目标引脚映射关系。
本阶段架构特点:单一层级继承、无嵌套、逻辑简单、耦合度较低,仅能实现基础门电路仿真,无复杂器件、无子电路、无错误校验。
4
image
4
作业集 5 拓展架构
在作业 4 基础上横向拓展器件类型,不改动原有基础架构,完全符合开闭原则:
新增SanTaiMen、YiMaQi、ShuJuXuanZeQi、ShuJuFenPeiQi四大特殊器件子类;
重写特殊器件的shezhiShuru()、shuruQuanbuYouxiao()、jisuan()方法,适配多引脚、选择性有效、多输出引脚的特殊逻辑;
重构主循环仿真逻辑,区分基础门与复合型器件的输出规则。
本阶段架构特点:可拓展性提升、多态复用性增强,但仍为单层对象结构,不支持电路嵌套。
5
image
5
作业集 6 复合架构
在作业 5 基础上纵向架构升级,引入组合模式,实现子电路嵌套:
新增ZiDianLu子电路类,封装子电路名称、子电路输入输出端口、子电路私有连线;
新增全局语法校验模块,实现五大线路错误检测;
实现主电路 + 子电路双层电路解析、全局信号递归迭代、子电路引脚全局映射;
重构解析逻辑,区分子电路域、主电路域的信号传播规则。
6
image
image
(二)核心代码结构设计分析
结合 SourceMonitor 代码统计与 PowerDesigner 类图结构,对本人三次作业源码核心设计进行解析:
抽象父类设计(核心亮点)
三次作业始终以抽象逻辑门父类为顶层统一规范,将所有电路器件的通用属性与通用行为向上抽取,差异化计算逻辑向下交由子类实现。该设计极大降低了代码冗余,保证了所有器件的统一性,是典型的模板方法模式应用。
工具类解耦设计
GongJu工具类完全独立于业务实体类,统一封装对象创建、排序、字符串解析、引脚提取、类型判断通用工具方法,实现业务逻辑与工具逻辑分离,符合单一职责原则。
迭代开发的优势体现
三次开发全程没有推翻旧代码,而是增量新增、局部重写、功能叠加:
原有 5 种基础门代码完全复用,无修改;
新增器件全部新建子类,不改动父类与旧子类;
子电路功能新增独立实体类,解析逻辑局部拓展。
从工程角度,完全符合软件工程迭代开发、开闭原则、最小改动原则。
(三)个人代码设计心得
前期作业 4 的设计过于基础,仅实现功能,未考虑后续拓展性,初始输入校验、引脚匹配逻辑简陋,为后续迭代埋下隐患;
作业 5 拓展器件时,初次体会到多态重写的价值,不同器件差异化逻辑无需修改主循环,仅需重写子类方法;
作业 6 子电路 + 错误校验的开发,让我真正理解组合模式优于单纯继承,继承适用于同类拓展,组合适用于整体 - 部分嵌套结构,完美适配子电路嵌套场景。
三、采坑心得(详实复盘、基于源码与测试结果)
本次三次迭代作业我全程独立编码、调试、测试,过程中出现大量语法报错、逻辑 bug、迭代死循环、输出错乱、校验失效、子电路映射失败等问题,所有问题均基于真实源码调试结果,以下为详实复盘:

  1. 作业集 4 核心踩坑
    坑点 1:输入引脚数组越界、空值未校验
    初始代码未对 split 分割空字符串、数组长度不足做防护,输入非法格式的INPUT参数时,直接触发数组下标越界异常。
    原因:缺少边界判断,直接强转数字,未遵循输入数据容错原则。
    解决:增加数组长度判断、空字符串过滤,仅合法键值对存入信号集合。
    坑点 2:逻辑门重复创建,导致仿真错乱
    初次遍历连线目标引脚时,未做门对象查重判断,同一逻辑门被重复 new 多次,内存存在多个同名对象,信号赋值分散在不同对象中,导致仿真结果错误。
    数据佐证:测试用例中 2 输入与门被重复创建 3 次,最终输出始终为 - 1 无效值。
    解决:工具类增加zhaodaoMen查重方法,存在则复用,不存在才新建对象。
    image

  2. 作业集 5 核心踩坑
    坑点 1:特殊器件输入完整性判断错误
    三态门、译码器存在无效引脚、选择性有效输入,我最初直接复用父类全局输入校验方法,导致合法电路被判定为输入不完整,器件无法计算输出。
    原因:父类通用校验逻辑适用于基础门,无法适配特殊器件差异化规则,未重写校验方法。
    解决:重写shuruQuanbuYouxiao()方法,针对三态门仅校验有效输入引脚,忽略输出引脚。
    坑点 2:译码器、分配器多输出引脚映射失败
    基础门仅有 - 0 单输出引脚,而译码器、分配器存在多引脚输出,最初直接复用单输出赋值逻辑,导致多引脚信号无法写入全局信号表。
    测试结果:译码器始终无任何输出数据,仿真结束后信号集合为空。
    解决:单独判断特殊器件类型,遍历Map集合批量写入多引脚信号,区分基础门与复合器件输出逻辑。
    image

  3. 作业集 6 核心踩坑(最多、最难、最关键)
    坑点 1:子电路引脚全局映射前缀缺失
    子电路内部引脚为局部名称,我最初未拼接C1-、C2-全局前缀,导致主电路无法识别子电路引脚,子电路完全不参与仿真迭代。
    调试现象:子电路所有逻辑门输出全部为 - 1,无任何有效信号。
    解决:子电路所有连线、引脚全部拼接子电路编号前缀,实现局部引脚→全局引脚映射。
    坑点 2:线路错误校验逻辑顺序颠倒
    题目要求报错优先级:多输入源>无输入>无输出>顺序错误>信号冲突,我最初判断顺序混乱,导致本该报的错误未触发,错误判定不准确。
    坑点 3:信号冲突校验未做全局引脚查重
    最初仅判断单条连线,未维护全局pinSrc引脚来源集合,导致多个连线给同一引脚赋值的冲突场景无法检测,测试点全部报错。
    坑点 4:迭代死循环 bug
    子电路信号传播过程中,changed状态判定不准确,微小信号更新会持续触发循环迭代,程序无法终止。
    根本原因:未精准判断信号是否发生真实变更,无脑刷新信号集合。
    整体踩坑总结
    面向对象设计思维不足:前期习惯面向过程编码,通用逻辑未向上抽取,代码冗余高;
    边界测试意识薄弱:极少主动测试空输入、非法输入、边界引脚、重复赋值场景;
    架构思维欠缺:前期不考虑迭代拓展,导致后期迭代需要大量修补旧代码;
    调试能力不足:复杂逻辑报错时,无法快速定位是解析错误、赋值错误、迭代错误还是输出错误。
    image

四、改进建议(可持续迭代优化方案)
结合三次作业源码缺陷,从代码规范、架构、性能、容错、拓展性五个维度提出可持续改进方案,可用于后续版本迭代优化:

  1. 代码规范性优化
    目前代码中存在大量中文变量、中文方法名(shuru、jisuan、lianjie),不符合工业编码规范。
    改进:全部替换为英文命名,统一驼峰命名法,增加标准注释,提升代码可读性与可维护性。
  2. 异常体系规范化
    当前所有异常均为手动判断 + 打印错误语句,无统一异常类。
    改进:自定义电路异常枚举类、全局异常捕获类,统一管理五大线路异常、参数异常、器件不存在异常,实现异常标准化输出。
  3. 架构解耦优化
    当前解析逻辑、仿真逻辑、输出逻辑、校验逻辑全部耦合在 Main 主类中,主类代码臃肿、职责混乱。
    改进:分层拆分架构
    解析层:单独负责子电路、主电路、输入线路解析;
    校验层:单独负责语法错误校验、信号冲突校验;
    仿真层:单独负责信号迭代传播、器件计算;
    输出层:单独负责器件分类、排序、标准化输出。
  4. 性能优化
    当前仿真迭代为无脑循环,每次循环遍历所有连线 + 所有器件,存在大量无效遍历。
    改进:增加变更监听机制,仅遍历发生信号变更的连线与器件,大幅提升仿真效率。
  5. 拓展性优化
    当前新增器件需要手动新增子类、新增判断逻辑。
    改进:利用反射机制实现器件自动注册,新增器件无需修改核心代码,完全符合开闭原则。
  6. 容错性优化
    完善空行、全空格、非法字符、重复连线、空器件等极端场景的容错处理,覆盖所有边界测试点。
    五、阶段性总结
    经过作业集 4、5、6 三次迭代式电路仿真开发,我系统掌握了面向对象编程核心思想、组合设计模式、增量迭代开发、复杂字符串解析、状态迭代仿真、语法校验设计等核心能力,完成了从简单功能编码到工程化架构开发的思维转变。
    在知识层面,我熟练掌握了抽象类与多态的落地使用、继承与组合的适用场景、工具类解耦设计、分层架构设计、错误校验逻辑设计、嵌套组件开发,彻底理解了软件工程迭代开发的核心价值。
    在能力层面,我的代码调试能力、问题排查能力、边界测试能力、架构设计能力得到极大提升,能够独立完成复杂业务系统的迭代开发与 bug 修复。
    同时我也清晰认识到自身存在的诸多不足:
    1.编码前期架构规划能力不足,容易写出高耦合、难拓展的代码;
    2.边界测试意识薄弱,习惯性只通过样例测试,忽略极端场景;
    3.代码规范性不足,变量命名、代码分层、注释规范有待加强;
    4.设计模式落地不够熟练,只能简单使用,无法主动架构设计。
    后续我将重点学习软件工程架构设计、设计模式实战、代码规范、单元测试相关知识,刻意训练自己的工程化思维,摒弃面向过程的编码习惯,真正做到可复用、可拓展、可维护、高容错的工程化编码,为后续大型项目开发打下扎实基础。
posted @ 2026-06-24 23:14  塑料博士  阅读(0)  评论(0)    收藏  举报