OO第四次作业
第一次作业:
因为初次接触面向对象编程还不熟悉,所以第一次作业采取了面向过程式的编程方法,将所有代码写在了一个类里。虽然基本完成了要求,但是圈复杂度过高,说明程序代码质量较低,难以测试和维护。
我第一次作业的整体思路就是直接将整个多项式用一个超长的正则表达式来匹配,这样可以从在开始时就过滤掉很多不正确的输入格式。但是我没有仔细阅读指导书,导致多项式相减得0等边界情况没有考虑到,未通过公测。
我用公测的样例取边界数据测试匹配到的同学,没有发现bug。
第二次作业:
第二次作业因为自己蠢的原因到了截止时间没有提交上去,变成了无效作业。虽然是无效作业,但是还是得找出自己的不足。这次的程序块嵌套很高,一段时间之后自己看都觉得头晕。应该在写之前组织好整体的思路,不要想到哪里就写到哪里,导致容易出现各种各样的错误,又不好修改。
这次的傻瓜电梯程序虽然名叫傻瓜,可是也比我强一些,我没有考虑全同质请求的各种情况,导致写出来的电梯比傻瓜还要差点。因为无效作业,我有点回避这次的程序,导致bug也没有完全修改好,也变相提高了之后作业的难度。
第三次作业:
第三次作业可以说是前两次作业的综合——但却是缺陷的综合。这次既有圈复杂度过高,又有块嵌套过深,可以说是好的没学,坏的都学会了。这次的作业对于我来说难度提高了一个档次,捎带请求的处理让我想了好一阵子,结果到最后还是只能完成一小部分样例的正常输出。原因有第二次无效的影响,但是主要还是自己的水平不够。这次也因为各种要求慌了阵脚,导致与第二次作业相比甚至有些倒退。可以说完成度不高。我之后会继续修改调试。
这次也检查了匹配到的同学的程序,可是除了公共样例外基本没有什么错误。我想我需要提高自己的测试能力,这样对自己也算是十分有好处。
心得体会:
快没时间的时候要把写好了的程序先交上去,再考虑细枝末节。
对于函数复杂度过高的情况要尽量降低。方法有提炼函数、替换算法、分节条件表达式、合并条件式、合并重复的条件片段、移除控制标志、将查询函数和修改函数分离、令函数携带参数、以明确函数取代参数。
而面对过深的嵌套时,应该减少嵌套层数。条件判断的代码块不要跨度太大,相隔太远. 通过就近处理各种情况来增加可读性.同时当你的循环和分支超过 2 层时考虑重构.还要考虑将嵌套的逻辑分为独立的函数。比如, 如果你在一个循环中对一些对象进行处理, 这其中的每个对象都包含一个列表 (比如一个有着重复字段的协议缓冲区), 那么你可以定义一个函数来处理这里面的每个对象,而不是使用一个两层的嵌套循环.
经过了三次作业的洗礼,我觉得还是要多花时间在整体的思路和设计方面。只要能够把一种可行的方案完全构思出来,写程序就会明确的多,也简单得多。我现在所欠缺的就是这种大局观,在动手之前,一定要多动脑,有一个目标。我之前的这种写到哪是哪的想法一定要舍弃。还有就是自己对待作业的态度。要对作业多上心,不会的多去问,多去学习,提高自己的水平。马上就要迎来多线程电梯的作业,在第三次作业上更进一步。老师助教都说这次是个不小的挑战,我也已经准备好了面对它。还有重要的就是要努力提高自己的测试和debug能力,让自己写出来程序先要完成所有的基本要求,然后再在各个方面加以完善改进。