一、基于度量来分析自己的程序结构

1.第一次作业

UML类图

OO度量

这次作业我写了3个类,其中class Struct是Polynomial的内部类,这个类有2个属性:coe、index,分别代表每个项的系数和指数;Polynomial类的构造方法用来判断表达式是否合法,其他的方法用来拆分项、求导、获取coe和index,化简、output结果表达式,Dx类用来调用Polynomial中的方法,完成程序功能。

2.第二次作业

UML类图

OO度量

从UML类图中看出,这次作业将许多程序功能都放在的一个类Expdeal里面,这样明显不利于程序的维护,也不利于找bug,还有Expdeal类里面的方法的复杂度也很高,根据生成的Complexity表格看,Expdeal.indexspilt(获取每个项的x、sin(x)、cos(x)的指数)和Expdeal.prin_exp1(输出求导后的表达式)的iv(G)(表示一个方法和他所调用的其他方法的紧密程度)和v(G)(循环复杂度)都很大,再就是这次作业由于没有找到很好的优化方法,仅仅处理了sin(x)^2+cos(x)^2=1这样的化简类型,所以程序性能不是很高。

3.第三次作业

UML类图

OO度量

感觉这次作业的代码结构还是没什么太大变化,或者说没有太OOP,依然是判断合法性一个类,求导一个类(没有优化),由于这次作业的复杂度,导致我因为没有重构使得我的代码复杂度进一步上升。本来是想使用接口实现,奈何对于接口的使用不是很熟练,加上作业时间紧迫,最后还是写成了面向过程。


二、分析自己程序的bug

第一次作业的的bug在正则表达式这一块,通过IDEA的调试,发现了正则表达式的括号使用不当导致匹配出错。

第二次作业中,写完程序后随便输入一个数据,控制台就抛出异常,由于IDEA调试的时候matcher.find()总是返回false,被坑了之后我一直以为是正则出了bug,最后才发现是我判断空字符串出错了,查阅资料后发现字符串为空有2种可能:

str == null || str.equals("")

第三次作业由于嵌套的存在,正则表达式无能为力,处理inputExpression的时候主要以字符为单位去判断,这里占据了我写代码的主要时间,在这块,我是写完这个模块就开始测试输入合法性,也是不断的debug。然后求导那一块我写了几个函数相互调用,通过层层递归来实现求导,这里的bug主要是因子求导返回求导结果时的括号问题,如表达式因子求导返回的结果必须写上外层括号。

我的感受就是,当类以及类方法之间的耦合度过高,单个类方法代码量过大时,程序的debug工作会变得很耗费时间,因为此时程序定位一个bug的范围将变大,调试时会执行大量无意义代码才能到达bug所在处,这将极大降低程序的维护度。


三、分析自己发现别人程序bug所采用的策略

前两次作业我主要是根据自己在写代码时构造的一些测试点来对别人的程序进行测试。

第三次作业由于互测的要求,且程序的输出各异,所以我利用对拍器来对他人的程序进行测试。

我会结合被测程序的代码设计结构来设计测试用例,例如程序中使用的正则过长,那么我会特别去分析它正则的bug。


四、Applying Creational Pattern

从这几次作业可以看出,当几个类(如:三角函数、幂函数、常数)有相同的行为特征时,可以采用Builder模式,定义一个接口来创建组合对象。

代码重构的话,给3种因子分别创建一个类,去实现一个含有求导方法的接口,或者是去继承一个抽象类,从而建立代码的层次关系。

转载于:https://www.cnblogs.com/wanzf-bky/p/10603171.html

OO第一单元总结——多项式求导相关推荐

  1. OO_2019_第一单元总结——表达式求导

    一.基于度量的程序结构分析 首先给出Complexity metrics中参数的含义: ev(G):基本复杂度是用来衡量程序非结构化程度的,非结构成分降低了程序的质量,增加了代码的维护难度,使程序难于 ...

  2. 【面向对象】第一单元总结——表达式求导

    基于度量的程序结构分析 第一次作业 类图 代码规模 代码度量 " ev(G)基本复杂度是用来衡量程序非结构化程度的,非结构成分降低了程序的质量,增加了代码的维护难度,使程序难于理解.因此,基 ...

  3. OO第一单元作业总结

    OO第一单元作业总结 第一次作业 结构 OO第一次作业是简单的多项式求导,在这次多项式求导中,仅包含了幂函数和带符号整数的一些简单求导运算.在经过自己的一些简单分析后,我认为第一次作业最重要的部分是判 ...

  4. OO第一单元总结博客

    OO第一单元作业总结 本单元的三次作业内容为多项式求导.第一次作业中,表达式支持因子形式为带符号整数,以x为底数的幂函数.第二次作业中,表达式因子形式在第一次作业的基础上,支持标准三角函数(sin(x ...

  5. 不学无术的下场——OO第一单元总结

    第一单元OO作业总结 第一次作业 ​ 第一次作业的要求是对仅有常数和幂函数的式子进行求导. ​ 由于是第一次接触JAVA,对很多东西都还不熟悉,尤其是正则表达式做得不好.当时我的思路如下: 建立Pol ...

  6. oo第一单元总结~~

    OO第一单元总结~~ 经历了三次oo作业的洗礼,我感觉我的IDEA已经是一个成熟的IDE了,应该学会-(划掉).总之学习面向对象编程是一个思路慢慢转变的过程,最开始的时候我觉得其本质就是封装,类的函数 ...

  7. 面向对象多项式求导总结

    在过去的四个星期中,面向对象的作业以多项式求导为主题.通过这三次作业,我对面向对象程序设计有了一些入门的感觉,这三次作业的设计也越来越有面向对象的感觉,但是看完别人的设计后觉得自己还是有太多东西要学习 ...

  8. matlab对多项式求导,matlab中多项式求导

    1 0.5 0 -0.5 -1 -1.5 -2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 4.对比用多项式函数的 polyder 函数及符号函数中的 diff 函数,求导 x2+2x ...

  9. 多项式乘积求导 c语言,c语言实现多项式求导.docx

    c语言实现多项式求导 #include #include//动态申请空间的函数的头文件typedef struct node //定义节点类型{ float coef; //多项式的系数 int ex ...

最新文章

  1. flask服务器端解析文件包时出现问题,flask + celery 遇到的那些坑
  2. hdu 2531 Catch him
  3. laravel 任务队列_Laravel5.5之事件监听、任务调度、队列
  4. optional java_使用Java时查看Optional数据类型和一些反模式
  5. ajax高效分页查询,基于 Jquery+Ajax+Json高效分页实现代码
  6. 小型团队快速开发方法
  7. Windows 7操作系统优化
  8. mysql delete 数据之后 .MYD文件大小没有发生变化
  9. vivo android 6.0 root,vivo X6 A(全网通)如何获取ROOT权限教程
  10. 2022年PMP考试安排
  11. 如何解决stata数据管理器中变量变红的问题
  12. ERP和SAP是什么意思
  13. mysql 1236错误_MySQL主从失败 错误Got fatal error 1236解决方法
  14. 西奥电梯服务器故障维修,电梯维保须知:西子奥的斯电梯故障分析及解决
  15. HoloLens原理分析和硬件拆解
  16. MATLAB代码:基于非对称纳什谈判的多微网电能共享运行优化策略
  17. 2021最新Android开发者学习路线,已整理成文档
  18. 《白鹿原》读书笔记——纪实的戏剧
  19. NKOJ 2703 (WC 2014)紫荆花之恋 (点分治+平衡树+替罪羊)
  20. Staged Event Driven Architecture (SEDA) 介绍

热门文章

  1. 手把手教你整合最优雅SSM框架
  2. shiro使用WebService进行验证的实现
  3. EasyRecovery数据恢复(U盘)
  4. js判断网页标题包含某字符串则替换
  5. 函数开始处的MOV EDI, EDI的作用
  6. [Python] L1-045 宇宙无敌大招呼-PAT团体程序设计天梯赛GPLT
  7. LeetCode 151. Reverse Words in a String
  8. 【rsync】工作模式及语法
  9. yum是什么?(linux命令)
  10. Oracle diag目录下面的大量trace trc文件