多项式求导--三次作业小结

多项式求导

对于多项式计算的认识

  • 总体认识
    多项式是天然的树形结构,理论上所有的多项式都可以用表达式树表示,而Java中的继承和接口方法可以很轻松的递归嵌套建立一棵表达式树。

  • 分阶段认识

    1. 从ArrayList到HashMap
      在第一二次作业中,多项式的形式相对简单
      由相加减的项和系数,和项中仅有简单幂次相乘,组合
      因而项和幂次为Key,系数为Value的HashMap是组织这种数据最好的数据结构。

    而在这次数据结构的转变中,初次接触到了extend override等概念,了解到自定义类的方法,也学习了部分HashMap库。
    学习资料记录如下浅谈Java中的hashcode方法

//Key
    private BigInteger xbasePower = BigInteger.ZERO;
    private BigInteger sinPower = BigInteger.ZERO;
    private BigInteger cosPower = BigInteger.ZERO;
  1. 从线性表到表达式树
    第三次作业,难度复杂度较前两次大了很多。
    表达式中嵌套表达式,之前采用的单分支单一结构的线形表,已经很难解决表达式嵌套表达式的递归结构。
    在离散数学、数据结构中,我们学习到“树是天然的递归结构”。
    而指导书中的描述,也很清楚的将表达式,描述为分支+层次的结构,因而表达式树是确定需要使用的。
确定了这种数据结构,剩下的就是结构实现的问题了。
通过学习花花大佬的代码,缓慢且艰难的写出这次表达式作业。(对于接口和继承的总结见之后博客)

三次作业代码分析

分析工具

  • IDEA 类图
  • DesigniteJava
    相关标准:
    • LOC (Lines Of Code – at method and class granularity)
    • CC (Cyclomatic Complexity – Method)
    • PC (Parameter Count – Method)
    • NOF (Number of Fields – Class)
    • NOPF (Number of Public Fields – Class)
    • NOM (Number of Methods – Class)
    • NOPM (Number of Public Methods – Class)
    • WMC (Weighted Methods per Class – Class)
    • NC (Number of Children – Class)
    • DIT (Depth of Inheritance Tree – Class)
    • LCOM (Lack of Cohesion in Methods – Class)
    • FANIN (Fan-in – Class)
    • FANOUT (Fan-out – Class)

第一次作业

  • 代码架构--类图分析

    homework1_UML

  • 数据分析

h1_method

h1_type

第二次作业

  • 代码架构--类图分析

    homework2_UML

  • 数据分析

    h2_method

    h2_type

第三次作业

  • 代码架构--类图分析

    homework3_overview

    homework3_binop

    homework3_factor

  • 数据分析

    h3_method

    h3_type

三次作业总分析

当我们对基本机制还一无所知的情况下,我们就必须退而求助于统计学。

从类图的复杂度可以看到,三次作业的难度是逐级增长的。

但是从几次数据分析来看,对面向对象的认识也越来越深入。

发现bug与debug

  • 自我测试
    在读题时,构造出一系列覆盖性小型测试集
    借助于shell和python,写出了自动的黑盒测试,也就是随机性大面积测试集

  • 互测

    • 第一次互测 认真的阅读了对方的代码并学习,发现bug主要集中在正则表达式和输出部分
    • 之后两次互测 由于冯如杯等项目原因,没有认真互测,在之后的学习改进
  • Bug修复
    Bug主要有两个来源,WRONG FORMAT和优化性能导致问题。

    • WRONG FORMAT! 对于format问题,思考不充分,而且也不够重视,但是在听了荣老师对WRONG FORMAT造成的航天史上的几次危机之后,在之后的编程中会格外注意,并且加强测试。
    • 优化问题,优化之后测试不充分。

关于设计模式的思考

三次作业写完之后,算是把Java语法过了一遍。

看了Neo学长的设计模式全解析
发现可以用工厂思想来生成表达式的各个因子,这一思想期待在之后的作业中学习强化。

posted @ 2019-03-27 14:49  yzy11235  阅读(843)  评论(0编辑  收藏  举报