作业集4—6的总结

第四次作业集:

前言:
知识点:面向对象封装、单一职责原则 SRP、自定义实体类存储门电路信息、字符串解析切割、Map 存储引脚电平映射、集合分类排序、逻辑门真值运算、输入字符串分段解析、条件校验、集合遍历过滤、多类解耦设计、输入缓冲区处理、边界过滤(缺失输入引脚的元件舍弃)、自定义排序器 Comparator、字符串正则拆分。
题量:偏大
难度:较难

设计与分析:
第四次作业代码结构截图
image

Kiviat 雷达图:代码复杂度、方法长度、嵌套深度、耦合度等指标均落在绿色安全区间;仅注释率为 0,代码整体结构清晰、低耦合,质量合格。

嵌套深度柱状图:绝大多数逻辑分支嵌套层数 0~3 层,仅少量解析判断逻辑到达 4 层,无 5 层及以上深度嵌套,可读性高。

这次作业偏难些,为了实现单一职责原则我写了八个类,每个类的修改都不会影响其他类。

PinSignal引脚信号实体类 —— 纯数据类,无业务逻辑
仅存储引脚完整标识(如 A (2) 1-1、X1-0)、所属元件名、引脚编号、当前电平 0/1;提供 getter/setter 封装字段,用于统一管理所有输入 / 输出引脚的电平状态。

Gate逻辑门元件实体类 —— 纯数据类,无运算逻辑
存储元件类型标识(A/O/N/X/Y)、完整元件名称、编号、输入引脚总数、全部输入引脚集合、输出引脚对象;仅封装属性,不参与电平计算。

CircuitParser电路解析工具类 —— 单一职责:字符串解析
只负责解析原始输入文本:解析 INPUT 全局输入信号、解析 [] 连线语句、拆分元件名与引脚号、区分多输入门 (A/O) 与双输入 / 单输入门 (N/X/Y)、提取元件编号与引脚数量;所有字符串切割、正则匹配、文本提取逻辑集中在此类,后续修改输入格式仅改动本类,不影响运算与调度。

GateCalculator门运算工具类 —— 单一职责:电平逻辑计算
独立封装五种门电路运算规则:与门、或门、非门、异或门、同或门真值计算;接收一组输入电平列表,返回输出电平;与电路解析、主调度完全解耦,新增门电路仅扩展本类方法。

CircuitSimulator业务调度主类 —— 总控业务逻辑
统筹全流程:存储全局引脚电平映射表、全部元件集合、过滤输入引脚缺失的无效元件、按规则分类排序元件、循环调用计算工具生成输出、按指定顺序打印结果;负责输入读取、结束标志 end 识别、数据整合与结果输出。

我不足的地方是没有写注释的习惯,以后要养成习惯,在类、关键方法、核心逻辑处加上简单的注释,方便自己和他人理解。而且没有考虑到异常输入的处理,下次要加上校验。

踩坑心得:
元件命名格式区分困难,解析逻辑易混乱
与门 / 或门格式 A(4)1、O(2)1 包含括号内输入引脚数,非 / 异或 / 同或门 N1/X1/Y1 无括号;最初未拆分两套解析逻辑,正则匹配出错,引脚数量提取失败,门电路输入引脚列表为空,直接判定元件无效被过滤。
解决方法:写两套分支正则,区分带括号与纯编号元件,分别提取输入引脚数量与元件编号,存入 Gate 对象。
引脚连线映射关系处理错误,输入引脚电平无法匹配
连线语句 [A A(2)1-1 X1-1] 代表左侧输出引脚信号赋值给右侧所有输入引脚;最初反向存储映射,导致所有门输入电平读取为 null,无法运算。
解决方法:建立全局 Map<String, Integer> signalMap,遍历每条连线,取出左侧输出引脚的电平,批量赋值给右侧每一个输入引脚,实时更新电平映射表。
说实话也不知道怎么学JAVA的语法,就是老师也没怎么讲JAVA的语法,老师只是会将以后面试的时候,或者做项目的各种思想,主要是老师在讲一些知识点的时候,打代码的时候看不懂为什么要这样写,感觉是我线上课没认真听导致我上课也听不懂,那些思想我倒是明白,就是实操的时候无法动笔。
这个是流程图:
image
第四次作业代码流程图截图

这个是类设计结构图:
image
第四次作业代码类图截图

测试结果:
输入
INPUT: A-1 B-1
[A A(2)1-1]
[B A(2)1-2]
[A(2)1-0 OUT]
end

输出结果
A(2)1-0:1

输入
INPUT: A-1 B-0
[A X1-1]
[B X1-2]
[X1-0 Y1-1]
[A Y1-2]
[Y1-0 OUT]
end

输出结果
X1-0:1
Y1-0:1

输入
INPUT: A-1 B-1 C-1 D-0
[A A(4)1-1]
[B A(4)1-2]
[C A(4)1-3]
[D A(4)1-4]
[A(4)1-0 OUT]
end

输出结果
A(4)1-0:0

输入
INPUT: A-1 B-0 C-1
[A A(2)1-1]
[B A(2)1-2]
[A(2)1-0 N1-1]
[N1-0 O(2)1-1]
[C O(2)1-2]
[O(2)1-0 OUT]
end
[O(2)1-0 N2-1]

输出结果
A(2)1-0:0
O(2)1-0:1
N1-0:1

输入
INPUT: A-1 B-1 C-0 D-1
[A A(2)1-1 O(2)1-1 X1-1]
[B A(2)1-2]
[C O(2)1-2]
[D X1-2]
[O(2)1-0 A(2)1-0 X1-0 OUT]
end

输出结果
A(2)1-0:1
O(2)1-0:1
X1-0:0

输入
INPUT: A-1 B-1 C-0 D-1
[A A(2)1-1 O(2)1-1 X1-1]
[B A(2)1-2 X2-1]
[C O(2)1-2]
[D X1-2]
[O(2)1-0 A(2)1-0 X1-0 OUT]
end

输出结果
A(2)1-0:1
O(2)1-0:1
X1-0:0

改进建议:
可以在适当的地方标上注释,以便于理解。

第五次作业集:

前言:
知识点:
面向对象抽象与多态、继承体系扩展、控制 / 输入 / 输出多类型引脚区分、字符串复杂元件名解析、多输出引脚元件存储、多分支逻辑运算、电路迭代信号仿真、自定义元件输出格式化、分类排序、高阻无效状态标记、Map 分层存储引脚信号、单一职责 SRP、集合过滤无效元件、字符串正则拆分、多级信号传递、边界校验(引脚输入完整性、控制电平有效性)。
题量:大
难度:困难

设计与分析:
静态内部类 Pin(引脚实体,单一职责存储引脚电平状态)
静态内部类 Component(元件实体,实现 Comparable 用于编号升序排序)
全局静态存储容器(Main 静态成员,全局共享)

题目太难了与我而言,本次任务中的相关题目综合性较强,对知识综合运用能力要求较高,自身现有知识储备不足以支撑独立求解,暂未能完成作答。计划课后针对性复习对应章节,请教老师与同学,梳理解题思路后补充完成。

这个是流程图:
image
这个是类设计结构图:
image

第六次作业集:

前言:
知识点:
面向对象组合模式 Composite:抽象电路组件统一封装普通门元件(叶子 Leaf)、子电路(组合容器 Composite),统一调度、统一打印;
子电路嵌套解析、子电路输入输出端口映射、子电路元件带编号前缀输出;
多层级字符串分段解析:子电路定义块(Cx: ~ endc)、全局 INPUT、连线 []、OUT 端口;
五级优先级异常校验:连线语法错误、输入引脚多驱动冲突、多异常按优先级取最高报错;
信号传播 BFS、电平仿真、元件分类排序、单一职责 SRP、封装与继承、Map 存储端口 / 连线 / 元件映射;
输入流分块读取:先全部读取并预解析所有子电路,再解析顶层主电路。
题量:大
难度:困难

本次习题题目难度较高,涉及的相关知识点掌握不够扎实,暂时无法独立完成完整作答。后续我会重新梳理课本知识点、查阅参考资料,补齐薄弱内容,再重新完成该题

本阶段三次作业集综合性总结
在面向对象编程层面,我能够拆分实体类、工具类、业务计算类、输入校验类,明确区分组合关系与聚合关系,分清实体数据类与业务逻辑类,做到一个类只负责一项核心功能,杜绝功能杂糅。同时熟练掌握了实体类属性封装、私有成员访问、构造方法初始化。
代码规范性仍有欠缺
日常编写代码缺少编写注释的习惯,类功能说明、核心常量含义、计算公式思路、关键方法作用都未添加注释,代码可读性偏低,后期复盘查阅、团队协同开发都会造成不便,后续需要养成类注释、方法注释、核心逻辑行内注释的编写习惯。
这次作业集对我而言太难了,以至于我无从下笔,看到别人都可以写出来就知道我平时没怎么花时间练习,感觉学了那么久还是新手。
作业布置与批改方面,我觉得三次迭代作业衔接性很强,整体梯度设置十分合理,从易到难层层递进,建议继续保持这种迭代式作业布置模式,让我们逐步完成项目整体搭建,学习效果远优于零散独立作业。

posted @ 2026-06-24 02:32  曾嘉瑜  阅读(13)  评论(0)    收藏  举报