第一次作业:

  第一次作业的指导书发下来之后我按着上面的步骤一步一步的做了之后发现项目拉下来了,怎么开始码代码呢...然后在舍友的帮助下才知道怎么建包建类,然后对Java的语法又不是很了解,于是就先把C的代码写了然后照着C程序的代码进行面向过程编程...

第一次作业中未熟练了解到正则表达式的用法,所以在分析多项式时使用了状态机用了很多的if-else也正是这样所以在互测中被找到了一个多项式判断的bug,在公测中也由于没能完全理解指导书也挂了一个。互测中对方的bug貌似我比还多他的error用了小写,这导致他的公测挂了一堆,我得先把公测里一个一个错误样例看完才能去给他找其他不重样的bug,不过还是找到了数组越界、以及正则表达式错误。

第一次作业类图:

第一次作业度量分析:

  从度量分析中可以看出第一次作业写的代码圈复杂度很高,因为这是按照C语言写的面向过程Java,主类有300+行各种循环圈套...但经过第一次作业也粗略的了解了Java是怎么写的,但是对类之间的调用还不是很明白。

第二次作业:

第二次作业类图:

  第二次作业要求使用5个类,我在写的时候先是构思了下该怎么判断同质,然后决定把每个类型相应楼层的指令最后的响应时间存入一个数组中并放在指令类型所对应的电梯和楼层类,并在控制器中完成电梯执行指令前后状态的转化和时间的计算,并把有效指令运行结果存入动态数组中。虽然在第二次作业中是能这样写的,但是这种操作给了第三次作业代码改写带来了巨大的困难。而且在写完所有类之后在整合这5个类时遇到了类之间无法相互调用的问题(小菜鸡只会一直new一个类,然后类中数组的数组又得保存,这调用之间产生矛盾),后来在了解类之间调用规则之后终于把程序跑成功了。

第二次作业度量分析:

  还是一如既往的圈复杂度超标,虽然这次作业中用到了正则表达式进行格式判断,但是由于写程序时逻辑还不够清晰,所以感觉程序有点绕弯。这搞得本应该很傻瓜的电梯一些代码显得很多余。

  而且在判断不符合正则时输出的错误信息忘了加上#号,这导致我公测中有关格式错误的点全都挂了。互测时到是没有被找到bug毕竟这次的电梯比较傻瓜,判断完同质就可以输出结果了,然后也没有找到对方的bug。在这次作业中我收获了类与类之间应该如何调用,以及多种调用方法。

第三次作业:

第三次作业类图:

  这次的作业在第二次作业基础上加入了捎带功能,本以为想日常生活中经常搭的电梯一样,以为捎带的原理很简单。不就是在电梯往目标楼层行驶时有人按电梯,电梯就会停下来嘛。然后看了下指导书给的判断条件,感觉跟自己想的差不多,然而在代码实现时却感觉到力不从心:捎带的判断,捎带的同质判断,以及停靠楼层是否该同时完成多个同楼层指令,这些都得考虑到,在初次写完并能运行后试着运行了几个简单的样例都运行不对...几乎两个测试样例de出一个bug。经过多个样例的洗礼后,感觉才de出了像样点的程序。然而最后还是发现了一个de不了的bug——同层完成多个指令时按指令的输入顺序输出,由于我每次出队时都已经把该指令从请求指令中删掉了所以并不能再判断谁先谁后,当时想到了设个flag然后改完后发现输出全乱了,又想不到什么其他的灵感,于是就放弃了。在进行互测时,我得到的代码逻辑十分的清晰:什么时候该去同质,什么时候该把请求从队列中去掉,他都安排得好好的,而我的代码是在读完请求进入循环后再判断是否同质,这导致原被捎带请求升级为主请求后它是同质的就结束了循环导致队头请求变成主请求,而原本应该是另一个可被捎带请求升级成主请求这样它就能捎带其他的请求,主请求改变后无法对本应该捎带的请求进行捎带,所以输出结果错误,然后还有就是因为这样一个同质判断机制而导致同层多个捎带响应判断错误。我很感谢测试者帮我找到的这些bug。(我原本还以为自己程序就一个bug了...

第三次作业:

  圈复杂度超标*3,由于这次用了多个循环重复遍历请求队列来查找可捎带请求所以导致块嵌套深度过高,不过这三次作业以来我的代码貌似逐渐具有凝聚性(大概吧。这次作业中对继承的使用,以及接口都有所了解。

总结

  这三次作业最后回顾起来感觉都不算是很难的那种,但为什么写的时候却无从下手呢?究其原因还是自身对题目要求上不够清楚,代码逻辑不够清晰,不知道该干什么,没有清晰的一个程序流程图。这就导致在写代码的时候突然不知道下一步应该怎么办,或者是大体上知道该怎么办但是细节上却没有考虑完全。对于de自己的bug一般都是先随便跑几个写代码时脑海中飘过的有一定针对性的样例。然后再测大一点的数据。然后对出现的问题进行分析。de别人的代码也是先用自己想到的那些样例,然后再对其代码进行研读,分析其程序代码流程。并借此了解其代码中各个数组之类的变量的边界,并对这些边界进行边界测试。当读懂对方代码后对方会出现的bug自然也就会被发现。

心得体会

1、不能赶ddl。

2、不能赶ddl。

3、不能赶ddl。

4、只要认真对待就不会没有收获。

OO第一次总结的更多相关文章

  1. OO第一次作业总结

    OO第一次学习总结 1.第一次作业:多项式加法 从未接触过java的我,在从输入输出开始学了几天后,按照C语言的思路,写出了一个与面向过程极其接近的程序. 在这个程序中,存在两个类:一个是Comput ...

  2. OO第一次博客作业

    OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...

  3. oo 第一次博客作业

    oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...

  4. OO第一次阶段性总结

    经过三次作业的历练之后终于来到了写博客这一周.回顾开学来的这一个月,令我印象最深刻也是最累的一门课就是OO了.虽然上学期学过一部分Java,但这学期开学就来的OO作业还是让我在第二周就开始熬夜了.不过 ...

  5. OO第一次单元总结

    第一次总结性博客 16071070 陈泽寅 2019.3.23 一.第一单元所学总结 首先先来总结一下第一单元我所学到的知识以及所感所悟.第一个单元,是我第一次接触JAVA语言,并且再使用了几次之后, ...

  6. OO第一次博客作业--第一单元总结

    OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...

  7. OO第一次博客

    过去的三周里我们完成了表达式求导的程序设计与构造.表达式求导程序,大致思路是实现一个表达式类,支持表达式的输入.求导运算和输出功能.可能的话,还可以增加表达式的化简方法,从而得到更高质量的输出结果.总 ...

  8. oo第一次作业

    前言: 这是一篇面向对象作业总结,作业内容是对多项式进行求导,一共有三个阶段,具体要求不详述,第一阶段只要求’+’连接coeff*x^pow的形式,第二次支持*连接的幂函数及三角函数,第三次则需要支持 ...

  9. OO第一次博客总结

    虽然早在开学之前就已耳闻过OO这门课的威力,也在寒假自学了一些java的语法,但在真正面对OO这样的工程训练时才发现寒假所学的那点语法简直不值一提,也深刻的感受到在这个过程中自己的提升确实很快,毕竟d ...

  10. 2018 OO第一次总结(作业1-3)

    第一次作业1.程序分析 (1)OO度量 (2)类图: (3)分析与评价: 这次作业由于作业整体设计难度不大,因此按照去年暑假上的OO先导课老师讲的设计方法很容易实现一个还不错的面向对象式程序,类与类之 ...

随机推荐

  1. iOS开发--XMPPFramework--好友列表(五)

    上一篇文章,我们讨论了调试和好友模块,这一篇,在引入了好友模块后,我们来说说好友列表的显示. 还记得在上一篇中,我们把自动拉去好友列表给关掉了,所以,我们选择在控制器的-(void)viewDidLo ...

  2. 禁被ping 软件漏洞升级

    禁被ping:echo “net.ipv4.icmp_echo_ignore_all=1”  /etc/sysctl.conf 软件漏洞升级:yum install openssh bash -y

  3. Centos7中hadoop配置

    Centos7中hadoop配置 1.下载centos7安装教程: http://jingyan.baidu.com/article/a3aad71aa180e7b1fa009676.html (注意 ...

  4. npm包管理器相关知识

    关于npm包安装命令的介绍,如下图:

  5. Linux shell 脚本(一)

    一.初识脚本 shell:一类介于系统内核与用户之间的解释程序.脚本:一类使用特定语言,按预设顺序执行的文件批处理.宏.解释型程序创建shell脚本:理清任务过程--整理执行语句--完善文件结构1.任 ...

  6. C#压缩文件夹坑~

    dotNet疯狂之路No.29  今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,只有那些真正的英雄才能见到后天的太阳.  We're here to put a dent in t ...

  7. nodejs加密Crypto简单例子

    加密技术通常分为两大类:“对称式”和“非对称式”. 对称式加密: 就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是 ...

  8. Java 容器 接口

    Java 中容器框架的内容可以分为三层: 接口(模型), 模板和具体实现. 在开发中使用容器正常的流程是,首先根据需求确定使用何种容器模型,然后选择一个符合性能要求的容器实现类或者自己实现一个容器类. ...

  9. poj-1031-fence(不是我写的,我只是想看着方便)

    题目大意: 有一个光源位于(0,0)处,一个多边形的围墙.围墙是“全黑”的,不透光也不反射光.距光源r处的光强度为I0=k/r,k为常数. 一块无穷窄高为h的墙上围墙受到的照度为dI=I0*|cosα ...

  10. 从 MVC 到前后端分离

    从 MVC 到前后端分离 1 理解 MVC MVC 是一种经典的设计模式,全名为 Model-View-Controller,即 模型-视图-控制器. 其中,模型 是用于封装数据的载体,例如,在 Ja ...