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

Java面向对象程序设计——4~6次作业集总结

Java 面向对象程序设计 —— 数字电路模拟程序 4~6 迭代作业总结

标签: Java 面向对象 数字电路 课程作业 软件工程

写在前面

本次系列迭代作业围绕数字电路分层模拟系统开发,从基础五种逻辑门组合电路,逐步迭代扩展多控制引脚复合元件、子电路复用、全量输入异常校验,完整完成 3 个递进版本,是一套标准小型工程迭代实践案例。

对我而言,这是第一次完成包含复合组件、延迟求值、错误优先级校验的大型 Java 面向对象项目。对比之前航空器配载系统,本次电路程序抽象程度更高,引脚信号依赖、组合模式、懒加载架构都是全新挑战。数周开发中,我结合课堂抽象类、工厂模式知识点,自主钻研正则解析、惰性计算、子电路嵌套、多级错误校验等业务逻辑。

通过 4 版迭代开发,我系统掌握以下知识与工程能力:

  • Java 进阶语法:正则Pattern/Matcher、函数式Supplier、枚举、有序容器LinkedHashMap

  • 面向对象设计:抽象父类、工厂模式、组合模式、单一职责原则

  • 系统分层:输入解析层、连接校验层、引脚管理层、元件计算层、输出格式化层

  • 工程工具:PowerDesigner 类图建模、SourceMonitor 代码复杂度分析

  • 迭代开发规范:低耦合扩展、旧代码完全复用、边界用例测试

下文将从语法知识、4 个版本迭代拆解、踩坑复盘、代码优化、工具使用等维度,对本次数字电路迭代作业进行完整复盘总结。

一、Java 基础与面向对象进阶学习回顾

在编写电路模拟程序前,我针对性补充高阶语法与设计模式,作为整套项目的底层支撑,突破了基础面向对象编程的局限,实现了工程化代码设计。

1.1 高阶语法使用场景

本次作业大量运用 Java 进阶语法,针对性解决电路模拟的各类业务难题,核心使用场景如下:

  • Supplier函数式接口:封装LazyPin惰性引脚,解决多级电路、子电路嵌套求值顺序混乱问题,实现信号延迟计算

  • 正则表达式:精准匹配A(4)1、C2:、Z(2)2等复杂元件、子电路命名格式,完成自动化文本解析

  • 枚举ErrorType:统一管理错误优先级与输出文案,消除代码魔法数字,规范异常输出格式

  • 静态工具类:PinManager、ConnectionValidator采用无状态设计,严格遵循单一职责原则

  • 有序集合:LinkedHashMap记录引脚绑定关系,精准检测同一输入多源信号冲突问题

1.2 核心设计模式落地

本次项目是我首次完整落地多种经典设计模式,彻底摆脱“面向过程堆砌代码”的写法,实现代码高扩展、低耦合。

工厂模式(ComponentFactory)

统一根据元件标识符 A/O/N/X/Y/S/M/Z/F 动态生成对应逻辑门实例。新增元件时仅需扩展分支逻辑,无需修改主流程代码,完全符合开闭原则。

组合模式(迭代 4 核心)

将系统元件分为两类节点,实现子电路与基础元件的统一管理:

  • 叶子节点:各类独立逻辑门(与门、或门、译码器等基础元件)

  • 复合节点:SubCircuit子电路,内部封装整套独立电路,对外统一暴露引脚,主电路无需区分普通元件与子电路

抽象父类Component

约束所有电路元件统一实现 prepareCalculation()、getFormattedOutput() 核心方法,标准化全局的信号计算与结果输出逻辑,统一代码规范。

1.3 分层解耦设计思想

全程采用模块化分层设计,严格禁止跨层直接调用,各层级职责完全隔离:

  • 输入层:仅负责读取、切割文本数据,不参与电平计算逻辑

  • 校验层:独立封装连接语句异常判断,与信号求值逻辑完全分离

  • 信号层:全局统一管理所有引脚延迟计算函数,管控信号流转

  • 元件层:仅实现自身真值运算规则,不包含任何文本解析代码

  • 输出层:统一完成元件排序、结果格式化打印,实现业务逻辑与页面展示分离

二、代码量化分析工具(SourceMonitor)

开发全程使用 SourceMonitor 进行静态代码扫描,量化评估代码质量,重点观测四大核心指标:

  • v(G)循环复杂度:代表方法分支、循环数量,数值越低,代码逻辑越清晰、维护成本越低

  • OCavg类平均复杂度:衡量系统整体类职责拆分合理性

  • WMC类总复杂度:统计单个类的逻辑体量,避免单个类职责过重

  • 注释覆盖率、总代码行数:把控代码规范性与项目体量

四次迭代版本复杂度整体呈可控增长,且全程遵循迭代开发原则:

  • 迭代 1(基础 5 门):代码体量最小,仅基础引脚遍历逻辑,整体复杂度偏低,适合入门落地面向对象思想

  • 迭代 2(新增 4 类复合元件):译码器、分配器多输出循环逻辑拉高整体复杂度,通过拆分局部变量、精简分支代码完成优化

  • 迭代 3(时序预留):仅扩展全局常量、预留架构接口,无新增业务代码,复杂度基本无变化

  • 迭代 4(子电路 + 异常校验):异常校验方法分支最多,通过枚举拆分判断逻辑,有效降低循环复杂度

整体迭代严格遵循开闭原则:新增功能仅新增扩展类,不修改原有基础逻辑门代码,完全向下兼容旧版本输入用例。

三、迭代 1:基础五逻辑门模拟程序

3.1 需求范围

迭代1为项目基础版本,仅实现核心基础逻辑电路功能:包含与、或、非、异或、同或五种基础逻辑门;支持全局输入、基础引脚连接语句,以end标识程序结束;无控制引脚设计,输入引脚不全的元件直接忽略、不参与结果输出。

3.2 整体类结构

本版本按单一职责拆分多个功能类,彻底摒弃全部代码写入Main方法的写法,具体类职责如下:

类名 核心职责
Main 程序入口,串联输入解析、信号计算、结果打印全流程
Pin 引脚实体,重写equals/hashCode方法,实现引脚精准匹配对比
yuanjian 逻辑门抽象父类,统一定义输入存储、抽象计算方法
yuanjian1~yuanjian5 五种基础逻辑门实现类,各自重写对应真值运算逻辑
Shuru 全局输入解析类,扫描输入文本,自动实例化各类元件
Dianlu 电路总容器,统一存放所有元件、输入信号、引脚连接关系
Calculator 循环迭代计算引脚电平,多次遍历直至电路信号稳定
GateSorter 元件排序器,按指定规则(A→O→N→X→Y、编号升序)排序
ResultPrinter 过滤无效元件,标准化格式化输出最终运算结果

45eef4c4-4401-420a-b31d-99de187575c5
image

3.3 开发踩坑记录与心得

  • 未重写 Pin 相等方法:初期未覆写equals与hashCode,引脚对比始终匹配失败,电路信号完全无法传递,补全方法后修复问题。

  • 多输入门边界错误:遍历多输入引脚时,循环终止条件编写失误,导致末尾引脚电平数据丢失,运算结果偏差。

  • 元件编号提取Bug:初始正则匹配规则不完善,误捕获括号内的输入数量数值,优化截取规则,精准提取元件编号。

  • 无限循环风险:未设置迭代上限,环路电路会出现死循环,新增最大100次迭代限制,规避程序卡死问题。

四、迭代 2:多控制引脚复合元件扩展

4.1 新增需求

在迭代1基础上大幅扩展元件类型与业务规则,新增四类复合元件:三态门S、译码器M、数据选择器Z、数据分配器F;严格区分控制引脚、输入引脚、输出引脚,不同元件适配差异化输出规则:

  • 译码器:仅输出唯一低电平引脚编号

  • 数据分配器:无效引脚统一用 - 填充占位

  • 三态门:控制端为0时进入高阻状态,直接忽略输出结果

4.2 架构重构:懒加载信号体系

迭代2完成核心架构升级,完全舍弃迭代1的循环遍历计算模式,全新搭建LazyPin延迟求值架构,重构全套分层工具类,彻底解决多级电路信号计算顺序混乱问题:

  • PinManager:全局静态引脚管理器,统一存储、管理所有引脚的延迟计算函数

  • ConnectionManager:批量绑定源引脚与目标引脚的依赖关系,规范化电路连接

  • CircuitParser:通过正则表达式统一解析全部9类基础、复合元件名称

  • OutputFormatter:独立封装输出逻辑,适配各类元件的差异化打印格式

cdc4a88f-4908-462f-a9ff-63e03ab36d02
image

4.3 设计亮点

  • 延迟求值架构天然适配多级串联、多分支复杂电路,无需手动干预信号计算先后顺序,自动适配电路拓扑结构

  • 工厂模式扩展性极强,后续新增时序元件仅需新增子类,无需改动解析、打印核心流程

  • 正则解析规则兼容新旧版本元件,旧版A/O基础门与新版M/Z/F/S复合元件可通用同一套输入用例

4.4 踩坑记录与心得

  • 译码器引脚分区错误:混淆控制、输入、输出引脚区间划分规则,导致引脚信号读取错位,运算结果错误

  • 数据分配器格式缺陷:未区分引脚有效/无效电平,缺失无效引脚 - 填充逻辑,输出格式不规范

  • 三态门状态处理缺失:未识别高阻状态,控制引脚为0时仍正常输出输入电平,不符合数字电路规则

六、迭代 3:子电路复用 + 五级优先级异常校验(最终完整版)

迭代4为整套项目的最终完整版,新增两大核心重磅功能:子电路复合组件复用、五级优先级连接异常校验,大幅提升系统的复用性与健壮性。

6.1 两大核心新增功能

6.1.1 子电路复合组件

支持Cx:自定义子电路,可完整定义子电路内部INPUT输入、引脚连接语句,以endc标记结束;主电路可通过C2-A格式引用子电路引脚,最终输出格式标准化为C2-A(2)1-0:1,实现电路模块化复用、嵌套组合。

6.1.2 五级优先级异常校验

自定义五级电路连接错误,严格划分优先级(从高到低),系统检测到多条错误时,仅输出优先级最高的一条,同时直接终止程序运行,阻断后续逻辑执行:

  1. 单条连接包含多个输出源

  2. 连接无目标输入引脚

  3. 连接无输出源引脚

  4. 输入输出引脚顺序颠倒

  5. 单个输入引脚绑定多路信号冲突

6.2 新增核心模块

类名 核心功能
SubCircuit 子电路复合类,存储内部元件、输入输出引脚,完成子电路预计算与结果缓存
ConnectionError/ErrorType 错误实体+枚举类,统一管理错误优先级、错误提示文本
ConnectionValidator 独立校验工具类,逐条解析连接语句,精准捕获各类异常
CircuitParser双层解析 第一层预编译所有子电路,第二层过滤子电路文本、解析主电路逻辑

776381b5-326b-4baa-ba27-0f32853986f5
image

6.3 踩坑复盘与心得

  • 子电路命名冲突:初期未隔离全局命名空间,内外元件名称重叠导致映射失效,通过给子电路内部元件添加SCx_前缀解决覆盖问题

  • 错误优先级失效:未对错误对象按优先级排序,无法精准输出最高优先级报错,新增排序逻辑后修复

  • 嵌套求值风险:子电路多层嵌套时存在递归死循环隐患,依托懒加载实时计算特性,天然规避栈溢出、死循环问题

  • 异常阻断缺失:检测到异常后仍执行后续计算逻辑,新增全局hasError标记,一旦报错立即阻断全流程

七、核心架构与算法复盘

7.1 惰性信号求值架构(迭代2~4通用)

彻底抛弃传统多次扫描电路的低效模式,为每一个引脚绑定Supplier延迟计算函数,仅在打印输出读取引脚电平时执行计算并缓存结果,自动适配任意复杂电路拓扑、子电路多层嵌套场景,高效且低耦合。

7.2 双层子电路解析算法

采用分阶段双层解析机制,保障主电路与子电路互不干扰:

第一轮:全局遍历所有输入文本,精准识别Cx:~endc区间,预编译、运算所有子电路内部信号并缓存结果;

第二轮:过滤所有子电路定义文本,仅解析主电路INPUT输入与引脚连接语句,完成全局电路整合。

7.3 连接错误优先级校验流程

形成标准化、优先级可控的异常校验流程,层层递进、精准拦截:

先校验引脚数量基础格式 → 优先捕获最高优先级多输出源错误 → 依次校验无输入、无输出、引脚顺序颠倒问题 → 格式合法后检测单引脚多源冲突 → 所有错误统一封装排序,仅输出最高优先级报错。

八、标准化调试流程

经过四轮迭代开发,我总结出一套适配迭代项目的标准化调试流程,大幅提升排错效率:

  1. 分层隔离调试:优先单独测试输入解析模块,打印原始元件数据,再独立调试引脚电平计算,最后整合整体电路运行

  2. 边界用例优先:优先测试引脚不全、空连接、子电路多层嵌套、信号冲突等边界场景

  3. 中间值打印:读取LazyPin引脚时输出中间电平数据,快速定位电路信号断裂、运算异常节点

  4. 增量迭代开发:新增模块独立开发、单独测试,完整复用旧版本稳定代码,杜绝大规模重构引发的新Bug

九、代码优化改进建议

9.1 自身代码缺陷优化方向

  • 正则解析逻辑分散在多个类中,可抽离独立正则常量工具类,消除重复代码,统一解析规则

  • LazyPin缺少缓存重置方法,多组用例连续运行会残留旧电平数据,需新增全局清空接口

  • 子电路解析逻辑耦合在CircuitParser中,可拆分独立SubCircuitParser类,进一步细化职责、降低耦合

  • 代码中存在大量硬编码排序规则、错误提示文本,可统一迁移至常量配置类,便于后期修改维护

  • 无单元测试体系,可针对各类逻辑门真值表、子电路引脚映射规则编写专属测试方法,提升代码稳定性

9.2 课程作业改进建议

  • 迭代初期提供标准UML类图,降低组合模式、工厂模式的理解与落地门槛

  • 配套标准化测试用例,覆盖正常电路、异常连接、多层子电路等全场景

  • 课堂补充Supplier懒加载架构、延迟求值的设计思想与应用场景

  • 迭代3补充时序电路真值规则、信号反馈环路案例,方便学生完成完整开发

十、整体总结

本次数字电路3轮迭代开发,是一套完整的需求迭代 → 面向对象分层设计 → 设计模式落地 → 异常校验优化 → 复合组件复用 → 代码质量分析软件工程闭环实践。

从迭代1简单的实体类分层、基础逻辑实现,到迭代2完成核心懒加载架构重构,再到迭代3落地组合模式、多级优先级异常校验,我的编程思维完成了从“实现功能”“工程化设计”的根本性转变。不再单纯追求代码可运行,而是优先兼顾分层解耦、版本兼容、边界容错、代码可维护性。

本次项目掌握的抽象类、工厂与组合设计模式、延迟求值、正则文本解析、优先级异常处理等技术,具备极强的通用性,可快速迁移至各类迭代式业务系统开发。后续我将补全迭代3时序触发器完整业务逻辑,统一全局常量管理、补充单元测试,持续规范代码编写标准,夯实面向对象工程化开发能力。

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

相关文章:

  • 告别物理显示器限制:Parsec虚拟显示驱动如何为游戏流媒体和远程办公带来自由?
  • HTML打包EXE 2.3.0更新详解(附最新版本下载地址-含免费内核)
  • 郑州猎头公司哪家好?郑州猎头公司推荐南方新华(电话19922876369) - 榜单推荐
  • 英雄联盟玩家的专业效率工具:League Akari 完整使用指南
  • 2026年官方详解:合肥理工学校招生简章 - hflgzz
  • OpenClaw+Claude 4.5 飞书AI工程化实战:权限、上下文与Skill编排
  • 终极智能分层工具:5分钟掌握LayerDivider插画自动分层技巧
  • 后门攻击系统性评估:从核心机理到跨领域实战检测框架
  • Windows触控板三指拖拽终极指南:5分钟解锁macOS级手势体验
  • 2026年合肥市哪所学校有综合高中班?——推荐合肥理工学校 (寿春实验班) - 教育为先
  • 2026年合肥理工学校多少分能上?招生电话是多少? - hflgzz
  • 终极指南:使用OCAT可视化工具轻松配置OpenCore黑苹果系统
  • 用 ChatGPT 5.5 辅助接口需求拆解:从一句话需求到 OpenAPI、Mock 和测试用例
  • AD软件的使用(2)
  • 基于Kinetis K53的血氧仪设计:从光电原理到嵌入式算法全解析
  • 终极B站会员购抢票指南:用biliTickerBuy轻松搞定限量商品
  • ARM7 MP3播放器实战:32KB内存下的libmad解码与EFSL文件系统优化
  • 【架构实战】DevOps流水线:从代码到上线的自动化
  • 魔兽争霸3终极优化指南:5个简单技巧让经典游戏在现代电脑上流畅运行
  • C++ 核心面向对象:类与对象超全精讲|封装、成员属性、权限、新手避坑
  • UHF RFID系统工程实践:从天线设计到系统集成的可靠性构建
  • 2026年河源龙川黄金回收店铺实地探访,核心推荐龙川源奢汇及正规门店选择指南 - 行走在冷风中。
  • Ubuntu 12.04下Resilio Sync(原BTSync)本地去中心化同步实战
  • 大模型幻觉治理:基于IUQ框架的不确定性量化与长文本生成可靠性提升
  • 基于LIN总线的车窗控制:MM908E624软件架构与防夹算法详解
  • 基于FreeRTOS与NXP KV31F的无传感器PMSM FOC驱动系统设计与实践
  • 打破传统检索局限,深度解析RAG-Fusion全新检索增强生成范式
  • 合肥中科信息工程技工学校2026年秋季统招公告|正规办学、官方报考通道 - 辛云教育资讯
  • i.MX35 WinCE BSP显示驱动适配实战:从时序解析到源码调试
  • 2026年6月龙川奢侈品回收推荐排行:龙川源奢汇领衔,专业鉴定更安心 - 行走在冷风中。