第三轮OOP作业总结

news/2024/10/6 4:38:56/文章来源:https://www.cnblogs.com/UchuVoid/p/18276794

随着这一次大作业的结束,这学期的PTA大作业也随之完结,可以说这最后一次大作业也是最难的一次,在这一次作业中我也感受到了不良代码结构所导致的修改错误的痛苦,接下来让我们对这两次题目进行相应分析。

  • 家居强电电路模拟程序-3
  • 家居强电电路模拟程序-4

第三次作业

这一次大作业的电路连接上与上一次大作业差不多,都是一条主线加多条分支的结构,但是新增的互斥开关导致我修改了很多之前的代码内容,从而产生的相应的错误让我感受到了遵循开闭原则的重要性。

由于互斥开关在不同路的电压不同,所以我对getRes方法进行了修改,当调用getRes方法时需要传入是那条电路传入的,虽然这样解决了互斥开关的问题,但同时也要修改其他全部volObserver对象的getRes方法,就导致很复杂。

SourceMonitor分析如下:

UML类图如下:

设计与分析:

设计:

这次较大的改动分别是由于互斥开关的引进,电路电阻的分析,大幅修改了计算电阻方法的参数,其次就是排序方法,由于这次题目要求了相应的排序方法,于是我又在AUTO类中加了储存设备名称的变量,将所有设备的名称储存起来后在排序,之后通过排序的顺序搜索相应的设备进行输出。

改进建议:

对互斥开关对象的类设计不是很遵循六大设计原则,导致代码在面对修改时很复杂。

出现错误:

1.这次题目有个很恶心的错误点,那就是排序的问题,这道题对于A1 A11 A2进行排序时的排序规则是完全依据字典排序,不需要将字母和数字分开来进行排序

第二次作业

这一次大作业不仅是最难的一次,而且时期恰逢考试周,不得不在做PTA和复习中做抉择,而这一次的PTA难点在于放开了电路的组成限制,使得电路可以随意拼接,串联有串联,并联,并联内可以有并联串联,但最难的还是强制要求输出设备的引脚电压,这是我之前代码中完全没有考虑到的部分,之前我都是直接给设备赋值有效电压,而不是通过引脚电压差来计算,所以对于引脚电压的判断完全是在之前代码的基础上新增,又由于这时恰逢考试周,对代码的修改不在注重单一原则,就导致代码在修改时遇到了很多困难。

SourceMonitor分析如下:

UML类图如下:

设计:

我的类设计:

这题难就难在对一系列短路,断路中设备引脚电压的判断,一开始我以为短路电路,上设备引脚进出都为0,但实则不然,必须要符合电势,而不是单纯的使引脚为0。

这次新增的二极管在题目一开始也没说清楚会不会阻挡反向电势,后面加上的说明也是模棱两可,可以说最后一次改分后虽然我知道错误点在哪里,(两个断开控制设备中间夹着一个设备是此时这个设备引脚没电势),修改也只能最多让我多加12分,于是放弃复习去了。

出现错误:

这次题目集最后直接将代码耦合度提升了1度,也是将自己的代码修改成了石山的形状,而且最后也没有满分,是这一次题目集的遗憾,让我明白了代码不是一味的硬写,比如这次就是没有考虑电势,而出了很大错误,也让我明白了降低耦合度的重要性,提升代码扩展性和鲁棒性的重要性。

改进建议:

一开始就可以再类中设置储存引脚电压的变量,由于一开始的主电路没个设备左右两引脚必有电压,这样就可以当遇到短路时直接将设备输出引脚赋值为上层电路的输出电压,这样可以就不需要左右赋值电压了,以下是我现在的引脚赋值代码

@Override
public double setInputVol(double inputPin, Circuit circuit) {super.setInPin(inputPin);double voltage = inputPin;for (VolObserver observer : getCurObservers()) {voltage = observer.setInputVol(voltage, this);if (voltage == 0) {return 0;}}return inputPin - getVoltage();
}@Override
public double setOutputVol(double outputPin, Circuit circuit) {super.setOutPin(outputPin);double voltage = outputPin;for (int i = getCurObservers().size() - 1; i >= 0; i--) {VolObserver observer = getCurObservers().get(i);voltage = observer.setOutputVol(voltage, this);if (voltage == 0) {return 0;}}return outputPin + getVoltage();
}

这是之前的代码还是会产生一些不知名的错误。

综合性总结:

最后一次作业,让我明白了架构设计的重要性,通过学习设计模式可以巧妙解决一些问题,

而通过这一学期PTA作业的高强度训练,我在大型问题的编程能力也得到了提高,代码书写行数也有万行以上了。

期待下学期计算机系统和数据结构的学习

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

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

相关文章

Windows 7操作系统全面解析与实用技巧

深入介绍Windows 7操作系统的基础知识、功能特性、分类和基本操作技巧,包括核心功能、特征、分类、安装方法、启动、文件管理、个性化设置等方面。旨在帮助用户深入理解Windows 7,并掌握提高工作效率和个性化设置的实用技巧。Win7操作系统一、操作系统的概述 1.1操作系统的概…

C#使用MQTT通讯协议发布订阅主题报文

一、服务端1.添加引用MQTTnet类库  2.代码:启动一个MQTT服务1        // 启动一个MQTT服务器2 // MQTT 3 IMqttServer server = new MqttFactory().CreateMqttServer();4 server.ClientConnectedHandler = new MqttServerClient…

图解 Jenkins Pipeline 的前端自动化部署,用上后真香!

图解 Jenkins Pipeline 的前端自动化部署,用上后真香! 原创 悟空聊架构 悟空聊架构 2024-06-27 20:57 广东 听全文你好,我是悟空。 本文目录如下:一、Jenkins 前端部署思路1.1 整体架构图1.2 部署步骤二、Pipeline和自由风格对比三、Pipeline 核心脚本3.1 获取 Git 代码分支…

23201115-邓俊豪-第三次blog

目录blog2前言关于难度和题目量关于知识点设计与分析pta-7一、项目简介二、项目实现三、项目测试四、代码示例五、总结六、代码分析pta-8一、项目简介二、项目实现三、项目测试四、代码示例五、总结六、代码分析改进建议 blog2 前言 关于难度和题目量 前三次大作业难度属于偏难…

Fastapi 项目第二天首次访问时数据库连接报错问题Cant connect to MySQL server

问题描述 Fastapi 项目使用 sqlalchemy 连接的mysql 数据库,每次第二天首次访问数据库相关操作,都会报错:sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Cant connect to MySQL server on x.x.x.x ([Errno 111] Connection refused)"…

linux安装中文字体

1.从windows复制宋体字体2.linux系统下/usr/share/fonts 3.创建simsun路径,将字体文件放进去4.改一下字体权限 cd /usr/share/fonts/ sudo chmod -R myfonts 7555.安装依赖 yum install mkfontscale yum install fontconfig6.执行以下命令 mkfontscale mkfontdir fc-cache7.查看…

(五)DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍如需引用 DeepSpeed Chat,请引用我们的arxiv report: @article{yao2023dschat,title={{DeepSpeed-Chat: Easy, Fast and Affordable RLHF Training of ChatGPT-like Models at All Scales}},author={Zh…

第7-8次OOP作业总结

一、前言 1.第七次作业(家居强电电路模拟程序-3) 这次作业题目在原先的基础上新增用电器新增了互斥开关和受控窗帘,同时存在多个并联电路,无疑在上次作业的基础上过程没有太大变化,难度也是相当,主要是新的用电器的添加问题。并联电路的改动还好说,上次作业我便考虑到了,…

Python——比 Seaborn 更好的相关性热力图:Biokit Corrplot

在 Python 中我们日常分析数据的过程当中经常需要对数据进行相关性分析,相关性热力图(Correlation Heatmap)是我们经常使用的一种工具。通过相关性热力图,我们可以通过为相关性不同的数据使用不同深浅的不同颜色进行标记,从而直观地观察两两数据序列之间的相关性情况——这…

流量治理核心策略

熔断、隔离、重试、降级、超时、限流https://mp.weixin.qq.com/s/_3pht6cFdkuRfrE1z0dpKQ

第三次blog大作业

1,前言:最后两次大作业都是只有一道题,就是前面的家庭电路模拟题的迭代,题目量虽然看起来很少只有一道题目,但是这一道题目也比前面出几道题目的时候花的时间还要长,第七次大作业的迭代主要考虑的是单刀双置开光,单刀双置开关为了避免短路,他连接不同的电路还会有不同的…

PTA题目集7~8的总结性Blog

前言: 对于我这种水平的学生来说本次的7-8次PTA的难度之大令我无从下手,况且之前的第6次PTA就已经让我望而止步了,更别提这两次在第6次PTA题目集之上再次进行迭代的题目了。再加上面临的期末周,大量学科等着我去复习,以至于没时间去钻磨PTA的改动,哭死,连老师都说单单是…