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


    多项式求导

    对于多项式计算的认识

    • 总体认识
      多项式是天然的树形结构,理论上所有的多项式都可以用表达式树表示,而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学长的设计模式全解析
    发现可以用工厂思想来生成表达式的各个因子,这一思想期待在之后的作业中学习强化。

  • 相关阅读:
    外观模式
    享元模式
    c#中的抽象类和接口
    装饰者模式
    组合模式
    适配器模式
    springboot 源码篇002## web层自动装配部分源码
    springboot 源码篇002## 自动装配原理
    springboot 源码篇 01
    shell 脚本基础 第二篇
  • 原文地址:https://www.cnblogs.com/yzy11235/p/OO_Poly_Calculation.html
Copyright © 2020-2023  润新知