始入OO课程的殿堂,初识面向对象的奥妙——OO第一次博客总结

当我满怀期待叩开OO的大门,却发现宝藏藏在层层阻难以后正则表达式


 

第一次做业算法

一、度量分析编程

 

>关于第一次做业的metrics图分析没有出现标红的McCabe Cyclomatic Complexity或者Nested Block Depth,但笔者在第一次做业后也反思了本身的问题:在解析多项式将其中的数据取出时并无设计一个很好的方法,而是繁琐的if-else判断和while语句,代码的嵌套现象仍是比较严重的。数组

二、类图学习

>第一次做业刚刚学习JAVA,对于类与对象的概念还不是特别清晰。因此很容易看到笔者只分了两个类,并且在方法的分配上并无作的很平均,在ComputePoly类中仍是进行的太多的操做致使此类太过于冗杂。但好在第一次设计我便将计算等部分功能放在了Poly类中,也算是分担了一部分的职能。测试

三、关于BUG优化

  OO的第一次做业,也是笔者第一次去编写一个完整的JAVA程序。因为要从长期的C语言的怀抱中挣脱出来,因此教程也要求咱们在写JAVA面向对象编程的同时写一份C语言的面向过程式代码,在对比中去深刻感觉和理解面向对象的思想。此次做业是多项式的加减法,总得来讲设计难度不大,但须要注意的细节不少。我分别被公测和测试者各找到一个bug,公测的bug是当某指数在多项式曾出现过且在计算过程当中系数和为0时,笔者的程序将本不应输出的系数为0项输出了出来。其中的关键就在于笔者将数组中的值初始化为10000,致使在出现这种状况时反而知足了输出的条件,使这种特殊状况发生了错误。但追其根本,还是程序先后设计不够统一完备,而这种特殊状况的错误就是程序矛盾性最好的体现。而做为被测试者此次互测被测出来的bug则是正则表达式的问题。确实在此次做业当中正则表达式的编写是一块重要而又繁杂的部分,为了不表达式太过冗长并且防止爆栈,笔者已经将格式匹配的正则表达式用split分为两部分,但仍是被测试者找到了一个表达式中符号位置错误而不报错的bug。自觉得在测试格式方面做足了准备的笔者没想到本身的正则表达式仍然存在漏洞,不由感叹本身离真正的严谨还差的很远。
  而做为测试者,第一次笔者拿到的程序公测就Wrong了不少,待我把他所错的公测样例一一看过以后难免为此人感到一丝惋惜:基本功能彻底没有问题,但细节与特殊状况的处理上稍差一些,因而笔者将测试的重心放到了他的正则表达式与对于特殊状况的处理上。在仔细分析他的正则表达式和一些特殊处理,以及剔除他公测已经错误的bug分支以后,笔者仍然发现了他在正则中并无卡多项式的个数以及单个多项式中的项数,并且没有对于0多项式的特殊输出0,并且没有处理过的单纯输出{}。这就是第一次做业中笔者与bug的恩怨情仇。spa


 

第二次做业debug

一、度量分析设计

 

>不一样于第一次做业,当来到傻瓜电梯的时候McCabe Cyclomatic Complexity和Nested Block Depth出现的标红的状况。McCabe Cyclomatic Complexity 表示圈复杂度,因为刚刚开始作项目因此在为各个类分配职能的时候并无作到很均匀,致使Schedule类中承担的职能太过于多,致使圈复杂度出现了超标的现象。而Nested Block Depth表示嵌套块深度,主要表示了if-else语句等循环嵌套现象的存在状况。而笔者对于输入的处理仍然沿用了第一次做业暴力的判断与解析方法,致使嵌套现象严重。

二、类图

 

>因为笔者遵循了上课老师PPT以及指导书中的建议,因此此次的类图调用关系仍是至关清晰与明确。但同时也能看出来在Scheduler类中并无去分不少的方法,而把许多不一样的操做强行放到了scheduler方法中,致使了上面metrics分析出现的问题。另一个问题就是程序的复用性仍是太多,不少相同的代码没有很好的去进行分类以及封装,这方面的不足我相信也会经过不断的努力去弥补作的更好。

三、关于BUG

  不管是相比于第一次做业状况繁杂仍是第三次的捎带电梯,第二次傻瓜电梯的调度问题我的觉的彷佛简单了很多。因为只是单纯的一条条执行请求,因此也不存在繁琐的请求关系。固然笔者的第二次做业在公测或互测中也没有被发现bug的存在,同时笔者拿到的代码也是至关完美,没有一点纰漏。因为此代码功能简单也不存在任何问题,故原本准备了虽为数很少但足够完备的测试样例想要在代码的边界状况等方面作些文章,缺被“千山万水老是绿”的AC而折服。


 

第三次做业

一、度量分析

 

>由上图能够发现第三次做业的状况和第二次做业的状况几乎彻底相同。这是由于笔者的scheduler_ALS大部分是与上一次做业的scheduler同样,而且又加入了对于捎带处理的操做。致使嵌套程度原本就很高的程序显的过于臃肿(时间有限,没有充足改善),而圈复杂度也没有丝毫的下降。又这几回做业的metrics分析能够深入地告诉咱们程序封装以及简洁的重要性,像笔者前几回的代码并无很好的作到这一点,因此在未来的做业中但愿能够有所改进。

二、类图

 

>第三次的做业根据要求使用继承和接口来更好的控制elevator,其余类并无实质上的改变,都只是小的修修补补。此次做业虽然在处理同质、输出、toString等方面作了一些封装的尝试,但程序上述的问题仍然存在。但总体思路仍是比较清楚的  -_- 。

三、关于BUG

  在通过平淡的傻瓜电梯以后,电梯的捎带问题又掀起了一阵波澜。此次做业投入的时间与精力也是最长的,笔者也给本身作了许多的测试。但反映出一个重要的问题就是因为难度的上升笔者将测试的重点彻底放在了测试捎带这个功能上,从bug树中每一种状况,到多个100行的测试完备功能的代码,再到3w,5w的超强测试样例,在一次次修正与补丁之后程序的功能终于完善了。但我却忽略了一个致命的问题,对于不符合规范输入的请求的输出格式错误,而愚蠢的笔者居然没有去进行测试致使公测的错误,总有种捡了芝麻丢了西瓜的愧疚心理。固然吸收经验,避免遗漏基础与细节也是至关重要的。并且在后来的自我反思中笔者发现了另外一个小bug,就是当处理STILL类的请求时判断同质遍历的初始变量是0,也就是从第二个STILL开始程序会将请求自己也当作同质请求。虽然侥幸没有被测试同窗找出这个小bug,但笔者的心里仍是有点后怕的。-_- 而此次笔者拿到的代码做业与第二次做业同样优秀,笔者彻底按照给本身代码测试的方法,从一条条bug树类样例到超长的功能测试代码都没有找到这份做业的错误。打开代码分析其正则以及各种输出的格式方面也一无所得。致此,第三次做业的bug之旅也就到此结束了。

 


 

 心得体会

1.刚刚步入JAVA和面向对象的世界,虽然也见识过不少dalao对于代码的精致封装,但真要本身在有限的时间内既要完成代码又要有良好的设计着实对于我这只小caiji来讲还有点困难。到仍然要去不断进步地去划分每次做业中的类,运用好封装相当重要。
2.我在完成此三次做业的时候就已经想到应该先将整个程序的思路彻底想清楚并大体给本身画一张相似于类图的设计思路,尽可能细致,清楚。这样会大大减小在以后开始写代码和debug的时间。但我可能作的还不够,尤为是第三次做业,在写完以后bug仍像浪潮通常一波又一波侵袭着我。
3.关于调试与debug,我的认为虽然JAVA中单步调试很方便也很简单,但有时单步调试并不能真正反映一些代码的细节与内涵问题。因此在不少状况下print式debug大法仍是颇有必要和实用性的。我建议二者要结合起来灵活使用,可能涉及到更加细微的地方使用print更能说明问题。但无论怎样,不管用什么方法,快速而准确地找出bug且明白错因才是最重要的也是最终的目的。
4.关于时间的分配与利用上,笔者有作的好的方面固然也有作的不好的一面。每次周五就已经布置的做业笔者都拖到周一去开始动工,虽然启动晚可以看到更加完善合理的指导书与issue,但总体进度的拖沓仍是致使了熬夜的出现。而我的认为比较好的一点是笔者在开始项目的时候去把全部的工做作了详细的时间规划与进度要求。好比思考并画出思路图的时间能够说应该是整个做业过程当中最长的,其次是写完程序后的debug和测试的时间,真正完成主要代码的时间很短,而这也正符合了思路清晰完成较快的一向原则。随着做业难度的不断增大与深刻,在从此几回做业笔者吸收熬夜的教训,尽早去动工着手做业。
5.笔者认为前三次做业不但将咱们从面向过程式的编程拉到面向对象上,一样教会了咱们处理细节问题的重要性。其实在互测过程当中不管是笔者本人仍是其余不少同窗,自身代码功能考虑的很全面,测试也很完整,但在不少格式方面或者指导书中不起眼的小规范上却翻了阴沟。这深入地警示着咱们不能只光顾着代码功能的完善,而是要以更加缜密的思惟去应对一切代码中可能出现的问题与状况。而这同时就要作更加完备的计划与测试,每出现一种新状况或边界问题就要加入到本身设计的流程图中,将问题和本身的代码和谐地融为一体,这样才能更好的避免细微错误的出现。
6.Emmm 最后就谈谈互测吧,毕竟有很多人从第一次做业开始就吐槽OO的评测体系,笔者这里仅仅发表一些我的见解。笔者倒认为互测实际上是一种很培养你们读代码以及测试能力的。为了写出他人便于阅读的代码,咱们不断的在完善本身的编程习惯好比写尽可能详细的注释,将代码分装到清晰明了。同时你们也能够从分配到的代码中学习到不少的东西,好比规范的编程风格与更加优化的算法等,相信OO互测自己的意义也体如今这里。因此笔者在这里想告诉你们的是咱们能不能将关注点更多的放在双方代码优秀与否和互相学习切磋上面,而不是有一种“尔虞我诈”的既视感。

 


 

写在最后

  ~~总而言之,从刚开始对面向对象这个概念都懵懵懂懂,到如今三次做业后的略知一二,通过了几个午夜的洗礼,你们也算是逐渐正式步入了OO的你们庭中。在此感谢在完成过程当中帮助过个人同窗以及在互测过程当中对我程序认真负责的测试同窗。但愿咱们可以正视这门课程的真正意义所在,共同努力共同窗习共同进步,借鉴彼此。最后祝你们JAVA越学越6,代码越写越美,OO越肝越牛逼。

相关文章
相关标签/搜索