OO7-8次作业总结

news/2024/12/28 18:09:07/文章来源:https://www.cnblogs.com/yna0206/p/18637772

Java习题集总结:家居强电电路模拟设计与优化

前言

在本阶段的学习中,我们完成了以家居强电电路模拟程序为核心的Java习题集任务,共涉及两套题目。两次习题集在内容设计上有明显的层级递进,不仅加深了我们对Java语言的理解,也培养了我们解决实际工程问题的能力。

习题特点:

  1. 知识点覆盖全面
    采用了面向对象编程思想,通过类的设计实现了智能家居中设备的抽象化处理。
    引入递归算法与数学模型,模拟了电压、电流等电路特性。
    注重异常检测和边界场景处理,例如电流过载和短路检测。

  2. 题目数量与功能复杂性
    第一次习题集(6道题目)主要聚焦于单个串联或简单并联电路的设备模拟;
    第二次习题集(8道题目)在前者的基础上,新增了短路检测、电流限制、多层并联电路嵌套、二极管模拟等复杂功能。

  3. 代码量与难度提升
    第一次习题总代码量约800行,功能较为单一;
    第二次习题总代码量超1500行,包含递归、多态、异常处理等较难实现的模块,逻辑复杂度显著增加。

通过两次习题集的练习,我不仅强化了Java编程技能,还提升了代码的逻辑构造能力,为应对更复杂的项目开发积累了实践经验。

设计与分析

分数最高题目:家居强电电路模拟程序 4

本题是两次习题集中最具挑战性的一题,功能要求全面,代码实现难度较高,以下从代码结构、设计思路、核心算法三个维度进行详细分析。

  1. 代码结构设计

代码的整体设计遵循了面向对象的思想,将系统分解为以下几个核心模块:

(1)设备层次结构
抽象类 CircuitDevice:作为所有电路设备的父类,包含公共属性和方法,如电阻、电流、电压计算等。
控制设备:包括Switch(开关)、SpeedController(调速器)和MutexSwitch(互斥开关)。
受控设备:包括Light(灯具)、Fan(风扇)和Curtain(窗帘)。
新增设备:二极管Diode,实现正向导通、反向截止的特性。

(2)电路结构层次
串联电路(SerialCircuit):处理电路中设备的串联关系及相关计算。
并联电路(ParallelCircuit):递归支持并联电路中嵌套并联结构的解析。

(3)异常检测模块
包括短路检测、电流限制检测和设备状态异常处理模块。

以下是基于PowerDesigner绘制的系统类图:

类图示意

从类图中可以看出,CircuitDevice是一个核心抽象类,各个具体设备(如灯、风扇)通过继承扩展其属性和行为,而电路结构类(如串联电路和并联电路)则负责设备连接关系的管理。

  1. 核心逻辑与算法

以下针对题目中的关键功能模块,逐步分析其实现方式:

(1)电路电压与电流计算
核心代码如下:

public double calculateVoltage() {if (this instanceof ParallelCircuit) {return this.subCircuits.stream().mapToDouble(Circuit::calculateVoltage).max().orElse(0);  // 并联电路取子电路中最高电压} else if (this instanceof SerialCircuit) {return this.subCircuits.stream().mapToDouble(Circuit::calculateVoltage).sum();  // 串联电路总电压为子电路电压之和}return this.pinVoltage[1]  this.pinVoltage[0];  // 设备电压差计算
}

通过递归调用,实现了串联和并联电路中设备的电压计算逻辑,同时确保了复杂电路中多层嵌套的正确解析。

(2)短路检测
短路检测需要判断电路中的总电流是否无穷大:

public boolean detectShortCircuit() {for (CircuitDevice device : this.devices) {if (device.getResistance() == 0) {return true;  // 零电阻设备可能引发短路}}return false;
}

当检测到短路时,系统直接输出short circuit error,并终止后续计算。

(3)二极管导通/截止逻辑
二极管根据电压差和电流方向判断状态:

public String getDiodeState() {if (pinVoltage[1] > pinVoltage[0]) {return "conduction";  // 正向导通} else if (pinVoltage[1] < pinVoltage[0]) {return "cutoff";  // 反向截止} else {return pinVoltage[0] > 0 ? "conduction" : "cutoff";  // 电压为0时根据方向判断}
}
  1. 复杂场景测试分析

在功能实现后,通过以下复杂测试场景验证了系统的准确性:

测试案例1:
输入:

T3:[VCC K11] [K12 D11] [D12 GND]
K1
end

输出:

@K1:closed 2200
@D1:cutoff 00

分析:测试了二极管的反向截止功能,结果正确。

测试案例2:
输入:

T3:[VCC B11] [B12 GND]
B1
end

输出:

@B1:220 2200 exceeding current limit error

分析:验证了电流超标检测,220V高电压下电流超出限制,提示异常。

4.类的耦合性分析

使用依赖关系分析工具(如UML依赖图)生成类之间的依赖关系,重点分析:
控制设备与受控设备之间的低耦合设计,通过接口和多态减少直接依赖。
串联和并联电路类对设备类的复用,如何通过组合而非继承实现扩展。
异常模块设计与拓展

当前代码的异常处理可以扩展为枚举类型的错误,例如:
SHORT_CIRCUIT_ERROR
EXCEED_CURRENT_LIMIT 通过细分异常类型,增强错误信息的可读性和定位能力。

采坑心得

在开发和测试过程中,以下问题对实现过程造成了较大影响:

  1. 递归效率问题
    问题描述:多层嵌套并联电路中,递归解析子电路导致性能下降。
    解决方案:为每个电路对象引入缓存机制,存储已计算的电压和电流值,避免重复计算:
private Double cachedVoltage;public double getCachedVoltage() {if (cachedVoltage == null) {cachedVoltage = calculateVoltage();}return cachedVoltage;
}
  1. 日志输出不一致
    问题描述:部分设备的电压输出格式缺失小数位,导致测试结果与期望值不符。
    解决方案:统一输出格式,采用String.format()保留两位小数。

3.电压计算边界问题
问题描述:某些情况下,电压差为负导致设备状态出错,例如连续调速器的输出错误。
解决方案:在calculateVoltage()函数中加入边界检查,确保所有电压差均为非负值,并记录异常的输入样例和修复方法。

4.并发访问问题
问题描述:在多线程环境中运行时,设备状态被多个线程同时访问,出现并发数据冲突。
解决方案:对设备状态的修改加入同步控制:
synchronized (this) { this.state = newState; }
改进建议

针对当前实现与实际需求之间的差距,我提出以下改进建议:

  1. 性能优化:通过引入并行流(Parallel Stream)优化电路解析的性能,提升大规模电路的处理效率。
  2. 模块化增强:将短路检测、电流限制等异常处理逻辑独立封装为单独模块,提升代码可读性与复用性。
  3. 动态配置支持:允许用户动态配置设备参数(如最大电流限制、电阻值等),增强系统灵活性。

总结

通过两次习题集的练习,我学到了以下几点:

  1. 抽象能力的提升:通过对复杂设备的分层设计,掌握了如何将实际问题映射到编程模型中。
  2. 异常处理的深入理解:动态检测短路与过载异常的实现,使我认识到异常处理在复杂系统中的重要性。
  3. 递归与算法

优化:多层嵌套的电路结构解析让我深入思考如何设计高效算法。

未来研究方向:
学习更多设计模式(如组合模式、责任链模式),用于优化复杂对象关系的管理。
深入理解Java并行流技术,在性能优化方面进行实践。

课程改进建议:
增加分布式模拟场景(如分布式智能家居系统),挑战更高层次的设计能力。
提供更详细的案例代码或技术文档,帮助学生快速理解复杂的逻辑实现。

学期总结:成长与感悟

转眼间,一个学期的学习旅程接近尾声。回顾这段时间,我感触良多。每一份代码、每一次调试、每一次提交,仿佛都在书写着成长的轨迹。

收获满满

  1. 编程能力的提升
    本学期通过几次习题集和课程作业,我逐渐从“只会写代码”到“学会设计代码”。理解了面向对象思想如何在实际问题中落地,如类的设计、继承关系的处理、多态的应用等。
    我特别深刻地感受到了设计模式的重要性,清楚地体会到良好的设计架构能够让代码更加清晰、灵活。
    同时,通过实现复杂电路模拟问题,我加深了对递归算法、边界条件处理和异常管理的理解。

  2. 调试与问题解决能力的提升
    从开始面对代码报错就焦虑,到后来能够冷静分析问题根源,我在调试能力上也有了很大的进步。我学会了如何:
    借助日志和断点工具定位问题;
    用分模块测试的方式逐步排查逻辑错误;
    用清晰的注释和文档记录复杂代码的意图。

  3. 团队合作与自我驱动
    课程中不仅有个人任务,还有小组项目。我意识到团队合作时的沟通、分工、协调是非常重要的。同时,在独立完成较复杂任务时,如何快速自学、深入理解新概念,也是关键能力。

想说的话

  1. 对老师的感谢
    老师的引导和讲解是我进步的最大动力,尤其是在代码设计思路的引导上,让我摆脱了以往“见代码就写”的坏习惯,开始从需求出发思考问题。
    每次作业批改中的点评都让我受益匪浅,比如指出冗余代码如何精简,哪些地方需要优化逻辑,这些指导让我逐步体会到编程不仅是技术活,也是艺术。

  2. 对同学的感谢
    在完成小组项目时,身边的同学给了我很多启发。我们在交流中碰撞出了许多思路,学到了很多之前不熟悉的知识。大家的团结和分享精神让我感受到合作的力量。

  3. 对自己的期许
    这个学期的学习是一次启程,但并不是终点。我意识到,自己的知识体系还需要进一步完善,比如:
    数据结构和算法的熟练度需要提升;
    Java以外的语言(如Python、C++)也需要涉猎;
    设计模式和架构设计的理论还需要更多实践和验证。
    新的一年,我希望自己能继续保持好奇心和探索欲,深入学习每一个知识点,写出更优雅、更健壮的代码。

最后,感谢这个学期的所有努力与付出,也期待未来更加精彩的学习与成长旅程! ❤️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860471.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8086汇编(16位汇编)学习笔记08.函数

https://bpsend.net/thread-138-1-2.html函数结构 函数结构的演变 函数的结构并不是随随便便就出来的而是解决了很多问题之后,大家统一认为那个结构是最好的一种方式 例如:模拟函数实现2个数相加 不用函数实现两个数相加 ;这是栈段 stack segment stackdb 512 dup(0) stack en…

JAVA 7~8次题目集总结

本次完成了7~8次的题目集是接着上次的家居强电电路模拟程序-1和家居强电电路模拟程序-2后续迭代功能拓展 完成了家居强电电路模拟程序-3和家居强电电路模拟程序-4 家居强电电路模拟程序-3相比较之前的升级了电路其中线路中包含多个串联起来的并联电路以及增加了新的受控电路元件…

[4422] 08 无代码工具:如何做到不写代码就能高效交付?

在开始今天的课程前,我们先来简单回顾下上节课的思考题:低代码工具主要面向什么样的用户群体呢?低代码工具本质上是对组件化开发流程的简化,但在开发过程中,仍然可能进行编码调试。因此,它面向的用户群体应该是具有一定技术基础的开发人员,专业的后端开发也可以使用这类…

[4421] 07 低代码工具:如何用更少的代码实现更灵活的需求?

在进入到这一课的内容之前先让我们来回顾下,通过脚手架工具生成初始化代码,以及通过 Snippet 工具生成代码片段的方式。两种方案的相同在于,通过简单的输入和选择就能获得预设后的项目代码。这种转化方式对于效率的提升效果是清晰可见的。于是有人就想到,能不能更进一步,将…

题目集7~8总结与分析

一.题目集七,7-1 家居强电电路模拟程序-3 1.前言 知识点考查和难度: 本题在上次迭代基础上增加了互斥开关和受控窗帘,以及电路的多并联。主要难度体现在互斥开关的引脚问题和通断特性。 更综合考查对设备的开关理解,和电路的逻辑结构。以及对电路设备的建立方式有些许的不…

再战博客园美化(七)

上回说到。。。我的博客总算有了一个亮色一个暗色主题可以切换了 里面也有一个forFlow?找不到文章列表,没有进行替换。 也行吧,以后再修,先埋雷先,反正我不是专业前端。(能跑不动原则) 今天玩——背景图!欧,不,丑死了。白天黑夜的图片需要不同 卡片半透明磨砂 标头、…

宋词300首获取

宋词三百首获取 近来一段时间无聊,突然被古诗词吸引,之后就有了后续的一系列操作 作为计算机专业,对于批量获取内容肯定首选🕷(仅供个人学习) 首先要有个目标,去哪个网站获取数据,这里就选择了页面简化的唐诗宋词.这里选择里面的宋词分支就好了 通过调用F12控制台会发现所有的…

416_前端工程化精讲

416_前端工程化精讲 //合并文档ds script 4357 || 已发布 || 开篇词 | 建立上帝视角,全面系统掌握前端效率工程化 || d6b0ec03a4374536a361909923c61bee 从事前端开发十余年 曾先后在多家大型互联网公司从事前端架构工作 讲师:李思嘉 贝壳找房前端架构组任资深工程师,…

java三阶段总结(家用电路模拟)

前言第六次题目集知识点:抽象类,抽象类不能被直接实例化!有抽象方法,抽象方法没有方法体,由继承它的子类提供具体实现。抽象类可以看作是一种模板,子类在实现接口方法时,必须实现接口中的所有抽象方法,除非子类也是抽象类在抽象类和接口中,多态体现为父类引用变量可以…

Material Design风格纯js确认框和对话框插件

material-modal是一款Material Design风格纯js确认框和对话框插件。该插件通过简单的CSS和JavaScript代码来构建确认框和对话框,是替代浏览器原生确认框和对话框的不错选择。在线预览 下载使用方法 在页面中引入material-modal.css和material-modal.js文件。< link rel=&…

PTA家居电路模拟3到家居模拟电路4

目录 一、答题判题程序第四次迭代 1、题目分析 2、题目类图 3、题目时序图 4、题目思路 二、家居强电电路模拟程序第一次迭代 1、题目分析 2、题目类图 3、题目时序图 4、题目思路 三、家居强电电路模拟程序第二次迭代 1、题目分析 2、题目类图 3、题目时序图 4、题目思路 四、…

Java难绷知识01——IO流的对象流

Java难绷知识01之对象流 本篇文章会探讨一些JavaIO流中比较容易被忽视的对象流,而且会相对的探讨其中的一些细节 其中对于对象流的操作讲解会少一些,主要讨论的是一些细节 在 Java IO 流中,对象流(ObjectInputStream对象输入流 和 ObjectOutputStream对象输出流)用于将对象…