当前位置: 首页 > news >正文

java作业集4~6的总结

面向对象程序设计作业集4-6(三次门电路仿真迭代项目)全流程复盘博客
📌 博客前言
1.1 作业整体概况
本次作业集4至作业集6,连续完成三轮Java门电路仿真程序迭代开发,是面向对象程序设计课程从基础语法落地、功能迭代拓展到工程化架构重构的完整实战闭环训练。三次作业围绕数字逻辑门电路仿真同一业务场景,循序渐进完成基础实现、功能升级、架构重构三个阶段开发,全程依托Java面向对象核心思想,结合设计模式、数据结构、递归算法、分层架构、代码质量检测工具完成项目开发,完整复刻了企业软件开发中「初代版本开发→版本功能迭代→架构重构优化」的标准研发流程。
1.2 三次作业知识点、题量与难度梯度分析

作业序号 核心考察知识点 代码体量 难度等级 核心定位
作业集4(第一次实验) 抽象类、继承、多态、静态工厂模式、队列广度优先遍历、基础正则解析、集合基础使用 612行有效代码,8个核心类 ⭐⭐(入门基础难度) OOP基础语法落地,摆脱面向过程编程思维
作业集5(第二次实验) 开闭原则、抽象类迭代重构、多态深度应用、多引脚数据结构适配、复杂器件逻辑开发、队列信号传播优化 786行有效代码,12个核心类 ⭐⭐⭐(进阶功能拓展难度) 代码迭代兼容,理解软件版本升级核心逻辑
作业集6(第三次实验) 四层分层架构、单一职责原则、自定义异常、枚举常量、递归算法、结构化数据模型、全链路合法性校验、MVC设计思想 962行有效代码,22个核心类 ⭐⭐⭐⭐⭐(工程化架构难度) 从小玩具代码向正规工程代码重构,建立架构设计思维
1.3 整体学习感受
三次作业并非孤立的编程习题,而是一条连贯的能力进阶路径:前期只要求实现功能,中期要求兼容拓展功能,后期要求优化代码架构。难度呈阶梯式上升,从单纯写对代码,到写好代码,再到设计合理的代码架构,层层递进补齐了我面向对象编程的短板。同时全程使用PowerDesigner做前期类图建模、SourceMonitor做后期代码质量检测,养成了先建模、后编码、再质检的标准化开发习惯。

🔧 设计与分析(源码、类图、流程图、代码度量全维度复盘)
本章节结合三次作业PowerDesigner类图、业务流程图、SourceMonitor代码度量报表,逐一代分析源码架构、设计思路、优劣点以及个人设计心得,做到图文结合、数据支撑。

2.1 第一次作业:基础版门电路仿真源码设计分析

2.1.1 PowerDesigner类图结构说明(配图说明:基础三层类结构图)
屏幕截图 2026-06-19 172524
本次类图采用抽象父类+子类+工厂类+主类极简三层结构,无分层设计,核心分为四大模块:顶层抽象Gate门父类、5个基础门子类、GateFactory工厂类、Main主调度类。类图核心三大关系如下:
•泛化继承关系:与门、或门、非门、异或门、同或门全部继承Gate抽象父类,复用父类公共属性,强制实现三个抽象方法,统一全部门调用接口;
•依赖关系:Main主类依赖工厂类创建门对象,无需直接new具体门子类,初步实现解耦;
•组合关系:每个门内部封装输入引脚集合,独立管理自身信号,门与门状态互不干扰。
类图设计心得:本次类图是我第一次自主设计OOP类结构图,成功用抽象类统一接口,解决了不同门电路调用逻辑不统一的问题。但设计存在明显缺陷:前期未做好顶层规划,父类抽象方法缺失,主类包揽全部业务逻辑,为后续迭代埋下大量隐患。

2.1.2 SourceMonitor代码度量报表数据分析
屏幕截图 2026-06-21 175445
屏幕截图 2026-06-21 175450
屏幕截图 2026-06-21 175507
屏幕截图 2026-06-21 175512

•总有效代码行数612行,覆盖全部基础功能,体量适配单次课程作业;
•平均圈复杂度2.1,最大圈复杂度4,整体代码分支少,可读性良好,仅输入解析方法存在少量嵌套判断;
•单方法平均代码行数11行,方法拆分粒度合理;
•代码注释密度15.3%,关键逻辑均添加注释,满足课程编码规范。
2.1.3 业务流程图与源码运行逻辑
采用队列广度优先遍历实现信号传播,流程为:控制台输入读取→输入内容解析→初始信号入队→队列循环分发信号→门电路计算输出→输出信号入队继续传播→最终结果排序打印。完全贴合硬件电路串行信号传输逻辑,但是所有流程全部耦合在Main主类中,代码臃肿度极高。
2.1.4 初代源码整体优劣总结
✅ 优点:成功落地OOP三大特性,工厂模式实现对象创建与业务解耦,队列数据结构贴合硬件电路逻辑;
❌ 缺点:Main主类职责单一臃肿,全局静态变量过多,无异常处理,魔法值硬编码严重,不支持多引脚输出,无法拓展复杂电路。

2.2 第二次作业:进阶版拓展门电路仿真源码设计分析
2.2.1 PowerDesigner类图升级说明(配图说明:拓展门类结构图)
屏幕截图 2026-06-19 172856
本次保留初代8个基础类,新增4个复合器件子类(三态门、译码器、多路选择器、多路分配器),总计12个核心类,核心改动为重构顶层Gate抽象父类,补充5个全新抽象方法,补齐输出状态标记、多引脚输出、输出合法性校验接口。
本次设计严格遵循开闭原则:新增4类复合器件时,完全没有修改原有5个基础门的运算代码,仅拓展工厂类正则匹配规则即可完成功能新增,直观体现了面向对象拓展无需修改原有代码的核心优势。同时类图组合关系升级,门电路支持多输入、多输出引脚,适配复杂组合逻辑电路。

SourceMonitor代码度量报表数据分析
屏幕截图 2026-06-21 183617
屏幕截图 2026-06-21 183815
屏幕截图 2026-06-21 183821
屏幕截图 2026-06-21 183838
2.2.2 两次作业代码度量横向对比

度量指标 第一次作业 第二次作业 迭代变化解读
总有效代码行数 612行 786行 新增四类复合器件,功能翻倍,代码体量同步上涨
平均圈复杂度 2.1 2.3 复杂器件分支判断增加,复杂度小幅上升,仍处于安全区间
总类数量 8个 12个 拆分器件类,单一职责原则执行更加到位
注释密度 15.3% 18.7% 补充多引脚、选通逻辑注释,代码可读性进一步提升

2.2.3 业务流程改动与源码心得
整体信号传播流程不变,仅将单输出变量改为HashMap多输出集合,支持一次性向下游推送多路信号。本次迭代让我深刻意识到:顶层抽象设计决定后续拓展成本,第一次作业父类设计缺陷,导致第二次必须大规模重构父类接口,前期设计偷懒,后期迭代需要付出成倍的调试成本。
2.3 第三次作业:分层架构+子电路嵌套仿真源码设计分析
2.3.1 四层分层架构图说明(PowerDesigner类图)
屏幕截图 2026-06-21 173434
屏幕截图 2026-06-21 173443
本次彻底推翻前两次单一主类架构,基于MVC思想搭建四层分层架构,彻底解决高耦合痛点,每层职责完全隔离:
1.视图入口层:Main类极致轻量化,仅负责输入输出,无任何业务代码;
2.统一调度层:Solver调度器,串联解析、校验、仿真三大模块,统一捕获异常;
3.数据模型层:封装电路、连线、引脚、子电路全部实体模型,告别零散全局集合;
4.业务功能层:拆分解析器、校验器、仿真器三大独立类,各司其职。
2.3.2 SourceMonitor代码度量报表数据分析
屏幕截图 2026-06-21 184550
屏幕截图 2026-06-21 184558
屏幕截图 2026-06-21 184605
屏幕截图 2026-06-21 184615
相较于第二次作业,本次重构后代码质量大幅提升:平均圈复杂度从2.3降至1.8,最大圈复杂度从5降至4,彻底拆分臃肿大方法;最核心优化为全局静态变量清零(从4个变为0个),彻底解决线程不安全、无法多电路并行运行的历史遗留问题;总类数量提升至22个,通过细粒度拆分实现代码解耦。
2.3.3 核心业务流程图升级
本次放弃队列广度优先传播,改用迭代循环+递归算法实现嵌套子电路仿真,新增全链路前置校验流程:输入文本接收→结构化解析→语法+逻辑双重校验→递归信号仿真→结果统一排序输出。前置校验机制可以提前拦截所有非法输入,避免程序运行后报错崩溃,工程健壮性大幅提升。
2.3.4 架构设计核心心得
前两次作业我一直陷入「功能优先」的误区,只要代码能跑就忽略结构;第三次重构让我真正理解软件工程的核心:功能实现只是基础,架构解耦、职责分离、可维护性才是工业级代码的核心标准。分层之后,修改任意模块功能都不会影响其他代码,完美契合单一职责原则和开闭原则。

⚠️ 采坑心得(全数据支撑、结合类结构/流程图/测试用例,无空泛总结)
三次作业共计复盘13类真实线上BUG,所有问题均附带测试数据、类结构缺陷、运行报错现象、流程图漏洞,按照三次作业迭代顺序逐一复盘,同时梳理BUG演变规律。
3.1 第一次作业采坑:基础语法与边界输入类BUG(共4类)
1.空行与结束标识处理失效:源码未做空行过滤,end结束标记未做拦截,测试用例输入3行空行+end+无效连线,程序多创建3个无效门对象,无效输出占比37.5%;解决方案:增加空行过滤布尔标记,识别end后直接终止输入读取。
2.正则分组顺序错误:正则表达式分组颠倒,10组标准门名称测试用例匹配成功率仅20%,频繁触发空指针异常;解决方案:对照题目格式修正正则分组,匹配成功率提升至100%。
3.无状态位导致重复计算:流程图缺少输出状态判断节点,两级与门级联测试用例输出错误率40%,信号反复覆盖;解决方案:新增输出初始值-1作为未计算标记,保证每个门仅运算一次。
4.子类存储结构不统一:类设计层面偷懒,不同门采用Map和普通变量两种存储方式,破坏多态一致性,统一调用方法出现底层逻辑割裂,后期拓展难度极大。
本轮坑点根源:面向过程思维残留,编码前无流程图规划,输入边界考虑不全,OOP思想运用生硬。
3.2 第二次作业采坑:代码兼容与多引脚信号BUG(共4类)
1.抽象类新增方法导致编译报错:类图重构时直接新增5个抽象方法,原有5个子类未同步实现,直接出现25处编译报错,程序无法启动;根源为顶层抽象类迭代向下兼容性极差。
2.单输出变量无法适配多引脚器件:沿用初代流程图单信号输出逻辑,4线译码器测试用例仅输出1路信号,下游电路全部失效,用例通过率0%;解决方案:替换为HashMap集合存储多路输出信号,批量入队传播。
3.原有状态位标记失效:初代-1数值标记无法适配多输出引脚,三级多路选择器级联测试,输出错乱错误率53%;解决方案:拆分信号值与计算状态,新增独立布尔变量标记运算状态。
4.器件校验逻辑脱离硬件实际:多路选择器照搬全引脚校验逻辑,合法选通电路被判定非法,程序无输出;重新对照硬件电路改写校验方法,仅校验控制引脚与选中引脚。
本轮坑点根源:前期顶层设计不足,抽象类后期重构成本极高;代码逻辑脱离真实硬件业务场景,单纯实现数学运算而非工程逻辑。
3.3 第三次作业采坑:分层架构与递归仿真BUG(共5类核心致命BUG)
1.子电路解析指针错位:循环遍历指针自增逻辑错误,endc结束符无法精准切割代码块,10组子电路测试用例全部读取主电路内容失败;修复指针偏移逻辑后解析成功率100%。
2.电路作用域混淆:类设计未区分主电路、子电路作用域,引脚源宿角色判定错误,合法子电路连线全部报错,报错率100%;新增Scope作用域类区分两种电路规则后修复。
3.引脚多路信号冲突无检测:流程图未增加信号冲突校验节点,同一引脚绑定两路信号时程序静默覆盖,无任何报错提示;新增源宿映射表,实时检测冲突并抛出标准化异常。
4.递归子电路信号无法回传:子电路仿真结果无缓存,外层电路无法读取子电路输出,多级嵌套电路全部无输出;新增全局缓存Map实现上下层电路信号互通。
5.迭代仿真死循环:循环终止条件缺失,复杂环路电路程序直接卡死;新增信号变更标记,无信号变动则自动终止循环。
3.4 三次作业BUG整体演变复盘
BUG呈现清晰的进阶规律:从初期代码语法、输入边界类低级BUG,到中期代码兼容、数据结构适配类逻辑BUG,最终演变为架构边界、递归逻辑、业务严谨度类设计BUG。也印证了软件开发铁律:前期架构设计的微小漏洞,在版本迭代后期会被无限放大,成为难以修复的致命问题。

💡 可持续改进建议(分版本针对性优化,可直接落地编码)
4.1 第一次基础版代码改进建议
1.封装全局电路上下文类:将所有全局static静态集合全部封装至CircuitContext上下文对象,消除全局变量,支持多组电路同时运行,解决线程安全问题;
2.抽取常量工具类:将正则表达式、排序权重、无效信号值等魔法值统一放入常量类,后续修改规则无需改动业务代码;
3.新增基础异常捕获:针对非法输入、非法门名称增加try-catch捕获,避免程序直接闪退;
4.拆分Main主类功能:把输入解析、信号传播、结果打印拆分为独立工具类,初步实现功能解耦。
4.2 第二次进阶版代码改进建议
1.正则规则配置化:将门匹配正则从工厂类代码中剥离,写入外部配置文件,新增器件无需修改Java源码;
2.统一输出格式工具类:抽离所有门电路输出拼接逻辑,统一输出格式,避免修改格式需要改动所有子类;
3.增加环路检测模块:针对闭环电路增加路径记录,规避队列信号传播死循环问题;
4.补齐全链路输入校验:补充引脚悬空、连线冲突前置校验,提前拦截非法电路。
4.3 第三次分层版代码现存缺陷与终极优化方案
第三次代码已经完成大规模架构优化,但仍存在5处可持续优化点,全部可落地实现:
1.增加递归深度保护机制:设置最大10层嵌套上限,避免恶意深层嵌套输入导致JVM栈溢出;
2.支持子电路内嵌子电路:优化解析器递归识别逻辑,实现完全自由嵌套,进一步提升电路复用能力;
3.回补第二次复合门电路功能:在分层架构基础上,重新接入三态门、译码器等复合器件,补齐功能回撤短板;
4.完善电路环路检测:新增路径追踪工具类,自动识别闭环电路并抛出异常,解决迭代仿真死循环;
5.彻底实现正则零硬编码:将门类型、正则规则、排序权重全部整合至枚举类与配置文件,实现业务代码零硬编码。
4.4 三次代码通用长效优化方向
后续可以为整套电路仿真项目补充单元测试用例,针对每一类门电路、每一类异常场景编写JUnit测试代码,实现自动化测试,摆脱全程手动测试的低效模式,进一步提升代码工程化标准。

📚 阶段综合性总结与后续学习规划
5.1 本阶段三次作业完整收获
1.夯实面向对象核心理论:从抽象类、继承、多态基础用法,到单一职责、开闭原则、依赖倒置三大设计原则,不再局限于书本理论,真正在实战中理解设计思想的价值;
2.掌握完整项目开发流程:走完需求实现→功能迭代→架构重构全流程,学会前期类图建模、中期编码调试、后期代码质量检测的标准化开发流程;
3.掌握多种实用技术栈:熟练使用队列、HashMap等集合,正则表达式文本解析,递归算法处理嵌套业务,自定义异常、枚举类优化代码,分层架构解耦设计;
4.建立工程化编码思维:彻底摒弃面向过程流水式编码,明白工业开发中架构设计、代码可读性、可维护性、健壮性远比单纯实现功能更重要;
5.学会代码质量自检:能够独立使用SourceMonitor检测代码复杂度,主动拆分臃肿方法、消除全局变量、清理魔法值,自主优化代码质量。
5.2 自身依旧存在的不足
1.前期编码陋习难以快速改正:依旧容易上手直接写代码,前期架构规划不够细致,导致后期需要大规模重构;
2.算法能力存在短板:递归算法调试效率低,复杂迭代逻辑需要大量时间排查问题;
3.测试思维不完善:依旧依赖手动测试,缺少主动设计边界测试用例的习惯;
4.设计模式掌握单一:仅熟练掌握静态工厂模式,适配器、装饰器等常用设计模式缺少实战落地经验。
5.3 后续学习与研究计划
1.规范编码流程:强制执行「架构图→类图→流程图→编码→测试」五步开发流程,杜绝无设计直接编码;
2.补齐算法短板:针对性练习递归、迭代算法,攻克嵌套类业务代码编写难点;
3.拓展设计模式学习:系统学习常用创建型、结构型、行为型设计模式,并融入后续Java项目实战;
4.项目最终整合:将三次作业代码合并为最终完整版项目,融合分层架构、子电路嵌套、全部复合门电路、全链路异常校验,打造一份无缺陷、高可用的完整课程大作业;
5.学习单元测试:掌握JUnit自动化测试,建立完善的测试体系,提升代码健壮性。
📖 博客结语
三次门电路仿真作业,是我从Java语法使用者转变为面向对象设计者的关键转折点。从前只会照着语法写流水代码,如今能够自主完成架构设计、代码迭代、质量优化,真正理解了面向对象编程「高内聚、低耦合」的核心奥义。后续我会持续优化代码结构,补齐自身编程短板,逐步向专业Java开发的编码思维靠拢。

http://www.jsqmd.com/news/1057749/

相关文章:

  • Selenium自动化测试从入门到精通:四阶段学习路线与实战指南
  • 如何快速掌握ComfyUI图像修复:终极插件使用指南
  • 视觉Transformer电路发现:从黑盒模型到可解释功能模块的逆向工程
  • 2026上海防水补漏上门施工哪家强?正规商家资质+报价+口碑+售后四维实测对比 - 防水资讯
  • 武汉市武昌区水电维修|维小达|电路|水管|马桶|暖气|管道疏通一站式全屋水电维保服务 - 维小达科技
  • 2026变现新标准白皮书!合扬全品类回收无折旧无隐形扣费 - 奢侈品交易观察员
  • FastReport .NET改变二维码模块的形状和设计
  • FanControl智能散热配置:打造个性化风扇控制方案
  • 基于MC68HC908EY16的红外遥控LIN机器人:输入捕获与总线通信实战
  • 什么是全景运维地图?全景运维地图包括哪些关键技术?
  • 2026佛山防水补漏上门施工哪家强?正规商家资质+报价+口碑+售后四维实测对比 - 防水资讯
  • 基于BFU768F的5-6GHz低噪声放大器设计:实现1.4dB噪声系数与快速开关
  • Java Web自动化测试入门:Selenium环境搭建与Page Object模式实战
  • STM32单片机心率血氧血压温度检测082X-3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 从MPC5674F到MPC5676R:嵌入式系统单核到双核迁移实战指南
  • HC908 MCU时钟系统与PLL配置实战:从原理到代码实现
  • 联邦学习梯度压缩与加密:高效隐私保护入侵检测实践
  • 程序员量化交易实战 06:先把数据库表结构讲清楚
  • 2026东莞防水补漏上门施工哪家强?正规商家资质+报价+口碑+售后四维实测对比 - 防水资讯
  • 2026年南京全站仪服务商:资质与服务能力客观对比 - 起跑123
  • uClinux在ColdFire无MMU平台的移植与调试实战指南
  • 8大主流网盘直链下载助手:免费解锁高速下载的终极解决方案
  • 英雄联盟玩家的3个秘密武器:如何用本地自动化工具提升游戏体验
  • 2026西安防水补漏上门施工哪家强?正规商家资质+报价+口碑+售后四维实测对比 - 防水资讯
  • 从EA LPC1788到Keil MCB1700的emWin BSP移植实战指南
  • FanControl深度解析:Windows平台精准风扇控制架构与技术实现
  • NJU OS 并行算法和数据结构
  • 从MK24FN1M到MK24FN256:嵌入式MCU型号迁移实战指南
  • 武汉市洪山区管道疏通|维小达|马桶、蹲便器、地漏、洗菜盆、洗手盆、浴缸一站式疏通养护服务 - 维小达科技
  • 武汉市青山区管道疏通|维小达|马桶、蹲便器、地漏、洗菜盆、洗手盆、浴缸一站式疏通养护服务 - 维小达科技