1.HomeWork1

思路

  • 一个主类用于字符串得操作,
  • 一个Poly类用于对一个多项式进行抽象,用Arraylist来对term进行封装.内部含有求导方法,添加并合并同类项的方法,toString方法,
  • 最后一个是term类,对每一个幂函数进行抽象.内部含有求导方法, tostring方法,equals方法.

不足之处及bug分析

  • 没有按照运算进行分类,对以后的扩展产生了很大的影响.
  • 在强测和互测中出现了正则爆栈的问题,主要是因为本次没有要求检查wrongformat,但是还是使用了大正则的方法对wrongformat作了检测.

类图

度量分析

2.HomeWork2

思路

  • 本次作业基于上一次的作业有了sin和cos,对每一项的抽象都可以用一个a*xb*sin(x)c*cos(x)**d 来抽象,所以可以抽象出三个层次,一个表达式由若干个项相加组成,项由若干个因子相乘组成.因子中还有type和parameter两个属性,这样就可以用一个因子来实现对常数,幂函数,三角函数的抽象

不足之处及bug分析

  • 这样的架构对于求导操作也是比较快的,但是在拓展性上,还是存在一定问题,导致第三次作业直接进行了重构.

类图

度量分析

3.HomeWork3

思路和感想

  • 本次作业与前两次作业有了很大的区别,多了嵌套,一个项不能再简单的由几个固定的因子来表示了.本来是打算在之前的方法上继续扩展,但是在对equals方法, hashcode方法,clones方法以及多层引用的嵌套,都很难写.导致最后放弃了在原有的程序上扩展的方法,使用了ppt中的按项与组合项的分类方法进行重构.
  • 思路是基础项和组合项,且都继承自项这个类,然后用项这个类进行建树.抽象好层次关系以后求导操作就是比较简单的了,只需要对每个基础项和组合项进行求导即可,化简,求导等也只需要对这几个类进行即可.
  • 难点主要还是wrongformat的检测,表达式的处理以及表达式的化简.而且化简还需要考虑性能问题.

不足之处及bug分析

  • 这次作业没有处理好wrongformat的问题,以为没有问题,实际上有大问题.导致强测错了很多,修复的时候会需要大问题.然后优化也有很多地方出现了很多的问题.

类图

度量分析

测试

  • 在前两次中,测试数据是使用python和正则表达式来随机生成的,在第三次中没有办法直接使用正则表达式来生成,于是又使用了递归加随机数的思想来生成数据

  • 这里附上第三次作业的源码

  • 随机生成的数据的不足之处:

    1. 对一些特定的边界的检测没有办法检测

         2. 对wrongformat没有办法

  • 当然随机数据在互测阶段是非常好使的一种策略,可以很快的检测程序有没有bug.

BUAAOO第一单元代码分析的更多相关文章

  1. BUAAOO第二单元代码分析

    第一次作业 设计思路与感想 第一次作业是要求有捎带的电梯实现, 第一次作业是花费的时间比较长的一次,花费了很多的时间去思考架构的问题.起初是想要搞三个线程的:输入线程,调度器线程和电梯线程,想要搞一个 ...

  2. BUAAOO第一单元的总结

    ---恢复内容开始--- Homework1 简单多项式求导 程序架构 由于对java的生疏和不了解,第一次作业很羞愧的只用了一个类. 1.在输入之后调用Polyformat函数检查输入的格式,A检索 ...

  3. BUAA-OO第一单元小结

    引言 四周过去了,oo课程的第一阶段作业也算告一段落.在第一单元的内容中,主题是始终如一的多项式求导,但三次作业要求完善的求导功能一次比一次丰富,难度也逐渐增加,也是费了不少心思.接下来就回顾与小结一 ...

  4. OO第一单元总结分析

    综述:本模块的内容为表达式求导,目的是通过不同项的嵌套四则运算求导这一基本思路熟悉面向对象的继承与接口机制. 一.三次作业总结分析 1.第一次作业: 1.1 作业分析 盼望着,盼望着,鸽了一年的oo终 ...

  5. 2020 OO 第一单元总结 表达式求导

    title: BUAA-OO 第一单元总结 date: 2020-03-19 20:53:41 tags: OO categories: 学习 OO第一单元通过三次递进式的作业让我们实现表达式求导,在 ...

  6. 第一行代码阅读笔记---AndroidMainfest.xml分析

    按照这本书的指引,我随作者一样创建了一个安卓应用,开始了安卓开发的启程. 找到AndroidMainfest.xml这个文件,打开后看到了我创建的Activity在这个文件里被成功注册,文件内容如下: ...

  7. 【BUAA-OO】第一单元作业总结

    #OO第一单元作业总结 #确认存活,爱学习,爱北航,爱OO 一.三次作业分析 1.第一次作业 1.1 程序结构 对方法的度量: 类的内聚和相互间的耦合情况: 类图: 优缺点: 优点大概没什么优点,毕竟 ...

  8. CC2431 代码分析①-CC2431 喊出第一声

    CC2431 是一款可以基于RSSI 定位的 芯片. 定位原理,通过RSSI 强度换算距离. 可以打个类似的比方,一个人站在群山之间,每个山头都有一个地理坐标,然后大喊一声,各个方向会返回回声,通过回 ...

  9. Linux内核启动代码分析二之开发板相关驱动程序加载分析

    Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c  start_ke ...

随机推荐

  1. 口罩 & 防毒面具 N95 & P100

    口罩 & 防毒面具 N95 & P100 N95 口罩 < 防毒面具 P100 https://www.techritual.com/2020/01/30/210599/

  2. Flutter 在同一页面显示List和Grid

    import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends State ...

  3. DENIEL SOIBIM:如何保持坚持

    丹尼尔·索比姆作为加州理工高材生,在2005年通过创建投资俱乐部对潜力公司进行天使投资,获得了美国Blue Run高层的重视,并相继担任Blue Run潜力营收专家评估师,2009年成为星盟集团的副总 ...

  4. c#winform主题实现的一个方法

    winform的主题实现没有bs里面那么舒服,下面做了一个简单实现,记录一下. 1.一个接口,需要做主题的控件.窗体都要实现这个接口 /// <summary> /// 使用主题的控件.窗 ...

  5. Information:java: javacTask: 源发行版 8 需要目标发行版 1.8

    原文链接:https://blog.csdn.net/idiot_qi/article/details/105149846 创建新maven项目跑main,出现这个编译异常 网上找了找,记录一下以备不 ...

  6. ubuntu系统共享桌面的使用和配置

    内容转载自我的博客 目录 1. ubuntu共享桌面 2. 局域网登录远程桌面 2.1 ubuntu使用remmina登录远程桌面 2.2 在windows登录远程桌面 2.3 Android使用RD ...

  7. 后端程序员之路 2、nginx、php

    nginx是由俄罗斯人开发的一种实现web服务器的工具,主要是为俄罗斯的第三大门户网站实现反向代理加速的服务器. Linux(CentOS)下,下载安装Nginx并配置 - jtlgb - 博客园ht ...

  8. vue3中使用axios如何去请求数据

    在vue2中一般放在created中,但是在vue3中取消了created生命周期,请求方式有两种 直接在setup中去获取数据 setup(props) { const data = reactiv ...

  9. Windows下的Linux子系统

    强调!!!必须是Windows专业版!!! 一.安装运行过程 第一步:打开开发人员模式 第二步:进入 '控制面板 '--'程序'--'启用的Windows功能'--勾选Linux子系统(根据提示进行重 ...

  10. PTA 中序输出叶子结点

    6-8 中序输出叶子结点 (10 分)   本题要求实现一个函数,按照中序遍历的顺序输出给定二叉树的叶结点. 函数接口定义: void InorderPrintLeaves( BiTree T); T ...