OO第一次博客作业--第一单元总结
OO第一单元总结
面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类。学习的进度又太慢,根本跟不上出作业的速度,导致三次作业的代码都写得很乱,很不面向对象。
1. 第一次作业
1.1 程序结构分析


第一次的作业比较简单,但由于刚刚接触面向对象,程序的结构仍然不太好。整个 project 只有两个类,主类和多项式处理类,且两个类的复杂度差别较大。由插件 MetricsReloaded 的分析可知,多项式处理类中的方法普遍有耦合度过高,判定结构过于复杂。主要的代码量都在输入处理部分,应该将其从多项式类中抽出来,组成一个单独的 InputHandler 类,这样能使层次结构更加清晰。
1.2 程序Bug分析
主要的BUG 集中在当结果为0时无输出和对于类似 '\f' 这样的空白字符的处理。
第一个bug 的出现是因为不细心,忘记对输出进行处理,我用的数据结构是 HashMap,理应在输出字符串为空时输出"0"。又因为写好程序后没有对程序进行测试,完全依赖于评测机,面向分数,没有发现这个简单的bug。
第二个bug 的出现是对指导书的阅读不仔细,没有注意到指导书特别规定了空白字符只有空格和tab,也没有意识到会因为多实现了功能被攻击……
1.3 互测策略
主要依赖于读代码,读代码的读出bug的大头是正则表达式。但第一次很多人用了大正则,直接匹配整个输入,正则表达式的长度常常过百,导致虽然读到bug就百发百中,但效率极低。
2. 第二次作业
2.1 程序结构分析

第二次作业在第一次作业的基础上加了三角函数 sin(x) 和 cos(x),刚开始看起来似乎复杂了很多,但其实也只是公式复杂了一些,实现方法还是比较简单。
结构上和第一次相比多写了一个 HashMap 的 Key 类,因为有三个函数,就有三个指数,需要为HashMap 的Key单独写一个类。
结构上仍然存在耦合度高和判定结构复杂的问题,特定的几个方法过于复杂,很容易出现错误。
2.2 程序Bug分析
因为第一次不细心而遍体鳞伤后,第二次作业在写代码时尽量考虑到了能在输入输出处理上避免的所有bug,但还是出现了一个bug,尽管不是结构上的大的错误,也使我收到了一定的伤害。
这个bug是将项以'*'为分割符分开后,没有完全检测每一个因子的合法性,比如 “sin(x) * ” 这样的样例竟然被放过去了…
2.3 互测策略
吸取上次作业互测吃力不讨好的现象,我在评测区认真学习了大佬们提供的互测方法,写了自己的脚本,手动构造输入,自动对Room里的其他程序测试,获取输出,并计算比对。确实很大地提高了效率,但还是没有针对性地构造样例,又因为这一次大家都认真思考了,命中率不高。(我所在的Room 内一共只出现了8个bug)
3. 第三次作业
3.1 程序结构分析


第三次作业的难度提升了一个大的台阶,前两次对结构层次的要求都不高,毕竟只有两三个函数,+-和*两种组合方式。第三次作业加入了嵌套机制,我的第一想法就是用递归。
结构上刻意根据功能划分出了相应的模块,但层次并不分明,还不是很清楚接口的用法。
总体的复杂度做得比前几次都好,但仍然在表达式类的求导方法中写得很乱,基本复杂度、模块设计复杂度和模块判定结构的复杂度都高得不行,甚至derivation 原先是一个方法,出于方法长度限制得原因我把它分成了两个方法…
3.2 程序Bug分析
主要出现了两个Bug,一是指数的格式判断错误,忘记了指数可以带符号,于是对所有带符号指数都判断为错误。这是一个由粗心引起的致命的错误。
二是处理输入,读到 ’-‘ 号时把表达式分为两部分,应该对后面部分的表达式变号,在变号的过程中没有考虑到指数带符号的情形,于是又出现了一个致命的错误。
虽然两个bug 都出于题目理解不到位,但是如果我的程序更有层次,能划分出清楚的子类父类,特别写一个指数类,就很难出现这样的错误。总的来说还是结构引发的错误。
3.3 互测策略
互测的方法跟上次一样,利用脚本自行构造输入比对结果。比上一次效果更好,因为程序更加复杂,更难考虑到每一种可能出现的错误。
个人总结
1. 正则很好用,lookahead & lookbehind 很好用。
2. 善用接口能使代码变得结构分明,具有美感。
3. 事先的设计比写代码时的思考更重要。
OO第一次博客作业--第一单元总结的更多相关文章
- oo 第一次博客作业
oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...
- OO第一次博客作业
OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...
- OO第一次博客作业(第一单元总结)
Q:菜是绿的,鸡是黄的,那菜鸡是什么颜色的? A:红的,强测全WA了,能不红么. 菜不菜的问题先不说了,认真研究一下这次的题目,以及WA的原因吧. 程序结构简析 三次实验的核心结构都是差不多 第一次的 ...
- OO第一次博客作业总结反思
使用了masteruml插件来生成类图和metrics插件分析代码 第一次作业 1.UML类图 >在第一次作业中,使用了两个类,代码中有没有使用的变量与函数,为平衡两个类的内容,我将输出函数放在 ...
- [BUAA OO]第一次博客作业
第一次作业 第一次进行面向对象的编程,不论是针对数据设计类还是对方法进行合适的归于不同类中,都不是很熟悉.所写出来的程序还是面向过程+有函数的类(虽然现在很大程度上感觉起来也是这样).索性作业难度并不 ...
- [BUAA软工]第一次博客作业---阅读《构建之法》
[BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...
- Java第一次博客作业
第一次博客作业 目录 三次作业题目详情 作业中的错误分析 感想与心得 题目详情 题目1:第一次作业: 类图: 题目2 类图: 题目3 类图: 题目4 题目5 题目6 类图: 题目7 类图: 题目8 第 ...
- OO第二次博客作业--第二单元总结
第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...
- OO第一次博客总结
虽然早在开学之前就已耳闻过OO这门课的威力,也在寒假自学了一些java的语法,但在真正面对OO这样的工程训练时才发现寒假所学的那点语法简直不值一提,也深刻的感受到在这个过程中自己的提升确实很快,毕竟d ...
随机推荐
- javascript基础 之 保留关键字
1,保留关键字 意思是:特定的字符串要么是已经有指代了要么是未来将要有指代,所以取名字不要用保留关键字里的字符串 js保留关键字 abstract arguments boolean break by ...
- Node.js使用jszip实现打包zip压缩包
一.前言 最近有这样的一个需求,需要把两个同名的.mtl文件和.obj文件打包成一个同名的.zip压缩包.刚开始文件不多的时候,只有几个,或者十几个,甚至二三十个的时候,还能勉强接受手动修改,但是随着 ...
- Images corrections preview with lensfun 不同型号镜头预览图 828张 合集
lensfun 目前支持900多种镜头, 但是网上并没有预览图; 闲暇时间做了800多张预览图合集 下载地址 链接: https://pan.baidu.com/s/1crfhoKKZKnxntvNH ...
- Python-选择器Xpath,Css,Re
正则表达式(特殊字符) ^ 开头 '^b.*'----以b开头的任意字符 $ 结尾 '^b.*3$'----以b开头,3结尾的任意字符 * 任意长度(次数),≥0 ? 非贪婪模式,非贪婪模式尽可能少的 ...
- C/C++的20个位运算技巧
一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读&l ...
- NIagara Workbench ( 温度控制)
1.在原来BoilerControl的基础上建立一个 2.检查通过标签构造的报告的时候,在键盘上按下Control键并一直保持的同时按下L键 将会弹窗一个ORD窗口代表定义的参数.同时按下Contro ...
- word 内容控件属性编辑
场景: 别人发给自己一份word模板,基于统一性,里面包含了很多“内容控件”,一般情况下,只需要根据内容控件进行编辑即可,但如果想对内容控件本身做编辑操作,例如删除等. 操作: 单击 文件>选项 ...
- OpenCV-Python教程9-平滑图像
先解释一个单词 blur:使...模糊不清 滤波与模糊 滤波和模糊都属于卷积,不同的滤波方法之间只是卷积核不同(对线性滤波而言) 低通滤波器是模糊,高通滤波器是锐化 低通滤波器允许低频信号通过,在图像 ...
- beta冲刺2/7
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(2/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 做了点商家数据表格 接下来的计划 做 ...
- python全栈开发day112-CBV、flask_session、WTForms
1.Flask 中的 CBV class Index(views.MethodView): # methods = ["POST"] # decorators = [war,nei ...
