作业集4-6总结

1.前言
这段时间接连完成了NCHUD数字电路模拟程序三份迭代作业,三份作业循序渐进向下兼容开发,从基础五种逻辑门电路仿真,升级到含控制引脚的九类组合元件电路,最后新增子电路复用、分级异常校验功能,完整复刻课程给定的数字硬件引脚信号流转、逻辑运算业务流程,贴合课堂面向对象、设计模式教学考点。
本次作业涉及核心知识点:Java面向对象继承多态、组合设计模式、正则字符串解析、有向图拓扑排序、枚举状态封装、聚合组合类关系划分、自定义排序、多级业务异常优先级判定、数字电路硬件逻辑公式代码转化、控制台格式规范化输出。
第一份作业难度较难,主打基础功能开发,仅实现与或非异或同或五类基础门运算、引脚信号绑定、有序元件输出,规则简单、代码逻辑直白;第二份作业升级为困难难度,拓展九类电路元件,新增控制引脚分层、高阻无效态、差异化输出规则,引脚判定逻辑大幅变复杂;第四份终极作业难度最高,新增子电路嵌套引用、五级连接异常校验、引脚信号冲突检测,同时强制约束代码架构,新增大量语法校验规则,调试工作量最大。
三份作业迭代逻辑清晰,底层信号流转、引脚解析核心逻辑完全复用,无推倒重构,在迭代编码中,改掉了堆砌代码的习惯,学会提前绘制类图规划架构,遵循开闭原则、单一职责原则开发,代码规范性大幅提升。
2.设计与分析
作业一 基础逻辑门模拟程序
本次作业为初代基础版本,仅包含与、或、非、异或、同或五种基础门电路,所有元件仅拥有输入引脚、0号输出引脚,无控制引脚,只需完成外部端口信号录入、引脚绑定、门逻辑运算、有效元件有序输出即可,未接入引脚的元件直接忽略输出。
类结构严格遵循单一职责拆分设计,没有将解析、运算、输出写在主类中。新建抽象门电路父类封装通用属性与抽象计算方法,五类门电路分别创建子类重写运算方法;单独创建引脚信号工具类管理电平映射、端口绑定;主类仅负责读取文本、调用解析方法、控制台打印,各司其职耦合度极低。
借助SourceMonitor统计源码,整体代码精简冗余少,方法粒度小,运行逻辑固定:正则逐行解析INPUT端口电平、[]连接语句,建立输出引脚到输入引脚的信号映射,拓扑排序后批量计算门电路输出,按大类+编号升序格式化输出结果。
本次作业让我熟练掌握继承多态用法,理解父类抽取通用属性、子类实现独有业务的开发思路,相比全部代码写在主方法,分层类结构更方便修改门逻辑、调整输出排序规则。

PowerDesigner 类图
37b000d991e17abdc1c84dcd5918d45e

SourceMonitor 代码报表示意图
文件总数:4
总行数:486
有效代码行:392
平均方法行数:14
平均圈复杂度:2.8
注释占比:19.3%
无高危复杂度方法、无冗余全局变量

作业二 多类型组合电路模拟程序
本次作业在作业一基础上迭代升级,元件扩充至九类,新增三态门、译码器、数据选择器、数据分配器四类专用电路,新增核心规则:引脚分为控制引脚、输入引脚、输出引脚三类,固定引脚编号分区、新增高阻无效电平、各类元件定制差异化输出格式。
本次优化原有架构,新增引脚类型枚举类统一管控引脚属性,重构父类引脚存储结构;拆分出专用运算工具类,单独编写译码编码换算、多路选择分配、三态门通断判定算法;区分普通逻辑门、可控元件两大继承分支;新增全局电平状态类,统一0、1、高阻、空四种信号状态,避免自定义状态混乱。
梳理类关系后明确:元件与引脚为聚合关系,控制引脚隶属于元件为组合关系,引脚可解绑复用、元件消亡则引脚失效。运行流程新增前置引脚校验:判定元件所需引脚是否全部接入信号,缺引脚直接判定无效、跳过输出。
本次迭代优化了原有拓扑算法,适配多输出引脚元件拓扑流转,同时严格遵循题目输出顺序:与门、或门、非门、异或门、同或门、三态门、译码器、数据选择器、数据分配器,同类元件编号升序输出,适配译码器输出0引脚编号、分配器输出组合电平的特殊格式。

PowerDesigner 完整类图
37b000d991e17abdc1c84dcd5918d45e

SourceMonitor 报表
总类数:9
有效代码:872行
最高圈复杂度:4.6
枚举、工具、实体完全解耦
引脚分区逻辑封装完备

作业三 子电路+异常校验电路模拟程序
作为终极迭代作业,保留前两版全部电路运算逻辑,新增两大核心模块:子电路定义引用、五级连接异常校验,同时规定异常优先级、同名元件命名隔离、连接语句语义规则,架构层面强制使用组合设计模式开发。
架构完全贴合课程给定组合模式:搭建顶层电路组件抽象类,原生九大电路为叶子组件不可拆分,子电路为组合组件可聚合多个电路、嵌套复用;子电路拥有独立编号,内部元件和主电路元件编号可重复,输出必须携带子电路编号前缀,做好命名空间隔离。
新增独立异常校验模块,按题目优先级排序异常:多输入异常>无输入异常>无输出异常>出入顺序颠倒>引脚信号冲突,单次扫描连接语句,仅抛出优先级最高的一条异常,且程序仅校验第一条违规连接语句,后续语句不再校验。同时强化输入校验,非法端口、重复绑定引脚直接抛出指定格式错误。
代码层面硬性约束:禁止使用JDK自带排序方法,手写冒泡排序完成元件、引脚排序;运算类纯职能计算,不做输入输出;严格区分连接语句语义:中括号首个参数为输出端,其余全部为输入端,元件输入引脚放在首位直接判定顺序错误。

PowerDesigner 最终组合模式类图
75b82acd764ee2790f44abe025d9612f

SourceMonitor 项目总报表
项目总类:14个
总代码:1268行
运算工具类无全局成员变量
排序、校验、运算功能完全拆分
符合组合模式架构、无违规继承滥用

3.踩坑心得
一:文本解析与回车截留问题,前三版作业通用bug。使用Scanner读取数字引脚编号后,残留回车换行符,后续读取端口字符串、子电路文本时,直接读取空字符串,造成解析中断、元件匹配失败。调试多次后固定写法:数字读取完毕后调用nextLine吸收回车,统一适配全文本读取,彻底解决解析错乱问题。
二:元件排序与输出规则理解偏差。作业一初期只按元件名字母排序,忽略官方固定大类输出顺序,同时未拆分编号数字排序,样例输出全部错位。后续自建权重字典绑定元件大类顺序,正则截取元件数字编号二次排序,才完全匹配样例输出格式。
三:可控元件引脚分区逻辑混淆。作业二三态门、译码器引脚编号固定分区,前期混用统一引脚解析正则,把控制引脚当成普通输入引脚运算,导致三态门高阻判定错误、译码器编码取值错误。后续为每类拓展元件编写专属引脚区间方法,固化0号起始控制引脚区间,修复运算结果偏差问题。
四:作业四异常优先级与语义判断出错。最初遇到异常直接返回报错,低优先级异常覆盖高优先级报错,不符合题目优先级规则;同时分不清连接语句出入方向,把元件输入引脚作为输出端写入括号首位,漏判顺序错误。后期给异常绑定优先级数值,保留最高级异常,整理连接语义规则对照表,修复全部校验bug。
五:子电路同名元件覆盖问题。前期全局用元件名做唯一key,子电路和主电路同名元件互相覆盖,信号数值被篡改。修改存储key为「子电路ID-元件全名」,主电路默认ID为0,隔离全局命名空间,适配子电路嵌套调用。
六:译码器、分配器定制输出格式写错,电平小数格式未统一、冒泡排序偷用Arrays.sort工具方法,多次提交被驳回。后期写完对照样例逐行核对输出,严格遵守代码写法约束,规避格式类扣分。
4.改进建议
(1)全文硬编码常量可优化整改。目前门电路默认引脚数量、译码器基准控制电平、元件大类权重、异常提示文本全部写在业务代码内,修改参数需要改动多处代码。后续新建全局常量工具类,统一收纳所有固定数值、固定文本,实现参数一键修改,提升代码可维护性。
(2)信号流转性能有待优化。目前每一次元件计算都遍历全局引脚映射查找电平,电路、子电路数量变多后循环冗余、运行变慢。可新增引脚电平缓存Map,存储已计算完成的输出电平,复用计算结果,避免重复遍历拓扑计算,提升多子电路嵌套运行效率。
(3)异常体系可拓展完善。目前仅实现题目指定五类连接异常,缺少引脚越界、元件不存在、子电路循环引用、端口重复定义拓展异常,且遇到异常直接终止程序。后续自定义电路专属异常类,try-catch捕获异常,实现弹窗提示、不直接闪退的温和报错处理。
(4)交互模式与算法可迭代升级。当前依旧纯顺序文本录入,可读性差,可改造菜单式控制台交互,自主选择加载电路、查看电平、校验连接、运行运算;手写冒泡排序适配作业要求,但大数据量效率低,可利用策略模式封装多种排序,开发环境自动适配高效排序,作业环境切换手写排序,兼顾合规性与性能。
(5)适配后续时序作业预留开发。本次全部为无反馈组合电路,可提前新增信号时间戳属性,预留环路检测算法,为后续时序电路、带反馈触发器作业提前架构铺垫,不用重构底层信号类。
5.总结
经过三次迭代作业开发,我完整吃透面向对象全套核心知识,从基础继承、多态、聚合组合关系,进阶掌握组合设计模式适用场景,能够根据业务复杂度,自主拆分实体类、工具类、枚举类、异常类,熟练遵循单一职责、开闭原则搭建项目架构。
同时掌握课程实用开发技能:Java正则分组文本解析、有向无环图拓扑排序、自定义多级异常、手写基础排序、业务数学公式代码转化、控制台规范化输出,同时补齐数字电路硬件理论知识,懂引脚分类、逻辑运算、高阻态、译码选择底层原理,实现理论代码双向结合。
现阶段自身短板依旧明显:一是图论算法功底薄弱,拓扑排序手写效率低,不会电路环路检测;二是代码前置设计能力不足,前期作业未预留状态字段,后期迭代大量重构代码;三是集合底层、设计模式活用不足,只会固定写法,不会灵活选型架构;四是异常处理能力薄弱,报错处理方式简单粗暴。
后续学习计划:深耕常用设计模式,用策略模式重构门逻辑运算;学习单元测试,为每一类电路编写测试用例;预习时序电路原理,补齐环路、边沿触发知识点;系统学习Java异常体系,打造完整项目异常处理机制,为后续大型项目开发夯实基础。

posted @ 2026-06-22 23:24  小弟铁锤  阅读(1)  评论(0)    收藏  举报