初学面向对象

  第一次面向对象编程,还是没能控制住自己把OO第一次作业写成了面向过程的样子。现在我都不愿看那四五重if嵌套的

代码......(简直惨不忍睹)

  当时把功能写全了自己测了几组小数据也没问题,后来用了某同学的20个含50项的多项式发现只用一次正则匹配不行,会爆栈。后来我改成了两次匹配(不过没有限制输入字符串的长度),就没啥问题了。公测都过了,但互测的时候还是被找出了bug,没错压力测试使它爆栈了,说到底还是自己没测全,以及对正则表达式的匹配理解不够深入(盯着代码看半天觉得这么写完船OK啊,所以被爆栈的瞬间我是震惊的)。

  第一次作业代码度量:

(悄悄放一张类图就跑 滑稽.jpg)

   与第一次作业相比,第二次作业难度明显已经不在一个level了,我逐渐开始学习“面向对象”编程。刚看到题目要求的时候我是无比嫌弃傻瓜调度机制的,可开始设计程序的时候才发现傻一点有傻一点的好处,那就是不用考虑太多复杂的情景,写起来比较快。不过在这次作业中我的调度器并没有完全按照指导书的设计建议写command和schedule方法,而是写了work方法管理请求队列和output方法调度电梯运行并输出,并且楼层类似乎也没有用上。说到测试,不得不向大家安利一个“懒人找bug法”就是生成几个三五万的测试用例找几个同学一起跑,然后比对输出,基本上跑两三个样例比对输出都一样的话就没什么功能方面的bug了。接下来就是格式匹配的问题,经过跟同学交流和互测环节,我发现其实大家写的正则匹配表达式都或多或少有些不同的地方,而这也恰恰是最容易出现bug的地方。

  尽管周三晚上7.前一直守在电脑前蜜汁自信地测每一个我能想到的可能出现bug的地方,但是,经历了这次互测我才发现,程序出几个bug也没什么大不了的,因为没有什么比无效作业更令人绝望了(难过.jpg)。是的在这里划重点提醒大家以后提交readme千万一定绝对要删除个人信息!!!否者这次作业无效不说,甚至你都不知道自己还有没有bug。毕竟已经第二次作业了,可能大家都比较谨慎吧,找bug渐渐变成了玩readme文字游戏,虽然这种问题与程序功能设计没什么关系,但是程序说明文档的严谨性也非常重要。

  emmm...类图嘛,第三次作业直接在第二次作业上改了,并且不小心点了保存......所以就不放出来了。

  不得不说,ALS确实比傻瓜电梯要聪明一些,这次作业代码量是噌噌噌地往上长,我在楼层类增加了时间和上行、下行、电梯内楼层灯的属性,重写了调度器的两个方法,其余类基本沿用傻瓜电梯的写法。虽然用了继承、接口和toString方法,但是我觉得在我的程序中,他们似乎没有起到多大作用,但toString还是蛮好用的,省去了很多输出上的麻烦。通过阅读别人的代码,我发现自己的程序在设计上有很多欠缺,比如说我在Request类里面判断输入是否正确,这样其实不太方便debug;还有就是在电梯调度的同时输出,方法分工不明确,也很不利于调试。以及划重点吐槽的是复制粘贴带来的一堆问题,因为偷懒,这次我在多处使用复制粘贴处理代码,有些变量名没有改全,但是编译却没有问题,所以对于逻辑没问题的程序来说,这种bug最难找了(周二上午de了半天才发现有一个变量名粘贴过来忘了改,可以说是相当费时费事了)。这次作业我的bug大多是时间、输出顺序和复制粘贴变量名错乱的问题。

  第三次作业类图:

  第三次作业metrics参数:

  暴露了调度器的work方法圈复杂度高、块嵌套深和参数多的特点。

心得体会:

  只要身体好,JAVA真的可以速成(认真脸)。经历了上学期的祭祖,我决定再也不想熬夜了。敷着面膜熬夜,早上起来贴副眼贴假装昨晚睡了十几个小时的样子,然后泡一杯枸杞继续学习。

  程序功能的实现只是作业的一部分,写完还应该考虑如何优化的问题,metrics能暴露不少程序的问题并提供优化方向。(可当时怎么会想那么多呢,周三晚上7.前bug能de完就喜大普奔了呢)

  稳  住  !  我  们  能  赢  !

原文地址:https://www.cnblogs.com/WENSHASHA/p/8689362.html