作为一个之前从未使用过java语言,主攻面向过程式编程的“面向对象”小白,于是乎从第一次作业开始时利用时间疯狂学习java语言,经过三次作业的残酷洗礼,自己对面向对象式编程多多少少有了初步的了解(前路漫漫,任重而道远)。下面针对之前的三次作业进行总结分析,以及自己这一个月来的心得体会。

第一次作业:一元多项式加减运算


  这次作业可谓是与“面向对象”和“瞌睡虫”对决的开始了。第一次接触这门语言和这种思想,还没有养成相应的思维习惯,于是基本就是按着面向过程的思路来完成的。整个程序只有一个主类、一个主方法(所有处理都放到主方法中去了),值得庆幸的是用到了正则表达式(现学现用)来规范输入。主方法主要是开了四个数组来分别存储结果多项式与输入多项式的的系数和幂,进行相应运算,利用数组下标和幂相等的关系遍历数组来实现升序输出。

  公测被测出的bug是压力测试的分支点,因为输入太长的原因程序没有输出预期的结果。互测被测出的bug是由于判断同一个多项式不能输入相同幂项那里逻辑不够严密,导致同时输入几个相同0次幂项时程序不报错。分析之后程序应该就是不能判断相同的0次幂项,其他没啥大问题,看来自己测试的时候还欠缺考虑啊!

  至于我测出的bug,先是看了一遍被测者的格式规范判断,他也用了正则表达式,但跟我印象中的略有出入,于是就在格式的边缘疯狂探索,终于找到了他的格式错误。还有就是我自己准备的杀手锏(自己一开始写的时候容易忽略的地方),就是第一个多项式前有符号的情况,那位老铁没有考虑到,也被我给逮着了。

  下面是我的度量分析和类图(也就仅仅一个孤独的类而已)

  通过metrics图能够看出main方法的圈复杂度过高,块嵌套深度过深(毕竟自己所有处理都放到main方法去了……)。

第二次作业:傻瓜电梯


  这回照着指导书写了几个类,姑且算是套上了面向对象的外衣,Request类里只有请求的属性和构造方法(这或许是我写的最自豪的一个类了),RequestQueue类里我将数组的计数器和数组当做静态变量使用(emmmm,这似乎悖与数据封装),方法就是将有效的请求存进数组。主类的main方法主要是处理输入字符串和输出错误情况的事情(不敢在main方法里放太多东西了)。而对于Scheduler类,唉!还是来看度量分析吧!

  一如上次,还是这两处变红,看来我的调度器还是写了太多东西,判断同质,输出电梯状态等处理都放到Schedule方法中去了,使用了过多的条件判断语句。

  这回被公测测出了两个bug,一个是没有判断输入时间过大应该报错的情况(真应该抽自己一遍为什么不仔细去看指导书的要求),另一个是没有忽略不同时刻的同质请求,这回真的是自己疏忽了,没有考虑到当一个请求发出时间大于电梯时间的情况,导致时间错误,没能判断出同质。

  这次整八百遍我还是没找出那位老哥的bug,于是就从readme下手,还真找到了一个输出与readme规定不符合的bug(看来检查一下readme也是一件重要的工作啊)。

总体来看,相比上次作业有了一点点进步吧,但是对面向对象的思想了解还是不够透彻,还需要进一步学习。

第三次作业:有一点小聪明的电梯


  电梯耍了一次小聪明,我却不得不用几天几夜的爆肝来应对。虽说表面上只是加了捎带这一个功能,但细细分析似乎捎带跟同质缠在一起,还是挺复杂的。这次的核心部分是再写一个新的调度类来适应新功能。电梯在往上的过程中,每到一个楼层就寻找这个楼层需要捎带的请求,然后执行的同时也判断该捎带请求的同质请求,将其标记,不再执行同质请求,对于执行过的请求,也进行标记,不再执行。

通过度量分析可以看到,我这次的程序虽然实现了功能,但是几乎全部功能的实现都在Schedule_son这个方法里,代码显得臃肿,重复性很高,这是一次很大的错误,值得反省,类之间的分工不均衡,这是目前自己程序的最大问题。

这次公测倒是没有bug,互测阶段被测出的两个bug几乎都是判断条件不充分引起的,因为同质引发的错误,因为代码臃肿,改起来工作量也不小,自己看的眼都花,有这种错误也是自己设计方面的问题,自己的思想还不够深入。

这次拿到的同学的代码很漂亮,没有什么bug,其实互测也是一个学习的过程吧,至少我看到自己的不足。

最后的心得


1.千万千万不要拖,如果因为拖延症而“死”,相信你自己也不痛快。

2.看清指导书的要求和理解指导书的需求,先清楚自己要实现什么才开始构建动手。

3.坚持写完,不要有那种认为没时间了、太难了写不了的思想,坚持写,就算还写不出,也总比放弃好。

4.程序在进行格式检查的时候使用正则表达式是个不错方法。

5.使用try-catch,不要让自己的程序出现crash,这是大忌。

6.在提交之前要仔细检查,自己多测几遍,看一下readme的规定是否与自己程序实现的一致。

OO第一次课程总结分析的更多相关文章

  1. OO第四次课程总结分析

    OO第四次课程总结分析 测试与正确性论证的效果差异及优缺点 测试,即使用测试样例来验证我们的程序是否能完成相应功能的过程.测试数据的产生基于前置条件和后置条件,通过执行测试数据检查方法输出是否满足需求 ...

  2. OO第三次课程总结分析

    OO第三次课程总结分析 规格化设计发展历史 在网上找了好久也没找到合适的信息,稍稍参考了同学的博客.大致如下:最初的的软件并没有形式化方法,随着软件工程的兴起,为了便于工程间的协调管理,人们提出采用工 ...

  3. OO第一次博客作业

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

  4. OO第一次总结作业

    第一次OO博客作业 前言 面向对象课程已经经过了4周的时间.前三次作业全部是关于多项式求导的相关内容,内容由易到难,同时我也开始逐渐深入感受学习面向对象的各项特征,逐渐将自己的编程风格从C向真正的面向 ...

  5. OO第一次作业总结

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

  6. oo 第一次博客作业

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

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

    当我满怀期待叩开OO的大门,却发现宝藏藏在层层阻难之后 第一次作业 1.度量分析 >关于第一次作业的metrics图分析没有出现标红的McCabe Cyclomatic Complexity或者 ...

  8. OO第二次课程总结分析

    前几次的作业都是单线程的,总体来说和以前的思维模式和调试等存在着一定的挂钩,在设计上整体难度还不算太大,这次开始了多线程编程,难度可以说是质的飞跃,构思上所考虑的不止一点两点,在整体的基础上还要考虑线 ...

  9. OO第一单元总结分析

    综述:本模块的内容为表达式求导,目的是通过不同项的嵌套四则运算求导这一基本思路熟悉面向对象的继承与接口机制. 一.三次作业总结分析 1.第一次作业: 1.1 作业分析 盼望着,盼望着,鸽了一年的oo终 ...

随机推荐

  1. 【源码分析】FastJson全局配置日期格式导致@JSONField(format = "yyyy-MM-dd")注解失效

    出现的问题 我全局配置的时间格式是:yyyy-MM-dd HH:mm:ss @JSONField注解配置的时间格式是:yyyy-MM-dd 最终的返回结果是:yyyy-MM-dd HH:mm:ss 问 ...

  2. hdoj1043

    8数码问题有解:除0外逆序数%2相等.16数码有解:除0外,如果0的行数相差奇数个,逆序也差奇数个,vice versa.

  3. Spring Batch 背景

    在开源项目及其相关社区把大部分注意力集中在基于 web 和 SOA 基于消息机制的框架中时,基于 Java 的批处理框架却无人问津,尽管在企业 T 环境中一直都有这种批处理的需求.但因为缺乏一个标准的 ...

  4. filebeat配置文件

    filebeat主要用于收集和转发日志.filebeat监视指定的日志文件和位置,收集日志事件,并将它们转发到es或logstash进行索引. 安装  官网:https://www.elastic.c ...

  5. 解决无法安装Microsoft .Net Framework 3.5

    如果解决不了,试试我的方法吧,我也在网上找了好久,最终在本地解决了 所需工具:dism,和Net Framework 3.5,已经打包 链接:https://pan.baidu.com/s/1nKok ...

  6. ubuntu18.04安装jdk1.8.0_11并配置环境变量.md

    参考:https://www.jianshu.com/p/95f075761dc0 由于安装文件免安装程序,故只需要将对应文件复制到相应目录,然后配置环境变量即可: 1.移动文件到指定目录 (1)在/ ...

  7. 『C++』STL容器入门

    最近在学习opencv,因为C++基础很烂,所以遇到了不少问题,其中STL模块也是没少接触,特此简单了解一下STL的容器类型(主要是Vector)和迭代器的简单用法. C++ STL(标准模板库)是一 ...

  8. Apache commons(Java常用工具包)简介

    Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...

  9. iptables -F 与 -X 区别

    test: 1.iptables 初始化 2.iptables -X (第一次) 错误原因是自定义链表(test)不为空 3.iptables -F 4.iptables -X ok,实验结束 实验报 ...

  10. java之collection总结

    Collection 来源于Java.util包,是非常实用常用的数据结构!!!!!字面意思就是容器.具体的继承实现关系如下图,先整体有个印象,再依次介绍各个部分的方法,注意事项,以及应用场景.   ...