OOP第三次blog作业

OOP第三次blog总结作业 

第七次作业总结

前言

相对于第六次作业,本次作业添加了设备类:受控窗帘,控制类:互斥开关。(总体来说还是对电路的设计情况)。

设计与分析

设计:

  1. 受控窗帘:

    总的来说就是如何实现所有Lamp类工作所发出的亮度lux的总和??

首先我给它添加了一个存储所有灯类设备的属性:

然后设计遍历它计算总和流明:

最后待work完show出相关数据即可(就是用了比较多的if去判断,个人感觉可以另写一个方法来优化show):

  1. 互斥开关:

    在这里设计互斥开关的过程中其实是相对比较艰辛的。通过观察输入样例发现:好像互斥开关总是放在开头或者结尾!!——>这让我产生了直接通过两个开关(只不过带有电阻罢了)去平替它
    这样就可以通过两个开关的反馈获得互斥开关的相关信息进行输出了!!
    屏幕截图 2024-06-29 170017
    主要核心都是围着这两个开关进行的,只不过输出是根据这两个开关反馈的。这样我就很轻松的完成了这一次的大作业。(当然第一次提交没有满分:),只有91分。剩下9分我不知道具体哪里出了问题,可以去看这一部分的踩坑心得。)


    分析:
    类图:其实就添加了Curtain(受控窗帘类)以及MutexSwitch(互斥开关类)
    屏幕截图 2024-06-29 163858
    Metrics图表:
    屏幕截图 2024-06-29 164400
    可以看出来Input类都变红了,可见耦合度和复杂度以及是非常严重了。平均才2.08,而Input类居然达到了61。其实这一直都是硬伤,我也没有具体的处理方法,因为这是处理输入信息的。我要在其中根据不同的输入情况,用正则表达式,来new出不一样的对象,并且对其进行放入相关容器中方便work和输出处理。

采坑心得

说到这个,就记得那9分无法获得的痛苦,我不断去测测试点,通过不断地进行调试,还是没有任何收获。当然也不能完全说没有收获,因为我完善了总电路短路的判断。为最后一次作业打下了坚实的基础。最后我实在找不到是哪里出错了,就去问其他得100分的人,一问,好家伙,原来输出排序是根据字典序排序的而不是自然数的顺序。然后我就进行了更改。

改进建议

我感觉没什么要改进的,因为第一次电器pta大作业其实已经做了比较严密的设计,所以这次作业也是比较轻松的。如果非要说改进的话,我可能没有用到接口,抽象类。并且Input的耦合度实在是高的吓人,如果可以的话,我会尝试更加简化方法,增加单一化功能去解耦。

第八次作业总结

前言

相对于第七次作业,本次作业添加了控制类:二极管:新的要求:要求检测设备是否超出额定电流和显示出设备两端的电压(若有三个引脚,则有三个电压)。由于审题的不严谨,为我这次作业埋下了很大的雷。(我个人感觉没有得高分的问题就是出现在这的,只得了77分,还是有点遗憾的)。

设计与分析

设计:
1.二极管:
由于二极管存在正向导电性。放反时就是电阻无穷大,这不就是断路。我一下子就想到采取和互斥开关相同的策略去进行。对没错,用开关去平替:正向时不就是开关闭合嘛,反向时不就是开关关闭嘛。这样的设计让我省了很多懒!!

2.是否超出额定电流的判定:
这很早之前就设定好了,在总电路working的后会自动设置遍历设备的电流值,这样我就只要在show中进行拓展就可以完成了。当然为了使职能更加单一化,也可以另写方法或者接口来使代码更加简洁。

  1. 电位的设置:
    这是这次大作业最难的地方了,真是成也是它,败也是它了。我本天真地认为算出电势差,然后从220一路相减,不就十分轻松了嘛。但是通过老师的样例,我画出电路图再去一一分析电位发现和我想的有很大的差别。也是非常无奈,没有获得更高的分数。

    分析:
    类图:其实就添加了Diode(二极管类)。至于其他都是在前面的类里面进行方法的拓展或者重写。

    Metrics图表:

    这里的Input类都是老问题了。至于新出现的Line和TotalCircuit出现了60和34的WMC,这就是递归地太深了,可能我没有完善嵌套并联的操作导致的。

采坑心得


我忘记了一个很致命的问题就是引脚问题。由于谁都可以当输入开关,我就会对电位的输出顺序产生差错。我就说怎么有一个用例无论怎么样电位怎么输出的是反的???那时也是挺懵逼的,我发现的时候已经是最后一天的晚上十一点半了,我就算了没进行修改了。

改进建议

  • 优化正则表达式:

检查并优化正则表达式以提高输入解析的效率和准确性。

确保正则表达式能够处理各种边界情况和异常输入。

  • 简化Input类:

您提到Input类包含大量代码,考虑使用更模块化的方法来简化它。

将输入解析逻辑分解为更小的函数或类,每个负责一部分逻辑。

  • 单一职责原则(SRP):

确保每个类和方法只处理它们应该处理的职责。

例如,Output类中的输出逻辑可以进一步拆分到各个设备类中,让每个设备负责自己的输出。

  • 性能优化:

分析代码的性能瓶颈,如在解析输入或模拟电路行为时的效率问题。

考虑使用更高效的数据结构或算法来提升性能。

总结

通过完成第七次和第八次作业,我对JAVA编程的理解更加深刻,特别是在面向对象设计原则和设计模式的应用上。我学会了如何设计一个可扩展、可维护的系统,如何处理复杂的用户输入,并模拟电路的实时行为。同时,我也认识到了在代码设计中需要考虑的诸多因素,如性能优化、异常处理和代码的可读性。

JAVA课程的改进建议及意见

  • 设计原则的深入教学:加强对设计原则的教学,帮助学生更好地理解和应用这些原则。
  • 代码复审的实践:通过代码复审的实践,提高学生对代码质量的认识和改进能力。
  • 性能优化的案例分析:提供更多性能优化的案例,教授学生如何分析和优化程序性能。
posted @ 2024-06-29 22:57  guotianxiang  Views(7)  Comments(0Edit  收藏  举报