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

目录
一、答题判题程序第四次迭代
1、题目分析
2、题目类图
3、题目时序图
4、题目思路
二、家居强电电路模拟程序第一次迭代
1、题目分析
2、题目类图
3、题目时序图
4、题目思路
三、家居强电电路模拟程序第二次迭代
1、题目分析
2、题目类图
3、题目时序图
4、题目思路
四、踩坑心得
五、改进建议
六、总结
一、家居强电电路模拟程序第三次迭代
题目分析:本次题目是家居模拟电路的第三次迭代,在本次迭代当中,新增加了一个互斥开关,同时因为需要考虑电阻的原因,互斥开关接在不同的引脚的时候电阻不同,因此我增加了一个判断位,判断他究竟是哪一个地方作为输出,以此来改变电阻值,并且判断那一条路有电流,同时本次题目增加了串联电路中含有多个并联电路,需要增加一个存储并联电路的数组。
题目类图:

类图分析:首先我定义了一个总的抽象类,然后这个抽象下面一共三个子类,分别是控制电器子类,家居子类和电路子类,这三个子类又同时作为不同部分的父类,比如控制电器子类当中有控制开关子类,分档控制器子类,连续控制器子类,互斥开关子类,家居子类有落地扇,吊扇,日光灯,白炽灯,窗帘,电路当中有串联电路并联电路
题目时序图:

题目思路:首先我在每一个家居里面增加了设置电阻,进入电压和离开电压,因为题目中关于这些电路的逻辑基本上都差不太多,都是一个输入电压然后内部进行处理逻辑然后再将电压输出因此,只需要给定一个输出电压的逻辑即可,我的做法是想遍历一遍输入,然后给每一个输入都创建一个对应的类,然后将类存入到串联电路的数组当中,然后再根据并联电路包含的序号,将对应串联电路存储到里面,在进行电路的基本设置,比如判断电路是否是出于联通的状态,电路的输入电压以及电器的电阻。经过内部的处理,最后调用各自的打印函数。
处理互斥开关部分逻辑代码

二、家居强电电路模拟程序第三次迭代
题目分析:本次题目在上一次题目的基础上难度再一次加大,这一次题目中多了一个仅支持单向电流的电子元件,这一次作业的难度好大,我并没有完全实现本次作业的功能。
类图:

类图分析:类图的总体逻辑和上一次迭代差不多,在此基础上增加了二极管部分,因为二极管的特性只能允许特定方向的电流通过,因此在二极管的电阻部分增加一个判断,判断是不是和接入方向一致。
题目时序图:
题目思路:在类设计上,新增了二极管 erjiguan 类,用于精准控制电流的单向进出在电路连接流程中,首先依据输入信息创建元器件类,并根据引脚顺序为类内引脚编号,遇到互斥开关时单独判断其状态。接着,妥善处理串联包含串联的复杂情况,将所有非并联电路统一整合到主路内。随后,从主干路开始,循环各个支路的状态,准确判断电路启用状态,进而计算电阻,再算出串联干路电流、并联各支路电流以及对应的电压降。最后,通过传递电压,计算电阻与电流乘积并减去接入引脚电压后向下传递,同时从 GND 口反向出发,将与之直接相连的输出引脚电压纠正为 0,最终完成各个元器件状态及参数的计算。
踩坑心得:类设计的复杂:在多次迭代家居强电电路模拟程序时,类的设计随着功能需求的增加变得愈发复杂。就像处理互斥开关,将其整合进已有类看似便捷,实则引发了一系列连锁问题,如额外的判断逻辑使代码可读性变差,后期维护难度直线上升。而且每一次新功能的添加,例如引入二极管,都要小心翼翼地在原有类结构基础上进行扩展,稍有不慎就会破坏整体的逻辑连贯性,导致代码出现难以排查的漏洞。
没有使用递归的思想:起初面对复杂电路计算,总是习惯性地依赖基础逻辑去实现,特别是在递归算法的运用上,虽然发现了电路结构与递归思想的契合点,但因为不想改动先前迭代的代码所以最终还是没有使用递归的方法,所有的代码逻辑基本都是简单的循环遍历原先的数组,如下图:
改进建议:优化类设计架构:在后续项目开发前,先进行更全面、深入的需求分析,根据功能模块合理划分类,遵循高内聚、低耦合的原则。对于类似互斥开关这样具有特殊逻辑的元器件,考虑单独设计一个类来专门处理其复杂行为,避免污染其他类的纯净性。同时,利用设计模式,如工厂模式来创建元器件类,使代码结构更加清晰,易于扩展和维护。比如这几次迭代的电路中可以使用组合模式,将电路中的元件视为文件夹中的文件,将串联电路视为文件夹,然后递归的使用即可
2、在编写具体逻辑的时候可以尝试一下看看有没有符合的算法逻辑,这样子能极大的减轻开发成本和加强开发的效率。
总结:
作为这个学期最后两次大作业,我完成的并不是很好,总的来说,一些本来可以简单一点的类逻辑,我还是用了很复杂的方法来实现。但也收获到了很多东西,比如在第三次迭代的时候,因为我第二次的代码逻辑需要很大程度的修改,所以我干脆重构了代码,用比较器来区分是哪一个类。同时在类设计方面,随着功能增多,类结构愈发臃肿复杂,像互斥开关融入既有类体系后,额外判断逻辑缠绕其中,极大地破坏了代码可读性,让后期维护举步维艰。同时,在算法运用上,起初未能大胆采用递归思想,局限于简单循环遍历数组,错失优化代码结构、提升计算效率的良机。
这两次的大作业我还是学会了很多东西的,比如加深了子类父类的理解,明白了一些java上提供的更加简洁明了的功能,同时还增加了我的开发能力。
总的来说,这个学期java的学习下来,让我充分地体会了面向对象的思想,明白了java的一些基础语法的使用,明白了很多的设计模式,也知道了自己很多方面的不足。

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

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

相关文章

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

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

题目集7-8总结

前言题目集的知识点、题量、难度 1.知识点总结:类的定义与实例化: 概念:定义类的属性和方法,创建对象 示例:public class Device { private String id; } 应用:定义各种电气设备类并创建实例继承关系: 概念:子类继承父类特征 示例:class Switch extends Device 应用:所…

Rust和C/C++相关调用总结

一.Windows下Rust与C/C++互相调用 1.C/C++调用rust 1.1动态库调用 1.1.1以LoadLibrary方式显示调用 add.rs #[no_mangle] // 防止 Rust 修改函数名 pub extern "C" fn hello_world() {println!("Hello from Rust!"); }#[no_mangle] pub extern "C&quo…

24.11.20 磁盘管理

磁盘外部结构 磁盘分类:固态硬盘:内部是主板和U盘类似机械硬盘:盘片 主轴 传动手臂 做机械运动 类似DVDNvme硬盘 PCI-E接口大小分类:3.5英寸:台式机2.5英寸:服务器 笔记本接口类型:IDE接口 # 淘汰SCSI接口 # 淘汰SATA接口 # 台式机 笔记本SAS接口 # 企业服务器标配固…

Julia疑难杂症专栏 | 安装问题汇总及其解决方案,从环境配置到结果验证,深度学习、科学计算、数据处理、大模型、并行处理,让你的代码飞起来

1. 下载慢的问题 使用端口问题 2. 下载慢的问题 ,设置镜像源加快速度 3. 一般的安装问题 4. STATA+julia 5. Vscode+julia 6. Jupyter+julia 7. Julia引入PyCall或者PyPlot报错卡顿 8. 彻底删除包的方法 9. Pkg.add("某个包")出现权限问题 permission denied (EACCE…

再战博客园美化(六)

连续剧更新了佬提了一嘴,于是我发现我替换没替换完,现在好了。 这是什么bug明明存在forFlow,但是不让我查询? 弄错了,用.就好light dark回来了,vue没有检查我默认有没有赋值,他只会自己贴一个上去。 算了,那就用vue的切换!不会吧。 在call后出现已被定义,有问题。被重…

arping 工具使用

1. 项目介绍arping 是一个用于在局域网(LAN)中查找特定 IP 地址是否被占用的实用工具。与传统的 ping 命令不同,arping 使用 ARP 协议来发送和接收数据包,从而能够检测到那些阻止 ICMP 请求的主机。arping 可以帮助网络管理员在调试网络时,快速确定哪些 IP 地址已经被占用…

Rules Of JSX 渲染列表 ‼️State

JSX只能拥有一个root元素,即只能有一个父元素。React不会渲染true或false到界面上,但会渲染0,1。 isOpen && <p>Hello!</p> 上述短路表达式意为:只有当isOpen为真时,才会执行第二部分内容,返回第二部分内容。如果isOpen为假且它的值为0,表达式会返回…

FastStone Capture10.9电脑截图工具中文绿色便携版

前言 FSCapture是一款集图像捕捉、浏览编辑、视频录制等功能于一身的屏幕截图软件,软件具有体积小巧、功能强大、操作简便等优点,其方便的浮动工具条和便捷的快捷键堪称完美结合。截图后的图片编辑与保存选项也特别丰富和方便,内置功能完善的图像编辑器,支持几乎所有主流图…

研途考研视频课件课程下载工具,如何在电脑端下载研途考研视频课程课件资料PDF,PPT到本地?

一. 安装研途课程下载器 1.获取学无止下载器 https://www.xuewuzhi.cn/kaoyanvip_downloader 2.下载安装后,然后点击桌面快捷方式运行即可。 注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。 二. 使用说明 1.学无止下…

golang 高频面试题

简述 Goroutine 的调度流程?Goroutine 是 Go 语言中的轻量级线程,Go 运行时使用调度器来管理 Goroutine 的执行。调度器的设计旨在高效地利用系统资源,并在多个 Goroutine 之间公平地分配 CPU 时间。以下是 Goroutine 调度的简要流程:Goroutine 的创建:当通过 go 关键字启…

NetBackup备份恢复工作流程workflow

# NetBackup备份恢复工作流程 在早期的NetBackup Troubleshooting guide中,详细描述了备份和恢复的步骤以及各个进程之间的调用关系,但是7.7以后的文档把这部分内容给取消了。在logging reference里面有类似内容,但是讲得不太清晰。备份流程从客户端或者Master Server GUI发…