基于度量的程序结构分析

第一次作业

类图

代码规模

代码度量

“ ev(G)基本复杂度是用来衡量程序非结构化程度的,非结构成分降低了程序的质量,增加了代码的维护难度,使程序难于理解。因此,基本复杂度高意味着非结构化程度高,难以模块化和维护。实际上,消除了一个错误有时会引起其他的错误。
  Iv(G)模块设计复杂度是用来衡量模块判定结构,即模块和其他模块的调用关系。软件模块设计复杂度高意味模块耦合度高,这将导致模块难于隔离、维护和复用。模块设计复杂度是从模块流程图中移去那些不包含调用子模块的判定和循环结构后得出的圈复杂度,因此模块设计复杂度不能大于圈复杂度,通常是远小于圈复杂度。
  v(G)是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,经验表明,程序的可能错误和高的圈复杂度有着很大关系。”
——引用自《OO课程中IDEA相关插件的使用》

第二次作业

类图

代码规模

代码度量

第三次作业

类图

代码规模

代码度量



优点和缺点自我评价

我的优点是程序结构构架地比较清晰,方法功能独立,代码中注释写得较为明确;缺点是喜欢用较长的正则表达式,没有对最后的输出结果进行优化。

分析自己程序的Bug

自己的程序可以较好地识别正确的,和有明显错误的输入内容,并正确地计算出结果。但遗憾的是对于一些非直观的,相对于真实计算情境下非正常思路的输入内容的识别力较差,比如+++2019这种类型的输入,我在设计上没有考虑到对这些情况的包容,或者说,对于这类输入的分析、解析没有较好的设计思路。

分析他人程序的Bug的策略

在本单元的程序设计中,我主要采用了以下两种方法去测试他人的程序:
· 根据自己在编程过程中的思考和遇到的问题来对他人的程序进行测试。由于每个人的解题思路和程序构建思路是不同的,所以按照自己的程序逻辑流程可以解决的输入内容,不一定在他人的程序中也可以顺利解决。
· 我假定在进行下一阶段的测试时,他所基于的之前的阶段的代码都已经经过充分测试,所有的回归测试都能通过,也就是说,程序中最禁受不住测试的地方是他根据新要求,进行改编的新代码。那么我会针对本次作业中的新要求的各种表现形式对他人的程序进行测试。

对象创建模式的应用

在本单元的三次作业中,我主要采用了工厂模式的对象创建方法。对Expression/Term/Factor的创建方法都是通过传入字符串,返回一个相应的对象去完成,其中FactorX/.Sin/.Cos/.Const继承于Factor父类。在方法调用上,他们对外的接口都基本只有.derivation() & .toString() 方法,分别返回他们加上括号的的导函数(String)和原始内容(String)。

转载于:https://www.cnblogs.com/LifeIsAGame/p/10594591.html

【面向对象】第一单元总结——表达式求导相关推荐

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

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

  2. OO第一单元总结——多项式求导

    一.基于度量来分析自己的程序结构 1.第一次作业 UML类图 OO度量 这次作业我写了3个类,其中class Struct是Polynomial的内部类,这个类有2个属性:coe.index,分别代表 ...

  3. 面向对象第一单元个人总结

    面向对象第一单元个人总结 这次主要依据作业要求中的四个层次来分析这一个月的学习.从对oo,java一无所知到逐步探索,在作业压力下学习各种知识.现在就是总结的时候了. (1)基于度量来分析自己的程序结 ...

  4. java求导数_OO_JAVA_表达式求导

    OO_JAVA_表达式求导_第一弹 ---------------------------------------------------表达式提取部分 词法分析 ​ 首先,每一个表达式内部都存在不可 ...

  5. 面向对象第一单元总结

    一.对面向对象的理解 有位同学给java的面向对象做了一个形象生动的类比,我觉得很有道理,大概按我的理解如下: 结构的形成 看图之前,我们要先明白,世界上是先有了实体,才有了一步步抽象至以上的体系结构 ...

  6. oo第一次博客-三次表达式求导的总结与反思

    一.问题回顾与基本设计思路 三次作业依次是多项式表达式求导,多项式.三角函数混合求导,基于三角函数和多项式的嵌套表达式求导. 第一次作业想法很简单,根据指导书,我们可以发现表达式是由各个项与项之间的运 ...

  7. Mathematica对函数表达式求导并设置为新的自定义函数

    自定义函数 自定义函数需要注意亮点 1.最好使用 := 而非 = 2.定义时等式左端函数变量有下划线,被称为"空白" Wolfram 系统变换规则最强有力的方面或许是它们不仅能用于 ...

  8. BUAA_OO第一单元总结性博客作业——表达式求导

    一.程序设计思路 在我的三次作业中都采用了类的分层结构,采用逐项匹配,分层求导的思路. (一). 第一次作业中构建了Polynimial(多项式)类,在类的构造器中就完成了对非法空格的判断并对合法表达 ...

  9. python编程求导数_面向对象编程 —— java实现函数求导

    首先声明一点,本文主要介绍的是面向对象(OO)的思想,顺便谈下函数式编程,而不是教你如何准确地.科学地用java求出函数在一点的导数. 一.引子 defd(f) :defcalc(x) : dx= 0 ...

最新文章

  1. Caffe源码中caffe.proto文件分析
  2. 2019 年 ACM Fellow出炉,陈熙霖、陶大程、周礼栋、谢源、李向阳等7位华人学者入选
  3. JVM(3)——Java GC分析
  4. 推荐算法工程笔记:PySpark特征工程入门总结
  5. 二叉树层序遍历(广度优先搜索)基础概念与经典题目(Leetcode题解-Python语言)
  6. 文件流——Excel文件数据读写
  7. 火星首座NFT虚拟房屋以超过50万美元价格售出
  8. AndroidStudio中获得的VersionCode一直为1和VersionName一直为1.0
  9. [Python3] 面向对象编程
  10. li:hover与a:hover的区别
  11. 解读“统一价格分评审方法”
  12. 视频倒立解决方法/USB 视频设备ID:USB\VID_13D3PID_5130MI_00\621DA5E0900000
  13. 相关系数excel_利用【相关系数】理解数据之间的关系
  14. 云边协同的智能制造系统
  15. 2010年5月24日--2015年5月24日
  16. python编程代码画画_如何用python编写一个绘制马赛克图像的自写程序
  17. ClickHouse用户路径分析之桑基图
  18. spark 新闻相识度计算
  19. MAD 最新技能图谱送给大家,收藏再学~
  20. 【ML特征工程】第 2 章 :简单数字的花式技巧

热门文章

  1. 利用 C++ Interop 封装 ISO C++ 对象, 供其他 .Net 语言使用
  2. 技术社区,你真的会混吗?
  3. jQuery事件绑定on()、bind()与delegate() 方法详解
  4. Android中ActivityManagerService与应用程序(客户端)通信模型分析
  5. JS操作DOM元素属性和方法
  6. Javascript之DOM(Document类型)
  7. 入门linux经典书籍--linux从入门到精通
  8. shell批量插入数据
  9. windows下进程间通信的(13种方法)
  10. 任意输入一个整数反转输出