BUAA-OO第一单元小结
引言
四周过去了,oo课程的第一阶段作业也算告一段落。在第一单元的内容中,主题是始终如一的多项式求导,但三次作业要求完善的求导功能一次比一次丰富,难度也逐渐增加,也是费了不少心思。接下来就回顾与小结一下这三次作业,分析一下程序结构、遇到的bug以及总结这第一单元作业给我的感受。
第一次作业(关于幂函数多项式求导)
类图:
度量分析:

程序分析:
由于是第一次作业对于面向对象了解不是很透彻,只是根据面向对象的教材依葫芦画瓢创建了两个类,Term类完成项的求导,Poly类完成多项式的求导。但显然类的封装性并不好,并且class内部的架构考虑的不是很清楚。
但由于第一次作业比较简单,并且当时没有考虑到性能的问题,并没有对多项式进行化简的处理,因此整体程序较为简单。
Bug分析:
第一次作业最困扰我的是多项式判定的问题,一开始采用一个正则表达式判定多项式的正确性,但是发现过于暴力,程序会爆栈,于是又费尽心机使用多种方法判定多项式的正确性。但是由于考虑不全面,互测时几乎全部都是由于多项式判定考虑不全面的bug。
而关于找寻别人的bug,我主要采取阅读代码与测试数据一起进行的方式,在测试数据时进行代码阅读,找出可能的bug。但是主要找到的bug大部分还是因为多项式判定的问题。
第二次作业(关于幂函数与三角函数相乘的多项式求导)
类图:

度量分析:


程序分析:
这一次作业应该是上次作业里最不满意的一次,甚至因为这一次作业非常混乱的逻辑,导致第三次作业进行了大篇幅的重构。这一次作业由于吸取了第一次作业没有化简多项式,导致代码复杂度很高的问题,在修改第一次作业的同时,增加了合并同类项这样的功能。为了化简多项式,我的思路是对要求导的多项式进行化简,求完导后再进行一次化简。于是我将化简写入了Poly类的构造器部分,产生了每次构造一个多项式都要进行化简的问题,使得代码逻辑混乱。
Bug分析:
由于第一次作业的教训,加上第二次作业在中测时就进行了大部分的多项式判定测试,在多项式判定的部分bug就少了很多。主要的bug是在多项式化简的问题上,很多细节没有考虑到位。包括有时候会因为字符串和数组大小的问题,使得程序RUNTIME_ERROR。
在对别人的代码进行测试的时候,由于作业代码量比第一次明显偏大,所以主要采用测试数据的方式。但是发现的bug仅仅停留在多项式判定上,并且大部分是因为化简的问题。
第三次作业(关于幂函数与三角函数的复合函数多项式求导)
类图:

度量分析:


程序分析:
由于第二次作业失败的多项式化简以及代码逻辑混乱,再加上对于类的理解的深入,我对第三次代码进行了大范围的重构,包括多项式的判定,幂函数、三角函数求导,复合函数求导等,我一一构造类来完成这些功能,然后完成项的求导类,最后再将他们运用到多项式类里,完成一个多项式求导。这一次作业性能分占比较小,因此我并没有考虑,仅仅实现了求导的功能。实际上这一次作业代码内在逻辑很容易理顺,但是如果遇上疯狂递归,运行时间较长。
Bug分析:
这一次作业同样在多项式判定上没有问题,但由于很多小细节被忽略,导致代码错误较多。比方说因为没有考虑到+/-()这样的形式造成的问题,再比如在最后化简输出时没有考虑到输出多项式长度只有1的可能等等。而这些细节错误,主要还是由于自己的测试数据不够全面,自己应该认识到仅仅过中测是不够的。
在互测阶段,由于这次的代码需要考虑递归,可以说看别人的代码找bug是比较费时费力的,因此我还是采用测试数据的方式进行,但是不大理想。
第一单元总结
在这一阶段的代码编辑过程中,对于面向对象有了一定的了解,对于一个类的编辑,还是有了一些体会,特别是构造器,在三次作业中类的构造器,逐渐简化,不会再出现第二次作业那种每次构造一个类就要进行很复杂的操作这样子。但是显然,对于面向对象,我还有很多方面不是很清晰,特别是继承这一块,还并不了解。
考虑代码的重构,对于第三次作业,我可能会将最后一部分x以及常数求导那里因为偷懒直接放上第二次作业代码,对这部分进行化简;并且加上求导结果简化的代码,完善代码风格。而第二次作业,我会考虑将化简与构造器分离。
虽然经过这三次作业对于面向对象有了一定的了解,特别是类的封装的部分,但是对于其他的了解还不够深入,因此希望在今后的学习中,能加深自己对于面向对象的了解。
BUAA-OO第一单元小结的更多相关文章
- OO第一单元小结
写在前面 在接触OO课程之前,自己是完全没有学习过java语言的,因此作为一名初的不能再初的初学者,无论是在哪方面都会有许多茫然,但是我相信通过一次次认真的完成OO作业,我对面向对象的理解应该会渐渐的 ...
- 多项式与三角函数求导——BUAA OO 第一单元作业总结
第一次作业 需求简要说明 针对符合规定的多项式表达式输出其符合格式规定的导函数多项式,格式错误输出WRONG FORMAT! 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16> ...
- OO第一单元作业总结
oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
- OO第一单元总结
OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...
- OO第一单元优化博客
OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)\)和\(cos(x)\)的指数作为坐标,在图上画出来就可 ...
- 【OO学习】OO第一单元作业总结
OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...
- OO第一单元(求导)单元总结
OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...
- OO第二单元小结
OO第二单元小结 一.三次作业代码分析. 1.第一次作业 第一次作业是单部电梯的傻瓜调度,由于其过分傻瓜,所以第一次作业我只有两个类,一个main,一个电梯,main类负责不断从输入流中读取命令,如果 ...
- 【作业1.0】OO第一单元作业总结
OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...
- OO第一单元(前四周)作业总结
OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...
随机推荐
- Django知识总结(二)
拾 ● 模型(M) 一 ● ORM(对象关系映射, Object Relational Mapping) 类----一张表 类的实例对象----表中的一条记录 映射关系 ①python的类名对应的SQ ...
- java解析HTML之神器------Jsoup
背景:公司项目要对接第三方商城的商品到自己的商城来卖,商品详情给了个链接url,因为对方的商品详情有他们的物流说明,售后信息,所以要求去掉这部分的代码 @Test public void getIte ...
- 释放jQuery 的$ 的使用权
1.释放操作必须在编写其他jquery 代码之前编写,释放之后就不能使用$,改为jQuery . jQuery.noConflict(); 2.也可以自定义访问符号 var nb = jQue ...
- mongo中的游标与数据一致性的取舍
除了特殊注释外,本文的测试结果均基于 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0 ...
- 使用lua读文件并输出到stdin
io.input("c:\\AudioCom.log") t= io.read("*all") io.write(t) 三行代码搞定,简洁的不像话 io.rea ...
- MySQL80修改密码
mysql> update user set password=password('123') where user='root' and host='localhost'; ERROR 106 ...
- UML作业第三次:分析《书店图书销售管理系统》,绘制类图
一. 类图语法学习小结(类间关系的表示方法) 1.抽象类和接口 我们用关键字abstract或abstract class来定义抽象类(抽象类用斜体显示).也可以使用interface,annotat ...
- python基础语法三
集合: 1.不同元素组成 2.无序 3.集合中的元素必须是不可变类型 s = {1, 2, 3 } #定义集合 s = set('hello') print(s) s.pop() #指定删除 s.r ...
- 【SHELL】:定时任务删除指定目录
现有一个需求,需要定时删除积累过久的目录,并且部分目录不可删除.在此,我们分析了一下该父目录的命名结构:非连续性数字命名,部分目录中包含a.txt文件.如下图所示: 在此,我们对此可作如下操作,获取该 ...
- TFS2015安装、配置
一.安装,参考:http://www.cnblogs.com/WilsonWu/archive/2011/11/24/2261674.html 二.配置,参考:http://www.cnblogs.c ...