首页 > 其他分享 >OOP课程第二次Blog

OOP课程第二次Blog

时间:2024-06-03 23:33:06浏览次数:21  
标签:题目 调速器 代码 Blog 课程 OOP 电压 复杂度 输入

一、 前言

本次博客是对于题目集4~6的总结和反思。

知识点
本阶段题目集的主要考察的知识点是继承和多态,继承包括对super、extend关键字的使用,方法的重写等,多态包括向上转型、向下转型等。此外还考察了抽象类和接口及之前的封装性,需要我们有抽象类的能力。在设计上考察了单一职责原则和MVC模式。总体上需要对现已学过的知识进行综合运用。

题量
本阶段题目集相比于上一阶段题量有所减少,第四次中三道题,两道小题,第五次中三道题,两道小题,第六次中仅有一道题,没有小题。一周的时间是可以完成的。

难度
第四次题目集是答题系统最后一次题目集,大体逻辑与前三次保持不变,只需根据题目所增加的信息对代码进行增删。但由于这是继承是多态第一次练习,对于知识点如如何抽象出父类等的不熟悉导致花费的时间较长。第五次和第六次题目集题目改为了电路系统,这套题目的逻辑相比于答题系统更加清晰,主要难点是对物理知识的遗忘如如何计算电阻,导致花费了一些时间在读懂题目和复习物理知识上,但整个设计和编写代码的过程都比较顺利。

二、设计与分析

第四次题目集

本次作业新增内容:

1、输入选择题题目信息

题目信息为独行输入,一行为一道题,多道题可分多行输入。

格式:"#Z:"+题目编号+" "+"#Q:"+题目内容+" "#A:"+标准答案
格式基本的约束与一般的题目输入信息一致。

新增约束:标准答案中如果包含多个正确答案(多选题),正确答案之间用英文空格分隔。
例如:

#Z:2 #Q:宋代书法有苏黄米蔡四家,分别是: #A:苏轼 黄庭坚 米芾 蔡襄
多选题输出:

输出格式与一般答卷题目的输出一致,判断结果除了true、false,增加一项”partially correct”表示部分正确。
多选题给分方式:

答案包含所有正确答案且不含错误答案给满分;包含一个错误答案或完全没有答案给0分;包含部分正确答案且不含错误答案给一半分,如果一半分值为小数,按截尾规则只保留整数部分。

类图

image
image
分析:
在本次设计中先把输入的内容由Split进行分割,再经由Handler对题目、试卷、答卷进行储存,然后通过Agent对照每张答卷上题目的学生答案和正确答案进行对照批改,最后经由Agent进行输出。Question为抽象父类,有三个子类分别对应单选题、多选题和填空题三种题型。
由类图可以看出Agent类没有遵循单一职责原则,其中的方法过于冗杂,应将储存、批改和输出分别单独写为一个类。同时Split、Handler和Agent类的耦合性过强,应进行解耦,如将三者关联关系变为依赖、增加中介类等。

复杂度分析

image
基于Sorcemontor的代码分析:
1.从复杂度分析可以看出此次代码的设计并不是很合理。代码深度Max Depth过深,代码过于繁琐。
2.圈复杂度Maximum Complexity为23,偏高;代码复杂度Max Complexity也过高,其原因可能是在输入时有各种信息,只能通过if语句来分割。
3.Average Stament per Method说明平均每个函数包含的语句数目为3.48,也有些偏高,主要每个类中有很多的构造方法,说明有些的方法写的过长了,没有很好的遵循单一原则。
4.方法调用很多:Method Call Statements为230。
5.缺乏注释:代码注释几乎为0,代码可读性极低,应在日后多加注意。

第五次题目集

家居电路模拟系列所有题目的默认规则:

1、当计算电压值等数值的过程中,最终结果出现小数时,用截尾规则去掉小数部分,只保留整数部分。为避免精度的误差,所有有可能出现小数的数值用double类型保存并计算,不要作下转型数据类型转换,例如电压、转速、亮度等,只有在最后输出时再把计算结果按截尾规则,舍弃尾数,保留整数输出。

2、所有连接信息按电路从电源到接地的顺序依次输入,不会出现错位的情况。

3、连接信息如果只包含两个引脚,靠电源端的引脚在前,靠接地端的在后。

4、对于调速器,其输入端只会直连VCC,不会接其他设备。整个电路中最多只有一个调速器,且连接在电源上。
1、控制设备模拟

本题模拟的控制设备包括:开关、分档调速器、连续调速器。

开关:包括0和1两种状态。
分档调速器:按档位调整,常见的有3档、4档、5档调速器,档位值从0档-2(3/4)档变化。本次迭代模拟4档调速器,每个档位的输出电位分别为0、0.3、0.6、0.9倍的输入电压。
连续调速器:没有固定档位,按位置比例得到档位参数,数值范围在[0.00-1.00]之间,含两位小数。输出电位为档位参数乘以输入电压。

2、受控设备模拟

本题模拟的受控设备包括:灯、风扇。两种设备都有两根引脚,通过两根引脚电压的电压差驱动设备工作。
本次迭代模拟两种灯具。

白炽灯:亮度在0~200lux(流明)之间。
电位差为0-9V时亮度为0,其他电位差按比例,电位差10V对应50ux,220V对应200lux,其他电位差与对应亮度值成正比。白炽灯超过220V。
日光灯:亮度为180lux。
只有两种状态,电位差为0时,亮度为0,电位差不为0,亮度为180。
本次迭代模拟一种吊扇。工作电压区间为80V-150V,对应转速区间为80-360转/分钟。80V对应转速为80转/分钟,150V对应转速为360转/分钟,超过150V转速为360转/分钟(本次迭代暂不考虑电压超标的异常情况)。其他电压值与转速成正比,输入输出电位差小于80V时转速为0。

类图

image
分析:
在本次设计中先把输入的内容由Split进行分割,再经由DataHouse将串联线路中的电器和控制器进行储存,通过Split对所有的电器进行电压的分配,最后在View中进行输出。
根据题干要求设置抽象父类Device,抽象类Furniture和Controler继承自Device,Light和Fan继承自Furniture,LightFluorescent和LightIncandescent继承自Light,FanCeiling继承自Fan,三种控制设备继承自Controler。
View和Split类的耦合性过高,可以设置中介类进行解耦。一些设备独有的方法也可以分解处理作为单独的接口来减少代码的冗杂。

复杂度分析

image
基于Sorcemontor的代码分析:
1.圈复杂度Maximum Complexity为31,偏高;代码复杂度Max Complexity也过高,反思原因是在输出时没有想到高效的排序方法,直接五个循环暴力输出,for循环过多,if语句过多。
2.方法调用很多:Method Call Statements为249。
3.缺乏注释:代码注释为0,代码可读性极低,应在日后多加注意。
4.其他方面大致都在合理范围内,总体上是比较合理的。

第六次题目集

所有开关的电阻为 0。
本次迭代模拟一种落地扇。

工作电压区间为 [80V,150V],对应转速区间为 80-360 转/分钟。电压在[80,100)V 区间对应转速为 80 转/分 钟,[100-120)V 区间对应转速为 160 转/分钟,[120-140)V 区间对应转速为 260 转/分钟,超过 140V 转速 为 360 转/分钟(本次迭代暂不考虑电压超标的异常情况)输入信息:
本次迭代考虑电阻:白炽灯的电阻为 10,日光灯的电阻为 5,吊扇的电阻为 20,落 地扇的电阻为 20
本题不考虑输入电压或电压差超过220V的情况。

输入信息以end为结束标志,忽略end之后的输入信息。

本题中的并联信息所包含的串联电路的信息都在并联信息之前输入,不考虑乱序输入的情况。
只要不造成短路而产生无穷大的电流烧坏电路,都是合理情况,在测试点的考虑范围之内。本次大作业不考虑短路的情况,测试点中不包括短路的电路。

本题不考虑一条串联电路中包含其他串联电路的情况。
调速器的输入端只会直连VCC,不会接其他设备。整个电路最多只有连接在电源上的一个调速器,且不包含在并联单路中。

类图

image
分析:
本次设计在上一次的基础上进行修改。
增加了FanFloor继承自Fan。将串联电路单独设为一个类SeriesConnect,同时增加并联电路类ParalleCon,两者父类均为Device。
将三种控制器控制电压的方式分别提取出,设为三个接口。
新增Agent和PinVoltageHouse类,将原有Agent类中的方法提出,降低耦合性,遵循单一职责原则,使设计更加合理。

复杂度分析

image
基于Sorcemontor的代码分析:
1.圈复杂度Maximum Complexity为37,比上次更高,缺乏合理性;代码复杂度Max Complexity也过高,由于代码中for循环和if循环嵌套太多,应当适当优化。
2.缺乏注释:代码注释为0,代码可读性极低,应在日后多加注意。
3.分支语句百分比:24.9%。逻辑判断较多。

踩坑心得

第五次大作业中最后一个点一直没过,思考过后发现只要有开关断开电路中就不会有电流通过,加上对于所有开关的判断的得以满分。

第六次大作业用Collections.sort方法以进行输出排序,将原来使用多个for和if循环进行排序的代码进行了简化,降低复杂度。
修改前:

修改后:

电路系统中将三种控制器调节电压的不同方法分别提取出来设置为接口,使原本重复的代码得以简化。

第六次大作业中计算并联电阻的方法错误导致前期分数一直很低,当编程与其他方面知识如数学或者物理结合时也要将这些知识弄懂才能正确进行编程。

改进建议

1.减少for和if循环的使用以减少代码的复杂性。
2.每个类都要遵循单一职责原则,每个类中代码不能过于冗杂。
3.设计时要遵循MVC模式,使代码逻辑更加清晰同时降低耦合。
4.代码注释少,可读性差,应当在编写代码时适当增加注释。
5.即使PTA平台已经拿到了满分,但代码中仍然存在许多问题需要进行修改,要在调试中发现并解决问题。

三、总结

1.这三次作业总体来说难度都存在,但在不断构思和修改后都能比较好的完成。通过这三次的作业,我对继承与多态、抽象类和接口有了更深刻的认识。我掌握了单继承(一对多):每个类的父类是唯一的,一个父类可以有多个子类,多个子类只能有一个父类;多层次继承:父类可以有父类,子类可以有子类。学到了方法的重写/覆盖、向上转型、向下转型、接口与接口之间的多继承。

2.练习的过程中我也发现了自己的问题,那就是思维比较固化。编写程序时还是有些地方按照c语言的思维,所以面向对象的思想还是需要在每次的作业中逐渐培养完善。在编写复杂又长的代码时,首先要仔细读题,然后需要有较为完整且清晰的思路并绘制好类图再开始,而不是边写边想,否则最终导致的结果可能是推倒之前所写的代码。

3.在接下来的学习中还需要不断地努力,对前面的不足之处进行改正,在遇到难题时不能畏惧退缩,而是要秉着能解决多少就解决多少的态度去解决问题,并且要虚心向他人请教和查阅资料。

4.学校的java课程设计总体来说结构非常合理。通过线上课程预习、线下课程学习,雨刷课堂实例、动物电器实验和pta答题判题程序作业三管齐下让我对面向对象程序设计有了更深刻的理解。我也相信我能在这门课中收获良多,进步良多。

标签:题目,调速器,代码,Blog,课程,OOP,电压,复杂度,输入
From: https://www.cnblogs.com/LC1212/p/18178215

相关文章

  • 【python】python古代玻璃制品的成分数据分析与可视化(源码+数据+课程论文)【独一无二】
    ......
  • 浙大翁恺《C语言程序设计》课程笔记
    1.1计算机与编程语言设计算法->编写程序->计算机执行程序执行的两种方式1.解释:借助一个程序(解释器),那个程序能试图理解你的程序,然后按照你的要求让计算机执行2.编译:借助一个程序(编译器),把你的程序翻译成机器语言,然后让计算机执行编程语言本身没有解释型和编译型之......
  • 生成式人工智能课程(1)——Goolge云生成式人工智能课程
    Google提供了两个生成式人工智能课程学习路径,官方称为LearningPath。地址为:分别是面向所有人的生成式人工智能入门(Beginner:IntroductiontoGenerativeAI),和面向开发者的人工智能(Advanced:GenerativeAIforDevelopers)1、生成式人工智能入门(Beginner:Introductiont......
  • 【源码】【SpringBoot】Web课程设计学生成绩管理系统的设计与开发
    学生成绩管理系统系统功能开发环境开发技术前端技术后端技术系统展示登录界面学生身份登录教师身份登录源码获取↓↓↓↓:源码可在后台私信联系博主或文末添加博主微信获取帮助系统功能系统用户身份分为三类,学生、教师和辅导员。身份不同登陆后所具有的系统权限......
  • OOP课程第二次blog—23201408—钱文浩
    本次blog,针对第4~6次大作业题目集进行总结,目的在于总结不足、得出经验教训以及做出未来规划。本次blog分为以下几个部分。一、前言:(1)第4次和第6次大作业难度较大,需要考虑的情况很复杂多样,而且对整体设计能力的要求很高,类间关系设计继承、依赖、关联等等,而且因为输入的数据很多,某......
  • 【计算机毕业设计】ssm719精品课程在线学习系统+jsp
    如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统精品课程学习信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个精品课程在线学......
  • 英特尔工业实时计算高级课程推广
    现今边缘端正在向软件定义的解决方案转型,其中一个关键要素是需要在同一系统上支持实时以及非实时工作负载。系统的实时性主要体现在时间同步和及时性:时间同步利用软硬件协调各模块之间时钟,同时与外部设备时钟同步;及时性体现在各模块之间数据处理以及网络数据处理的低延迟。英......
  • 【大数据】Hadoop集群搭建(8249字)
    文章目录@[toc]NAT配置IP配置SecureCRT配置PropertiesTerminalEmulationAppearanceJava安装环境变量配置Hadoop1.0安装建立临时文件夹修改配置文件mastersslavescore-site.xmlmapred-site.xmlhdfs-site.xmlhadoop-env.sh环境变量配置Hadoop2.0安装修改配置文件ha......
  • MySQL DBA项目实战系列培训课程【MySQL 8.4最新版】
    为满足想快速掌握MySQL数据库安装配置与集群的学员,风哥特别设计的一套比较全面的MySQL安装配置与集群项目的数据库课程,本系列共6套课程,内容如下:1)Win2022+MySQL5.7/8.0/8.4安装配置2)Linux平台MySQL8.0数据库安装配置与版本升级3)Linux平台MySQL8.4数据库安装配置与版本升级4)Linu......
  • NCHU-oop-6总结
    写在前面:自己一些杂乱的想法对于这两次写的关于电路设计的编程题,一开始我是抗拒的,这些源自于高中对物理的抗拒。不过还好,在自己又一定代码实现的基础上,合理运用上老师关于设计类的建议,这些代码可以很容易被实现,剩下的就是敲下代码的时间。怎么说呢?老师和同学们一直在强调说要做......