PTA大作业4-6总结

news/2025/3/12 13:24:58/文章来源:https://www.cnblogs.com/Xgyy176184/p/18228488

前言

这三次大作业使用到的新知识点并不是很多,主要还是以继承与多态为主,虽然在新知识点上并没有增加许多,但明显在类的构造,类与类之间的关联设计方面难度明显有较大的增加,题量方面明显还是和之前三次大作业一样,每次大作业都是以一题为主,其余的题目都是为了巩固基础知识点,并没有增加大作业的整体难度。总体来说,这三次大作业的难度相对于前三次是有明显增加的,这一点在我完成大作业的代码量上也可以明显感受出来。

设计与分析


相较于前三次大作业,第四次大作业并没有太大的改动,只是比之前在题目类型上增加了多选和填空题,所以在题目类方面我选择使用了继承,让多选和填空题继承于Question类,而在课上听取了同学的建议后我也选择开始简化main函数,将scanf(输入)和print(输出)这两种方法单独建立一个信息处理类来调用。当时对于这样的类的设计我还是挺满意的,那次大作业并没有耗费我很多时间和精力,虽然现在看来还是有可改进的地方(如可以将题目类作为试卷类的属性直接调用,而我选择了在试卷类定义了一个用于储存题目编号的链表,再通过与题目类中的题目编号匹配进行调用)就是了。

第五次大作业进行了一次全新的迭代,因为是第一次迭代,所以题目难度明显比第四次降低了很多,也正因如此我很偷懒的将类设计的非常简单,单纯地将控制元件与用电器与数据处理类相关联并没有建立控件类与用电器类作为父类再使用继承。不过因为此次大作业相比之前简单太多,所以当时完成这题时并没有觉得很复杂(但很不幸在下一次大作业中我承受了这种想法的后果)。虽然这样设计类以及类与类之间的关系确实还是让我很轻松地在一个晚上就完成了这道题,但平心而论现在再来看这样的类设计,我只觉得我能很轻松地完成这次大作业单纯是因为难度被下调以及运气好没在什么特殊的测试点上翻车罢了。

可以看到,正如上面所说,我之前简单的想法让我在本次大作业中尝到了苦头,大概是因为之前的大作业完成的太轻松,我依然没有建立控件与用电器作为父类,所以让类的关系光看起来都非常杂乱无章,而以这总思路进行编码时,我就不只是只用眼睛感受这份痛苦了,可以说我完成这次大作业所用的大部分时间都在梳理和修改不同控件与用电器的关系与各自的调用方法上了。回到类的设计上,由于本次修改要求增加并联的情况,所以我选择设计了Line类作为线路类,用来储存一条串联线路的数据,同时还设计了并联类用于储存并联线路中所包含的串联线路。总体来说,这次大作业的类的设计可以说是非常失败,以至于让我在编码时总有一种还不如全部推翻重写的想法,毕竟编码的大部分时间不是在修改类调用的关系就是在修改类调用关系的路上。

踩坑心得

可以说这三次大作业中踩到的最大的坑就是上面已经提到过不止一次的问题了,而且还是自己挖的坑,可以说就这一次的错误带来的折磨已经让我产生一定的心里阴影了,都不用我刻意去设计,我都感觉我下次再遇到许多含有共同属性的类不用经过思考就会选择使用继承了。
还有一点让我浪费了很多时间的错误就是将引脚作为各类原件的属性



在设计电路元件的这个属性时我还并没有考虑电势差的计算方法,所以就给每个电路元件都设计了两个引脚作为属性储存电路元件两端的电压,由于这个想法,我在进行用电器两端电压差的计算方面一开始使用的是电势相减的方法,但实际在完成的时候才发现这种方法并不好实现,首先要完成这个想法的设计必须还要新增电流这个属性,再分别求出每个用电器两端的电势,还要同时考虑控件所带来的变化,所以在完成大作业时这种方法我在尝试了一段时间后就选择了放弃,改为采用分压计算用电器两端电压。而在改变计算方法后的思路明显就简单了许多。
然后在第六次大作业中因为一种情况未考虑到也让我找了很久才发现,那就是并联电路中有一条支线处于断开状态,以至于在使用公式(r0=r1*r2/r1+r2)计算并联电路总电阻时,总电阻的计算结果一直是0,这不但导致了并联电路上的用电器两端电压一直显示为0,还同时导致了主干路上的用电器因为总电阻错误而计算出了错误的分压,当时一直没考虑到这种情况还让我一直以为是用电器两端电压的计算方法上出了什么错误,所以在排查错误时一直将大部分精力放在了各种计算上。

改进建议

这三次大作业需要改进的方向就非常明显了,首先是类的设计方面,对于明显拥有许多相同属性的类可以积极去考虑继承与多态方面的运用,避免出现这次大作业一样出现大量重复冗杂的代码:





以上的这种情况不但导致了代码可读性的急剧下降,同时还加大了排查错误的难度,这次代码中这一定最需要改进的地方。
另外就是代码中过多地使用了循环嵌套,很多方法都使用了两三层的循环嵌套,多的甚至使用了四层循环,说实话在编码时也只有在刚构思出开始写的时候能比较清晰地理出各层循环之间的关系了,回过头来修改代码时就可以感受到这些循环有多复杂了,同时还容易搞混用于控制循环次数的变量。所以对于以后的编码,明显需要改进的地方就是尽可能能少使用循环嵌套,减小圈复杂度,尽量改变思路换为其他方式进行处理。
还有的话,就是应该在编码前就理清楚所需要用到的东西,第五和第六次大作业中我都创建了许多没用到或者根本不需要,没起到作用的数据变量,导致在查看和修改代码时经常被这些闲置的变量所误导,打乱自己的思路,而且尽量在创建各种变量时应尽量在其后标注对应的是什么数据,也尽可能在变量命名时就让人一眼就看得出是什么数据,在这次大作业中我就使用了很多未标注且很难辨认的变量(如kr(并联总电阻),dr(串联总电阻),这两个变量我在使用的时候就用混过不止一次),导致出现了许多很难排查出来的错误。

总结

这三次大作业再一次让我感受到了写程序的第一步,也就是需求分析的重要性,在需求分析的过程中我们可以考虑到很多东西,如各种类之间的大概关系,各种类的属性应该任何设计,不同类之间应该采用什么样的关联方式,以及数据的计算应该采用什么方法,如何获取需要的有效数据,获取数据后以什么样的方法处理数据,又以什么形式储存数据等等等等。所以对于拿到任何一道题目,都必须在第一时刻认真地分析题目,找到其中的关键变量与关系,将这些东西都梳理清楚了再进行下一步。
这三次大作业,尤其是最后那一次让我理解到了需求分析完的下一步也非常重要,那便是类图设计,也正如上面多次提到的,我在没认真设计类这一点上吃尽了苦头,也正如课上同学在分享他的设计思路时说的那样,一个好的类的设计能在编码时给我们带来很多的便利,让我们在编码时有明确的思路,同时我们在设计类时也能大致绘制出代码的基本构造,让我们在编码时能够清晰的构造出较为合适的框架。
通过这三次大作业我也感受到了自己在代码的可读性与可扩展性方面确实做的不是很好,考虑的不是很到位。首先还是变量的命名问题,很多时候我都会在刚开始为了方便选择只用一个字母给变量命名,但经常会在之后搞混这些名字,其次就是代码块的区分,每次在修改代码时总是会被满屏幕的代码搞得头晕脑花,究其原因就是未能明确地将不同作用的方法有条理性地区分开来,简单来说就是没能做到单一职责化,这一点也是需要在之后的学习中进一步改进与研究的。
最后聊一下我对于现阶段学习的看法,以目前的学习方式确实能够感受到自己的编码能力在慢慢的一步步地提升,这一点在对比这三次大作业与上三次大作业后就更为明显了,尤其在代码风格上明显与之前有所不同,也反映出了这样循序渐进的学习方法确实有用,而在今后的学习中,我也会结合自身的不足进行针对性的强化学习,希望自己能在今后的学习中更进一步!

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

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

相关文章

.NET之Hangfire快速入门和使用

原文地址:.NET之Hangfire快速入门和使用 - 追逐时光者 - 博客园 (cnblogs.com)前言:定时任务调度问题,是一个老生常谈的问题。网上有许多定时任务调度的解决方案,对于我而言很早以前主要是使用Window计划和Window服务来做任务定时执行,然后就开始使用定时任务调度框架Quar…

插值技术研究

过采样与欠采样&图像重采样(上采样&下采样) 研究图像插值技术:2016年苏州大学的钟宝江等人《图像插值技术综述》[1]图像插值利用图像已知采样点的灰度值估计未知采样点的灰度值,是图像数据的一种生成过程 。 图像插值的目的在于通过升采样的方式提高图像的分辨率。…

科研日记4【2024-06-06】

实验高度向稀疏采样造成的整行缺失使得在高度向上出现严重混叠现象, 对高度向稀疏采样的数据首先利用线性插值恢复补全,再将部分插值去掉,以模拟二维随机降采样。 实验结果说明上述方法并不好。 高度向50%稀疏直接成像:高度向50%稀疏-不动迭代成像:高度向50%稀疏-线性插值…

活动预热丨在 AGI Playground 2024 遇见一群 RTE+AI 的 Builders

6 月 22、23 日,北京。AGI Playground 2024,这个夏日最火热的 AGI 盛会。王小川、杨植麟等 AGI 创业者悉数参加。RTE 开发者社区的 builders 和 RTE Open Day 也将在现场!我们将为大家呈现两大板块: 01 实时开发挑战 Workshop RTE 开发者社区将联合「零一万物」发起 worksh…

Yearning外置工单通知实现思路

背景概述 上篇我们讲解了一下Yearning如何使用飞书发送工单通知,但是我最初的想法不仅仅是飞书、钉钉这些媒介,更多的是希望可以自定义集成渠道,因此想到了PrometheusAlert,这样我们就不用重新造轮子了。 大致配置image-20240606110115965 我们拿到Yearning发送的数据,当然…

一加七Pro刷Lineageos21(kernelsu+MicroG)

前言 前几天我已经刷了Lineageos21(一加七Pro刷lineageos21(kernelsu+gapps)),但是体验下来有两个很严重的bug:无法接打电话,没有声音。 收短信倒是很正常,但电话打进来只会显示号码,不会显示接听界面(对方那边显示正在通话中,也就是挂断了),拨打电话会显示已结束。 测试…

教务管理系统

1 项目简介 教务管理系统主要模块: 邮箱注册:用户根据邮箱发送验证码注册用户信息 邮箱登录:用户根据注册的邮箱登录 教师管理:主要包含教师的全部查询,教师信息的修改,添加教师信息,删除教师信息,分页查询教师信息 多条件查询教师信息(教师编号,名称,性别,入职日期…

网络隔离后的跨网投递需求,要这样做才能让需求落地

为了保护企业的核心数字资产、隔离有害的网络安全威胁、保障数据信息在可信网络内进行安全交互,越来越多的企业在网络建设时,选择进行网络隔离。应用较为普遍的网络隔离手段包括物理隔离、协议隔离、应用隔离等,而常见的状态是企业进行内部网络和外部互联网隔离,或者企业内…

数据库系列16:MyISAM与InnoDB的索引对比

相关文章 数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版) 数据库系列:高并发下的数据字段变更 数据库系列:覆盖索引和规避回表 数据库系列:数据库高可用及无损扩容 数据库系列:使用高区分度索引列提升性能 数据库系列:前缀索引和索引长…

《UML基础、案例与应用》习题记录-第8章

部分习题,使用visio或plantuml,非正确答案,仅供参考,欢迎评论,谢绝转载。 第8章 状态图 1.状态图 2.状态图 3.状态图 欢迎大家评论交流,发现博文中存在的问题一定要留言哦

《UML基础、案例与应用》习题记录-第9章

部分习题,使用visio或plantuml,非正确答案,仅供参考,欢迎评论,谢绝转载。 第9章 顺序图 9.10.2习题 1.类图 顺序图: 2.顺序图 3.顺序图 欢迎大家评论交流,发现博文中存在的问题一定要留言哦

《UML基础、案例与应用》习题记录-第6章

部分习题,使用visio或plantuml,非正确答案,仅供参考,欢迎评论,谢绝转载。 第6章 介绍用例 6.9.2习题 2.用例图3. 用例图 4.用例图 欢迎大家评论交流,发现博文中存在的问题一定要留言哦