第4次oo做业

做业概述

做业1:多项式加法

第一次做业理解上并不困难,简言之是一个多项式合并同类项,但对于我这个第一次使用java进行编程的小白,仍是充满了血和泪。java

在此次课程以前,我稍微对java有一些了解,但也仅仅只是一些了解,不只许多基本语法还不清楚,并且对于面向对象更是毫无头绪。好在java的语法与C语言比较类似,因此在第一次做业的时候,简单学习了java的基本知识后(甚至包括如何在eclipse中新建java项目,怎么运行java程序),一边百度,一边写出了第一次做业,但写出来的东西就又引出了另一个问题——什么是面向对象?在第一次做业中,我只有一个java文件,在寝室Android大佬的“点拨”之下,对面向对象有了一个“除了主类至少还得有个其余什么类”的印象,因此在最后写出了一个四不像程序——整个程序有两个类,一个是计算类,一个是主类,主类干的惟一一件事就是调用了计算了的calculate方法,而这个calculate方法不过就是以前main方法换了个名字而已。因此指导书中“注意体会过程式和面向对象式程序的区别”让我困惑了好久,直到拿到了互测的同窗的代码时,我才明白,原来面向对象是这样的啊。程序员

做业2:傻瓜电梯

在上一周学会了java和面向对象的基本操做之后,这一次写出来的程序至少有了一个面向对象程序的样子了,或者说在指导书的“逼迫”下,写出了6个类,从而第一次体验到了写面向对象程序的感受。可是这一次程序写得也很是生疏,一个显著特征就是其中两个各自长达100多行的方法,不由仍是让我回忆起了一丝丝面向过程程序的风格,并且正是因为这两个长度略显不合理,逻辑复杂的方法使得我第三次做业吃了不小的亏。正则表达式

做业3:a little smart电梯

此次做业要求是使用继承和接口,改写一个新的调度类,从而实现请求的捎带。由于第二次的时候采用了模拟的方式,因此这一次没有进行大规模的重写,可是正如上文所说,上周写的两个各自长达100+行的复杂方法,到了这周,我已经快看不懂了!!!因为整个程序的主要逻辑都在这两个方法中,并且因为风格的不统一(尤为是注释风格,有的注释是解释的前面的代码,有的是解释的后面的代码),致使我能够说到如今为止,都尚未彻底理解这段代码的各类精细操做。这也直接致使了上周没有被找出bug的程序修改后,到了这周连公测都错了4个。
做业具体内容分析
=编程

做业1:多项式加法

做业总述

这次做业公测没有被找出bug,互测被找出了一个bug,这个bug属于输入判断时没有判断符号后面是否跟着有效的多项式,致使错误的输入格式却算出了一个结果。而我找的这我的则对于边界处理不伤心,不管是数据超过整形或是单项式数目过大,都会致使其程序崩溃。
|统计量|统计值|
|:-|:-|
|类数量|2|
|方法数量|8|
|代码行数|246|
eclipse

什么是对象

由于以前几乎没有接触过java和面向对象编程,在输入时我就遇到了问题,为何没有一个方法可以像C语言同样输入啊,最后百度了大量资料,终于明白了输入竟然也是用的对象输入
ide


Scanner getInScanner = new Scanner(System.in);
PloyTotal = getInScanner.nextLine().replace(" ", "");
getInScanner.close();

好比这一段代码里面就是采用Scanner对象实现从控制台输入,也是java编程中“万物皆对象”编程思想的一种体现

正则表达式

最开始进行输入时,我采用的是一个字符一个字符读入,而后采用状态机的方式判断输入是否合法并把数据储存至内存中,后来看了助教们给的视频后,我开始去学习正则表达式,结果就发现了一片“新天地”。能够说正则表达式的确是字符串处理的神器,既然已经有人造好了轮子,那么直接使用它不失为一种减少工做量的好方法。在后来的学习中,我也了解到正则表达式本质上也就是一个状态机,也就是说正则表达式的时间复杂度能够理解为O(n),基本上就是最理想的速度了,不管从编程效率仍是执行效率上来讲,正则表达式都是一个不错的选择。模块化

溢出

这一块能够说是oo这门课最基本的一个注意点了,不只有数据自己不能超过所申请的内存空间所能表示的范围,同时数据量也须要注意。好比第一次做业要求可以处理20个多项式,每一个多项式含50个单项式,个人室友一开始将整个字符串进行正则表达式匹配,却发现当大约输入了300个左右的单项式后就会报内存溢出的错误,而我采起了先将字符串分割为各自几个多项式,而后又将多项式分解为单项式进行最后的匹配,这样逻辑清晰,也保证了数据量处于可控的范围内。学习

做业2:傻瓜电梯

做业总述

这次做业公测和互测都没有被找出bug,我测试的这我的由于没有按照助教要求必须处理前100条请求而给判了一个imcomplete之外,也没有找出其余错误。
|统计量|统计值|
|:-|:-|
|类数量|6|
|方法数量|24|
|代码行数|533|
测试

高内聚低耦合

这句话是在上学期学计组的时候高小鹏老师说的,我的认为,面向对象的目的其实就是为了实现高内聚低耦合的目标。在第二次做业中,我第一次编写了严格意义上的面向对象程序(虽然其中还包含有一些面向过程编程的风格)。我我的理解,面向对象的目的就是为了将目标抽象成为一个一个的对象,将其自己的性质和行为抽象成相应的属性和方法,经过将具备相关性的元素集合在一块儿,将其内部的操做封装起来,从而使得程序更加模块化,便于大规模开发。我认为在后面的做业中,咱们也应该秉承着“高内聚,低耦合”的思想,同理,测试时也能够采用模块化的测试方法来提升测试效率和覆盖率。此次做业中的两个超长方法算是面向对象的败类,也直接致使第三次做业的大量返工,但愿之后可以注意。ui

做业3:a little smart电梯

做业总述

这次做业公测出现了4个错误,互测没有出现错误。我测试的同窗对于输入字符串格式判断不够严谨,被我挑出了两个bug。
|统计量|统计值|
|:-|:-|
|类数量|7|
|方法数量|37|
|代码行数|911|

代码规范

以前写程序的时候一直比较“为所欲为”,变量方法命名也很随意,注释也不规范。因此在第三次做业时,须要在第二次做业的基础上进行修改,却发现已经难以看懂上一周本身的代码了,不少变量和方法用的也是乱七八糟的,可是根据本身的理解进行修改后,却发现程序又出现了各类稀奇古怪的bug,可能这就是程序员口中的“祖传代码”吧。因此在第三次做业后,我在网上翻阅了Google的java代码规范,而后将本身的程序彻底按照其规范进行了重写,重写后,不只代码整洁了不少,并且以前一直解决不了的bug竟然在重写过程当中就被发现而后顺便就消灭了。在这里也给你们一个Google 开源项目风格指南做为参考。 心得 = 总的来讲,oo这门课对于我而言是一个全新的挑战。做为一个大学前没有接触过编程,oo以前没有有计划地接触过上百行编程的菜鸡而言,oo是一门须要花大量时间投入其中的一门课程。互测阶段的找bug机制也让我感受耳目一新,可是我也常常听周围的同窗说有人恶意地找bug,恶意申报无效做业,却也让我以为有时这门课进入了歧途,毕竟这门课的主要目的是为了让你们学习面向对象编程技术,交流学习经验的,而不是处处寻找其余人我的信息的。我的认为也有一些办法可以尽可能避免这种状况发生,,好比若是在申诉阶段同一我的有大量bug被申诉,那么应该相应地倒扣测试者的分数;分发测试代码的时候后台自动删掉同窗们不当心上传的.classpath .project文件等。总的来讲,但愿oo可以愈来愈好,也但愿你们可以不忘初心。

相关文章
相关标签/搜索