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基础-02
django的介绍: Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西.为了达到这个目标,Dj ...
- 手把手教你如何使用Cocos2d Console 进行html5项目发布
手把手教你如何使用Cocos2d Console 进行html5项目发布 1.首先需要先安装Cocos2d Console运行需要的工具. 详情参见 这篇文章 http://www.cocoach ...
- 作为新手在学习SSM+Easyui过程中遇到一系列问题
对于初学SSM来说,如果不熟悉SSM中SpringMVC对数据处理,会造成很大的困扰, SSM中对前台页面放在WEB-INF下,对于读取外部信息,例如导入easyui的js文件.以及不能直接进行跳转. ...
- js实现图片局部放大效果
图片局部放大效果结合的知识点主要是DOM的操作,以及事件的应用,所以首先要对DOM的操作有一定了解,其次能对事件的应用有一定的累积. 如上图,可以看到,这是放大镜的基本效果,主要分成左右两个部分.左边 ...
- response导出Excel(一个新手的记录,可以时常查看,以免自己忘记)
HttpResponse response = HttpContext.Current.Response; response.ContentEncoding = System.Text.Encodi ...
- Beta冲刺 5
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10129059.html 作业博客:https://edu.cnblogs.com/campus ...
- vue路由的懒加载
一.懒加载 也叫延迟加载或者按需加载,即在需要的时候进行加载, 二.为什么要使用懒加载 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要 ...
- 我的学习目标(目前已初步学习完Java语言基础)
操作系统.尤其是内存/线程/进程方面 计算机网络协议,重点关注 TCP/UDP/HTTP. 数据结构与算法. 数据库 设计模式,熟练掌握常用的几种设计模式. Java语言基础.熟悉java语言基础,了 ...
- django websocket
1.dwebsocket 2.等框架都是错误的 3. django/channels 才是正确姿势 555 4. pip install -U channels 完成后,您应该添加channels到 ...
- 作为程序员你不知道中国互联网300强你就OUT了!
很多程序员们工作一段时间之后,都想跳槽到综合实力更强的公司以获取高薪资或者接触到前沿的技术,但是哪些行业值得我们投入大量的时间,哪些公司属于我们行业中的佼佼者呢, 那么小编给您分析下2018年中国互联 ...