久仰OO大名,总是想着提前做点准备,其实到头来还是什么准备都没有做,所以这学期就是从零开始的面向对象生活,也因此遇到了很多的问题。

  • 第一次作业——多项式加减

  第一次作业历来是较为简单的,但是对于面向对象零基础的人来说也是有所困惑,到底什么样子的代码才算是面向对象?初次见识java,完全体会不到面向对象的思想,因而在代码编写中透露出了一股浓浓的面向过程思想,基本就是照着C程序改过来的,勉勉强强写了个Class上去,然而还是main方法干的活多,只在Mult_to_operate类中写了几个简单的操作多项式的方法,而在main方法里输入数据,判断格式。这样子的代码根本就是一个C程序的翻版,毕竟自己当时真的就是java零基础。

  第一次作业的度量和UML图:

  由于是第一次使用正则,理解的不是很透彻,因此发生了正则爆栈的问题,但是为时已晚,也没有想到解决办法,只有使用try-catch大法来如实报告自己的错误,导致最后一个压力测试的测试点没过。对于格式的处理,本想使用状态机来判断,于是将C程序的状态机复制过来,但是立马发现了很明显的错误,没有对最后一位符号进行判断。这也是我在互测时寻找别人BUG的方法,因为我遇到的那个人就是使用状态机来判断格式的正确与否,因此着重考虑了式子的最后一位,最终发现了两个BUG+一个数组越界的Crash。在互测阶段,被报告了一个bug,即多个前导0,而我在正则表达式中只匹配了一个0,这的确是疏忽大意了。

  • 第二次作业——傻瓜式电梯

  在做这次作业时,已经初步了解了面向对象的思想,在作业中也使用了五个类,多个方法去实现,其实对于傻瓜式电梯,如果能够明白电梯运行的原理,就会变的非常简单,无论是楼层请求还是电梯内请求,都是为了到达那一层,因此在运行时只需要考虑电梯要上行至要求的楼层还是下行至要求的楼层就可以了。但是在这次作业中出现了致命的错误,也是极为简单的错误——输入的指令不正确时忘记输出ERROR,其实如果这里没出问题的话公测肯定是全过了,互测阶段被报的BUG也是这个原因。这次作业其实非常简单,由于不需要考虑捎带,完全没有自己一开始所以为的那么困难,而自己在互测阶段也没有能够发现别人的BUG,毕竟这次作业的逻辑很简单。

  本次作业的UML图和度量:

 

  在这次作业中,elevator的内容过少,只有设置楼层和读取楼层,而requestline几乎就是将request重复了一遍,而Floor类是几乎没有什么用,就把他当做主类来运行了,而绝大部分的工作都是由Scheduler类实现,它干的活最多,每个类的方法分布非常不均匀。

  • 第三次作业——可调度电梯

  可调度电梯相比于傻瓜式电梯,也只是多了一个条件,就是能够捎带,而其余的运行还是和傻瓜式电梯一样。

  我个人的做法就是首先将当前指令加入到一个小“队列”中,然后对当前指令进行判断是否存在能捎带的指令,如果能够捎带,就把能够捎带的指令往小“队列”中添加,判断了一遍之后再从当前指令开始再次判断一次,因为在第一遍扫描过程中,最终完成的指令可能已经发生了改变,因而可能有新的指令能被最终指令捎带上,通过这种判断方式,就能够生成一条小“队列”,然后开始运行这条小“队列”,小队列运行完毕后再从指令中寻找到下一条没有运行过的指令,开始创建新的小“队列”。

  本次作业的UML图和度量图如下:

  

 

  这次的代码由于基本是照搬上次的代码,导致在修改时,承接了上次的思想,因而导致Scheduler类更加臃肿了,由于判断失误,而最后时间不充足,没有充足的时间去改正方法,导致出现了两三个代码相似度极高的方法,很是臃肿,其实可以简化很多的代码。

  但是自己在最初失踪没有正确理解到捎带的概念,到底什么时候能够捎带,什么时候不能捎带,上行捎带和下行捎带的区别,这些问题自己的都没有弄清楚,最终在代码中出现了大量的BUG,经过不断的调试,勉强通过了所有的公测点,但是自己也意识到在某个地方仍然存在着错误,倒是对于稍长一点的测试数据就会出现问题,但已经没有时间去调整了,只有在后来才能进行调整,互测阶段被找到的BUG也是由于稍长的指令而出现的问题,初步定位在下行捎带的位置,因为自己在最开始误认为上行捎带和下行捎带是一样的。

  互测阶段所得到的代码又是一个大佬级别,上行下行,基本都测试了,但是还是挑不出任何错误。

  心得体会:

  在OO课程的学习中,逐渐领会到了面向对象的思想,并能够将其运用到代码撰写中,虽然还是比较初步的思想,并没有深入,但是通过课程的逐步学习,已经逐渐掌握。其实对于java这门语言,语法基本不用学习,重要的就是面向对象的思想,否则完全就可以把java当做另类的C程序,那么这样子的java就失去了意义。

  在撰写代码时,有一个清晰的思路极为重要,如果能够首先就将思路理清楚,知道首先干什么,然后再去干什么,同时要弄清楚原理,不能看的迷迷糊糊就急急忙忙的开始写,这样只会在后来的测试中发现更多的BUG,就比如第三次作业,如果能够好好的看清楚要求,在开关门时刻不进行捎带请求,那么后面我所遇到的很多问题都不会出现。在调整程序的过程中也要注意对于代码的改动所产生的其他影响,不能出现把这个BUG修复了,上一个修复了的BUG又冒出来的情况,这样子做完全是就是得不偿失。

  测试程序时,首先要了解程序的运行机制,在每个关键区域都考虑一下是否会存在错误,如数组的边界等。读懂自己的代码容易,读懂别人的代码难,但是只要用心去看,总是能够大致了解到别人的思路,顺着别人的思路去思考,去测试,这样才有可能发现BUG,而一味的靠猜,靠试,是很难发现自己或者对方的错误的。

OO的第一次死亡的更多相关文章

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

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

  2. OO第一单元自白

    Homework 1  简单多项式导函数 对于初次接触的OO,第一次作业已经可以体会到其与面向过程的C语言之间的差别. 我的想法是,建立了Multinomial和Monomial 两个类,分别能够实现 ...

  3. oo作业总结(二)

    概述 和前三次作业相比,这几次作业最大的不同是难度的飞跃.遗憾的是在这难度的变化面前,我自己却没有做好充分的准备,错误的低估了作业难度导致给自己带来了很多不必要麻烦和损失.接下来我将对它们进行说明(度 ...

  4. OO第一阶段总(休)结(养)分(生)析(息)

    第一次作业: 这是一次让我认识到ddl面前潜力真的可以无限大的作业. 一直以为OO是一门和数据结构一样先用几周的时间讲讲Java然后写写”Hello World”小程序再开始讲正课的我(我也不知道为什 ...

  5. oo——第三单元总结

    前言 第三单元是我们学习oo以来第一次接触JML.这一单元的三次作业和以前一样,采用了难度递进的方式,而且前一次作业的设计思路在下一次作业都多多少少有些体现(或者说是在其基础上做出的改进).而且本单元 ...

  6. OO第三单元——JML规格化设计

    OO第三单元--JML规格化设计 JML语言的理论基础以及应用工具链情况 理论基础 JML是对JAVA程序进行规格化设计的一种表示语言,是一种行为接口规格语言.JML整合了Java和JAVAdoc,并 ...

  7. heartbeat单独提供高可用服务

    本文目录:1.简介2.安装heartbeat 2.1 编译安装Heartbeat3.heartbeat相关配置文件 3.1 配置文件ha.cf 3.2 配置文件authkeys 3.3 配置文件har ...

  8. 【黑金原创教程】【Modelsim】【第三章】理想就是美丽

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  9. Unity/C#基础复习(5) 之 浅析观察者、中介者模式在游戏中的应用与delegate原理

    参考资料 [1] <Unity 3D脚本编程 使用C#语言开发跨平台游戏>陈嘉栋著 [2] @张子阳[C#中的委托和事件 - Part.1] http://www.tracefact.ne ...

随机推荐

  1. springboot mybatis 后台框架平台 shiro 权限 集成代码生成器

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.servic ...

  2. PHP中的call_user_func()与call_user_func_array()简单理解

    原文地址:http://small.aiweimeng.top/index.php/archives/52.html call_user_func:把一个参数作为回调函数调用 用法说明: call_u ...

  3. PHP:CURL分别以GET、POST方式请求HTTPS协议接口api

    1.curl以GET方式请求https协议接口 //注意:这里的$url已经包含参数了,不带参数你自己处理哦GET很简单 function curl_get_https($url){ $curl = ...

  4. Android签名验证漏洞POC及验证

    poc实际上就是一段漏洞利用代码,以下是最近炒得很火Android签名验证漏洞POC,来自https://gist.github.com/poliva/36b0795ab79ad6f14fd8 #!/ ...

  5. Noip前的大抱佛脚----Noip真题复习

    Noip前的大抱佛脚----Noip真题复习 Tags: Noip前的大抱佛脚 Noip2010 题目不难,但是三个半小时的话要写四道题还是需要码力,不过按照现在的实力应该不出意外可以AK的. 机器翻 ...

  6. 论文阅读---Reducing the Dimensionality of Data with Neural Networks

    通过训练多层神经网络可以将高维数据转换成低维数据,其中有对高维输入向量进行改造的网络层.梯度下降可以用来微调如自编码器网络的权重系数,但是对权重的初始化要求比较高.这里提出一种有效初始化权重的方法,允 ...

  7. 【LG3240】[HNOI2015]实验比较

    题面 洛谷 题解 30pts 爆搜即可. 100pts 题意描述里有一句:"对每张图片\(i\),小\(D\)都最多只记住了某一张质量不比\(i\)差的另一张图片\(K_i\)." ...

  8. 2991:2011 求2011^n的后四位。

    2991:2011 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 已知长度最大为200位的正整数n,请求出2011^n的后四位. 输入 第一行为一个正整数k ...

  9. TMS320VC5509启动模式选择

    1. TMS320VC5509内部没有存储空间,所以需要外部接flash.如果使用JTAG仿真板子的话,应该是选择USB下载模式,同时EEPROM应该是支持SPI FALSH的.

  10. asp.net core 发布到docker 极简步骤

    1.使用dotnet命令发布项目 2.把发布成功的文件通过scp等工具发布到linux服务器上,在当前目录下新建一个dockerfile 3.使用asp.net core镜像为底包构建一个新的镜像 4 ...