OO第七,八次大作业总结

news/2024/7/3 20:37:47/文章来源:https://www.cnblogs.com/Adcage/p/18274916

一、前言  

  在这个学期即将迎来尾声的时候,这个阶段的大作业也迎来了最后的两个迭代大作业,而本次博客就将围绕这两个迭代大作业讲述

二、设计与分析  

   这两次的迭代作业的类设计其实没有很多的变化,只不过根据题目要求添加了互斥开关和受控窗帘,二极管这几个类,其中互斥开关是控制器的子类,受控窗帘属于设备的子类,二极管属于仪器类的子类。

因为受控窗帘的窗帘开放程度的参数是根据整个系统的光照强度设置的,所以我写了一个方法在整个电路都运行了之后再根据电路中所有的灯的亮度对这个窗帘的开放程度进行调整。

而针对互斥开关的内部细节操作,我则是设置了一个变量port,用来表示该互斥开关开关搭在哪一个引脚上,当port为2时,电流传进引脚二,当port为3时,电流传进引脚三,port为一时,则传进引脚一,这也是针对当引脚二和引脚三都在引脚一前面的情况。而二极管则是当引脚二在前的时候,该二极管反接,电阻无限大。

下面两张图分别是前一次博客和这一次博客时SourceMonitor的分析报告

从图片上可以看出来,在两次的代码的文件数量增多了4个,因为除开了上面讲到的三个类之外,还有一个窗帘的抽象类,作为受控窗帘的父类。

而在代码行数上,从688行到984行,多了大约三百行的样子,主要是第八次大作业的修改多了一些,在引脚的接入方向从以前除了互斥开关可能会存在引脚1在同元件后,变成了所有元件的引脚1与引脚2的顺序都可能随机,这点会在踩坑心得中详谈。并且在输出信息方面,多加了输出元件所有的引脚的信息这一点,这点也使我修改了不少,虽然在我之前写的代码当中是会将电压通过传参的方式传递经过所有的元件,但是在最后这一次大作业上却没能做到完成该题所有的要求,仍然存在一些错误。

而在注释占比上也相较于上一次有一点提升,从8.4到9.2说明我也已经慢慢养成了在写代码时为代码注释的习惯了,不过这方面还仍需要提高。

而这个最大的复杂度仍然是根据元件首字母创建相应类的对象的那个方法,该方法使用了switch语句。

三、踩坑心得  

  在最后一次大作业中因为同一个元件的引脚的先后顺序可以不同,比如引脚2可以出现在引脚1的前面,这点对于我写的代码的影响还是偏大的,因为最初我在设计类的时候担心可能之后会有元件的两个引脚不会以1或2的编号命名,或者同一条电路中的引脚顺序不会按照连接的顺序输入,这会对连接电路的那个方法造成一定的影响,所以我就在引脚类中添加了一个布尔类型的参数isInputPort,用于表示该引脚是不是输入端的引脚并且在创建这些引脚的时候就对这些引脚的inputPort参数进行了设置,但这一次的大作业中这一种输入模式打破了我原本的写的模式,所以我不得不对原有代码进行比较多的修改,并且在这一次的大作业中我删除了isInpuPort这一个参数,毕竟这一次输入模式的较大改变,我也不得不对这种设计进行修改。这也让我明白在给类添加参数之前应该要先思考该参数是否合理,是否符合应用。

  在前几次大作业中,因为我给引脚类添加的inputPort这个参数,所以我在第三次大作业添加了互斥开关时为了应对出现引脚1在引脚2,3后的情况,我还写了一个方法用于对这种情况下的三个引脚的isInputPort这个参数进行修改,但在这一次大作业之后我就反思,在写第三次大作业的时候也许我就应该删除掉这个参数了,这也是我的疏忽点。

四、总结

 在这一阶段的大作业中,我对于Java中的继承和多态的使用更加熟练了,继承和多态的使用使得整个代码更加具有灵活性,并且这提高了代码的重用性,当我使用继承的时候就可以避免写过多相同的方法,并且多态的使用也提高了我代码的简洁性,就比如我这个代码中的CircuitMember类作为电路元件的父类,在使用链表的时候范型我可以直接写成LinkedList<CircuitMember>,这样就可以储存所有的电子元件对象了,而不用为所有的类的对象都新建一个新的链表,并且这样的形式,我也不用额外写一个排序方法了,只需要为CircuitMember类实现Comparable接口的compareTo方法就可以了。

  但是虽然继承和多态虽然好用,但是并非什么情况都可以用,还是得根据实际情况使用,并且在使用继承的时候父类的设计就要更加的谨慎了,因为其子类越多,修改父类的一处地方法后,有时就会涉及到很多类的修改,这样对于修改程序是一个灾难,所以继承虽然优点多,但也不能无脑使用,还是得在满足了“是一种的”的条件后使用才是对的。

  在类的参数变量的添加上应该要思考该参数的存在是否合理,是否符合要求,是否不会造成代码的效率变差。

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

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

相关文章

微信内置H5支付

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣场景是用户通过微信扫app内的收款码,跳到一个h5页面。然后完成支付。 代码实现的整体流程: 使用微信扫码,码是app内生成的,码的内容是一个h5页面链接,扫码完成后跳转到自定义的h5支付界面。 扫码进入后,将页面展示所…

《编译原理》阅读笔记:p25-p32

《编译原理》学习第 5 天,p25-p32总结,总计 8 页。 一、技术总结 1.lexical lexical这个单词后续会经常用到,所以首先要搞懂它的英文意思,不然看到中文的“词法,语法,文法”这三个词的时候就会懵了——lexical对应这三个里面的哪一个? (1)lexical: lexicon + al,加…

OOP七,八次作业总结

OOP四到六次作业总结 一.前言: 第七八次为家庭电路分析程序。 在第七次作业中,家庭电路系统,匹配类设计不当 在第八次作业中,我修改了输出类,并优化类的设计 二,设计与分析: 1.家居强电电路模拟程序-3(第七次作业) 在本次作业中,我对类的设计较为直白,输出类也没有…

findfont: Font family Times New Roman not found.

这是因为在python环境中的matplotlib文件夹下没有这个字体的文件。 对于windows系统,请参考:https://blog.csdn.net/qq_49323609/article/details/139026798 Macos系统:先打开软件:找到字体的路径然后模仿以上https://blog.csdn.net/qq_49323609/article/details/139026798…

模拟集成电路设计系列博客——8.2.1 环形振荡器

8.2.1 环形振荡器 在这一章节,我们将介绍振荡器的基本概念。环路振荡器可以分成若干种,但两种主要的分类依据是直接产生正弦信号还是产生方波(或者三角波)信号输出。正弦波输出振荡器常被用于一些频率选择或者反馈电路的调谐电路,而方波输出振荡器常被用于一个非线性反馈电…

分类器

网络模型分为特征提取器,包括一系列卷积层。池化层、激活函数; 分类器则是后面的全连接层; 对于全连接层直接输出的值为logits;logits也叫做模型输出的对数几率,$n_j$ 通常表示为模型对于第 j 类的输出值,也就是在进行Softmax函数转换之前的原始logits

Graph Neural Networks based Log Anomaly Detection and Explanation论文阅读笔记

1.介绍 现代高科技系统,如云服务器或高性能计算机,通常由大量的组件组成。随着时间的推移,这些系统变得越来越复杂,使得手动系统操作和维护变得困难甚至不可行[17]。因此,自动化系统操作和维护是非常可取的。为了实现这一点,系统日志被普遍用于记录系统状态和重要事件。通…

Miniconda安装使用说明

Anaconda这安装包体积真是劝退我了https://docs.anaconda.com/miniconda/miniconda是最小的conda安装环境,只有conda+python+pip+zlib和一些其他常用的包,体格不到100Mb,非常迷你。 Miniconda 使用教程 创建和管理环境 Conda 允许用户创建隔离的环境,以避免不同项目之间的依…

m基于GA遗传优化的高斯白噪声信道SNR估计算法matlab仿真

1.算法仿真效果 matlab2022a仿真结果如下:2.算法涉及理论知识概要基于遗传算法(Genetic Algorithm, GA)的高斯白噪声信道(Additive White Gaussian Noise, AWGN)信噪比(Signal-to-Noise Ratio, SNR)估计方法是一种利用生物进化原理进行全局优化的技术,旨在寻找最优解,…

重生之我在男航学Java-3(完结)

一、前言家居强电电路模拟程序-3 考查内容:类的设计(适应迭代以及合理的类间关系的设计),正则表达式的应用(如何正确解析输入),java中集合框架的熟悉与使用并且选择合理的集合框架(存储数据并且方便数据的增删改查) 新增内容:互斥开关,落地窗帘 本次PTA由于自身的原…

嵌入式计算和视觉加速的开放标准

嵌入式计算和视觉加速的开放标准 https://www.khronos.org/assets/uploads/developers/presentations/Khronos_Embedded_Compute_and_Vision_Overview_Jun24.pdf Khronos将软件连接到硅 开放、免版税的互操作性标准,以利用GPU、XR和多处理器硬件的力量3D图形、增强和虚拟现实、…

第三次Blog作业

题目集6-7的总结性Blog 一、前言 题目集总结 第六次题目集 知识点:控制理论、电路设计、设备工作原理 题量:中等 难度:中等偏上控制设备部分涉及对开关、分档调速器、连续调速器三种设备的理解和操作。需要理解开关的两种状态,分档调速器的档位变化以及连续调速器的连续调节…

第三次blog

第三次blog感悟 随着知识越学越多,任务也越来越繁重,难度也是与日俱增,也许是时间花得还不够也不够认真导致最近的一些pta作业都完成得差强人意,我认为java的学习最重要的是写作业的认真、严谨的逻辑以及大把的时间。nchu-software-oop-2024-上-6 本次作业题目大致内容 1、…

第三次PTA作业总结

一.第七和第八次PTA作业总结 1.第七次PTA作业的分析 (1).设计思路: 设计电路设备类(如ControlDevice, AdjustableDevice, ExclusiveSwitch)和受控设备类(Light, Fan, Curtain)来封装设备的属性和行为。 电路类(SequentialCircuit, ParallelCircuit)用于表示电路结构,…

在WPF中使用着色器

概念类比范畴 CPU GPU二进制文件 .exe .cso / .ps二进制指令 机器码 CSO(shader指令)助记符 汇编 SL高级语言 C# HLSL高级语言文件 .cs .hlsl / .fx高级语言编译器 csc.exe fxc.exeAPI .NET API DirectX API运行时环境 CLR DirectX调试工具 Visual Studio Debugger RenderDoc着…

OOP第三次博客作业

目录前言:设计与分析:opp-7-家居强电电路模拟程序-2opp-8-家居强电电路模拟程序-2踩坑心得:opp-5-家居强电电路模拟程序-3踩坑和心得:opp-5-家居强电电路模拟程序-4踩坑和心得:总结: 前言: oop-7相比与oop-6仅增加了两个电子元件,一个互斥开关,一个受控窗帘,除了优化…

《DNK210使用指南 -CanMV版 V1.0》第五章 编译CanMV固件

第五章 编译CanMV固件 1)实验平台:正点原子DNK210开发板 2) 章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-…

第三次PTA总结

前言 本阶段面向对象程序设计进行了两次PTA训练,两次都是关于电路设计的迭代。迭代次数越多难度越大,后期事情较多,作业和考试任务重、题目的难度也较大,所以没有拿到每次作业的满分,但是都根据题目的变化对自己的设计进行了一定的改变和优化。 知识点类的设计; 数组、链…

防火墙部署案例

通过引流方式实现防火墙旁挂部署并且实现安全防护功能案例 一、项目背景 1、客户有购买了一台某公司由于性能问题和服务器直连核心交换机原因,决定采取旁挂方式部署,但是又希望实现安全防护,因此决定通过引流方式(QOS的流量重定向)把需要防护的流量引到防火墙,防火墙做路…