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. sketch 导出 svg

    sketch 导出 svg refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  2. vue mixin执行覆盖

    https://cn.vuejs.org/v2/guide/mixins.html 完整代码 vue-option-overwrite-strategies vue 自带的mixin如果钩子函数重复会 ...

  3. AttributeError: 'function' object has no attribute 'as_view'

    我的描述:当我启用jwt_required来进行token验证的时候,我提示错误; 解决方案: 修改前代码: 修改后代码: 多看书.多多了解.多看看世界...

  4. 创建一个springboot项目

    进入https://start.spring.io/ 再点击GENERATE,下载解压即可 注意配置好阿里云的仓库镜像,免得依赖无法下载 不下载最新版springboot是因为我在测试中遇到了问题,貌 ...

  5. MongoDB语句命令

    更新列名 db.xx.update({}, {$rename : {"StoreId" : "MetaId"}}, false, true) 查询长度 db.g ...

  6. 8.Vue组件三---slot插槽

    主要内容:  1. 什么是插槽 2. 组件的插槽 3. 插槽的使用方法 4. 插槽的具名 5. 变量的作用域 6. slot的作用域 一. 什么是插槽呢? 1. 生活中的插槽有哪些呢? usb插槽, ...

  7. uni-app创建项目

    下载 HBuilderX   下载地址(https://www.dcloud.io/hbuilderx.html) HBuilderX是通用的前端开发工具,但为uni-app做了特别强化. 创建uni ...

  8. Java实现贪吃蛇

    游戏界面基本布局 贪吃蛇是基于JFrame的一款小游戏.它主要有两部分组成,一个是显示区域,一个是按钮区域.这两个区域都用JPanel来实现. 首先需要创建一个基于JFrame的类,例如创建一个MyF ...

  9. bouncycastle中添加HMAC-SM3支持

    一. 最近看完了PKCS#5中的内容,总结一下自己添加HMAC-SM3中遇到的问题和解决方法. 大概通读BC java源码以后,开始上手修改. 在SM3.java中添加如下代码: /** * SM3 ...

  10. golang-Zap和Go Logger日志库

    目录 在Go语言项目中使用Zap日志库 介绍 默认的Go Logger日志库 实现Go Logger 设置Logger 使用Logger Logger的运行 Go Logger的优势和劣势 优势 劣势 ...