引言

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

第一次作业(关于幂函数多项式求导)

类图:

度量分析:

程序分析:

由于是第一次作业对于面向对象了解不是很透彻,只是根据面向对象的教材依葫芦画瓢创建了两个类,Term类完成项的求导,Poly类完成多项式的求导。但显然类的封装性并不好,并且class内部的架构考虑的不是很清楚。

但由于第一次作业比较简单,并且当时没有考虑到性能的问题,并没有对多项式进行化简的处理,因此整体程序较为简单。

Bug分析:

第一次作业最困扰我的是多项式判定的问题,一开始采用一个正则表达式判定多项式的正确性,但是发现过于暴力,程序会爆栈,于是又费尽心机使用多种方法判定多项式的正确性。但是由于考虑不全面,互测时几乎全部都是由于多项式判定考虑不全面的bug。

而关于找寻别人的bug,我主要采取阅读代码与测试数据一起进行的方式,在测试数据时进行代码阅读,找出可能的bug。但是主要找到的bug大部分还是因为多项式判定的问题。

第二次作业(关于幂函数与三角函数相乘的多项式求导)

类图:

度量分析:

程序分析:

这一次作业应该是上次作业里最不满意的一次,甚至因为这一次作业非常混乱的逻辑,导致第三次作业进行了大篇幅的重构。这一次作业由于吸取了第一次作业没有化简多项式,导致代码复杂度很高的问题,在修改第一次作业的同时,增加了合并同类项这样的功能。为了化简多项式,我的思路是对要求导的多项式进行化简,求完导后再进行一次化简。于是我将化简写入了Poly类的构造器部分,产生了每次构造一个多项式都要进行化简的问题,使得代码逻辑混乱。

Bug分析:

由于第一次作业的教训,加上第二次作业在中测时就进行了大部分的多项式判定测试,在多项式判定的部分bug就少了很多。主要的bug是在多项式化简的问题上,很多细节没有考虑到位。包括有时候会因为字符串和数组大小的问题,使得程序RUNTIME_ERROR。

在对别人的代码进行测试的时候,由于作业代码量比第一次明显偏大,所以主要采用测试数据的方式。但是发现的bug仅仅停留在多项式判定上,并且大部分是因为化简的问题。

第三次作业(关于幂函数与三角函数的复合函数多项式求导)

类图:

度量分析:

程序分析:

由于第二次作业失败的多项式化简以及代码逻辑混乱,再加上对于类的理解的深入,我对第三次代码进行了大范围的重构,包括多项式的判定,幂函数、三角函数求导,复合函数求导等,我一一构造类来完成这些功能,然后完成项的求导类,最后再将他们运用到多项式类里,完成一个多项式求导。这一次作业性能分占比较小,因此我并没有考虑,仅仅实现了求导的功能。实际上这一次作业代码内在逻辑很容易理顺,但是如果遇上疯狂递归,运行时间较长。

Bug分析:

这一次作业同样在多项式判定上没有问题,但由于很多小细节被忽略,导致代码错误较多。比方说因为没有考虑到+/-()这样的形式造成的问题,再比如在最后化简输出时没有考虑到输出多项式长度只有1的可能等等。而这些细节错误,主要还是由于自己的测试数据不够全面,自己应该认识到仅仅过中测是不够的。

在互测阶段,由于这次的代码需要考虑递归,可以说看别人的代码找bug是比较费时费力的,因此我还是采用测试数据的方式进行,但是不大理想。

第一单元总结

在这一阶段的代码编辑过程中,对于面向对象有了一定的了解,对于一个类的编辑,还是有了一些体会,特别是构造器,在三次作业中类的构造器,逐渐简化,不会再出现第二次作业那种每次构造一个类就要进行很复杂的操作这样子。但是显然,对于面向对象,我还有很多方面不是很清晰,特别是继承这一块,还并不了解。

考虑代码的重构,对于第三次作业,我可能会将最后一部分x以及常数求导那里因为偷懒直接放上第二次作业代码,对这部分进行化简;并且加上求导结果简化的代码,完善代码风格。而第二次作业,我会考虑将化简与构造器分离。

虽然经过这三次作业对于面向对象有了一定的了解,特别是类的封装的部分,但是对于其他的了解还不够深入,因此希望在今后的学习中,能加深自己对于面向对象的了解。

BUAA-OO第一单元小结的更多相关文章

  1. OO第一单元小结

    写在前面 在接触OO课程之前,自己是完全没有学习过java语言的,因此作为一名初的不能再初的初学者,无论是在哪方面都会有许多茫然,但是我相信通过一次次认真的完成OO作业,我对面向对象的理解应该会渐渐的 ...

  2. 多项式与三角函数求导——BUAA OO 第一单元作业总结

    第一次作业 需求简要说明 针对符合规定的多项式表达式输出其符合格式规定的导函数多项式,格式错误输出WRONG FORMAT! 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16> ...

  3. OO第一单元作业总结

    oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...

  4. OO第一单元总结

    OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...

  5. OO第一单元优化博客

    OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)​\)和\(cos(x)​\)的指数作为坐标,在图上画出来就可 ...

  6. 【OO学习】OO第一单元作业总结

    OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...

  7. OO第一单元(求导)单元总结

    OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...

  8. OO第二单元小结

    OO第二单元小结 一.三次作业代码分析. 1.第一次作业 第一次作业是单部电梯的傻瓜调度,由于其过分傻瓜,所以第一次作业我只有两个类,一个main,一个电梯,main类负责不断从输入流中读取命令,如果 ...

  9. 【作业1.0】OO第一单元作业总结

    OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...

  10. OO第一单元(前四周)作业总结

    OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...

随机推荐

  1. js 表格操作(兼容模式

    用insertRow,insertRow操作表格时,发现在谷歌浏览器中顺序和IE是反的 // 表格新增行 function addTableRow($id,$arr,$rowAttr){ var ta ...

  2. js 数组去重复两种方法一看就懂

    var arr=[1,1,2,2,3,5,2];function uniqueArr(arr){ var data=[]; for(var i=0;i<arr.length;i++){ if(d ...

  3. java-js知识库之二——canvas绘制炫彩气泡

    现在使用canvas绘制气泡,虽说很多人都已经实现过了,可能方法都大同小异,但自己写和看别人写完全是两码事,自己会写的才是自己的,话不多说,直接上代码. 先来一张效果图: 现在上代码,代码有详细的注释 ...

  4. HTTP与HTTPS有哪些区别?

    大纲 这里写图片描述一.前言: 这里写图片描述这里写图片描述先来观察这两张图,第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,第二张是https://kyfw.1230 ...

  5. Python全栈day9习题

    本内容主要为If条件语句和while循环的相关知识. 一.使用while循环输入1 2 3 4 5 6 8 9 10 i = 1 while i < 11: if i == 7: pass el ...

  6. YYY0.1YYY

    XXX0.2XXXZZZ目前提供免费下载和自动更新功能,由于自己的时间有限,就我一个开发,后期持续更新在线听歌.mp4转mp3.高音质下载.全球dj网站免费下载功能!ZZZ

  7. Linux 环境下umount, 报 device is busy 的问题分析与解决方法

    在Linux环境中,有时候需要挂载外部目录或硬盘等,但当想umount时,却提示类似“umount:/home/oracle-server/backup:device is busy”这种提示. 出现 ...

  8. golang对不同系统的编译

    Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能. Mac下编译 # mac编译linux执行文件 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go ...

  9. 马凯军201771010116《面向对象与程序设计Java》第九周学习总结

    一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...

  10. 北大poj- 1034

    The dog task Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3272   Accepted: 1313   Sp ...