BUAAOO第一单元代码分析
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第一单元代码分析的更多相关文章
- BUAAOO第二单元代码分析
第一次作业 设计思路与感想 第一次作业是要求有捎带的电梯实现, 第一次作业是花费的时间比较长的一次,花费了很多的时间去思考架构的问题.起初是想要搞三个线程的:输入线程,调度器线程和电梯线程,想要搞一个 ...
- BUAAOO第一单元的总结
---恢复内容开始--- Homework1 简单多项式求导 程序架构 由于对java的生疏和不了解,第一次作业很羞愧的只用了一个类. 1.在输入之后调用Polyformat函数检查输入的格式,A检索 ...
- BUAA-OO第一单元小结
引言 四周过去了,oo课程的第一阶段作业也算告一段落.在第一单元的内容中,主题是始终如一的多项式求导,但三次作业要求完善的求导功能一次比一次丰富,难度也逐渐增加,也是费了不少心思.接下来就回顾与小结一 ...
- OO第一单元总结分析
综述:本模块的内容为表达式求导,目的是通过不同项的嵌套四则运算求导这一基本思路熟悉面向对象的继承与接口机制. 一.三次作业总结分析 1.第一次作业: 1.1 作业分析 盼望着,盼望着,鸽了一年的oo终 ...
- 2020 OO 第一单元总结 表达式求导
title: BUAA-OO 第一单元总结 date: 2020-03-19 20:53:41 tags: OO categories: 学习 OO第一单元通过三次递进式的作业让我们实现表达式求导,在 ...
- 第一行代码阅读笔记---AndroidMainfest.xml分析
按照这本书的指引,我随作者一样创建了一个安卓应用,开始了安卓开发的启程. 找到AndroidMainfest.xml这个文件,打开后看到了我创建的Activity在这个文件里被成功注册,文件内容如下: ...
- 【BUAA-OO】第一单元作业总结
#OO第一单元作业总结 #确认存活,爱学习,爱北航,爱OO 一.三次作业分析 1.第一次作业 1.1 程序结构 对方法的度量: 类的内聚和相互间的耦合情况: 类图: 优缺点: 优点大概没什么优点,毕竟 ...
- CC2431 代码分析①-CC2431 喊出第一声
CC2431 是一款可以基于RSSI 定位的 芯片. 定位原理,通过RSSI 强度换算距离. 可以打个类似的比方,一个人站在群山之间,每个山头都有一个地理坐标,然后大喊一声,各个方向会返回回声,通过回 ...
- Linux内核启动代码分析二之开发板相关驱动程序加载分析
Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c start_ke ...
随机推荐
- 如何通过NGK数字增益平台实现兑换算力
最近币圈里有一个新项目NGK非常火热,很多朋友在经过了了解以后纷纷表示很看好这个项目,那么除了二级市场之外,是否还能有其他的方式可以更低成本地获得NGK代币呢? 答案是肯定的,NGK数字增益平台便是低 ...
- 15_MySQL·WHERE子句中条件执行的顺序
- C#从1970年开始到现在时间的总秒数
TimeSpan timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1)); string timeStamp = ((int)timeSpan. ...
- docker镜像常用操作的基本命令
1.拉取/下载镜像 docker pull 镜像名称 (可以从网易云镜像中心获取要下载的镜像) 2.查看已经下载的镜像 docker images 3.删除本地镜像 docker rmi ...
- Spark + GraphX + Pregel
Spark+GraphX图 Q:什么是图?图的应用场景 A:图是由顶点集合(vertex)及顶点间的关系集合(边edge)组成的一种网状数据结构,表示为二元组:Gragh=(V,E),V\E分别是顶点 ...
- HarmonyOS三方件开发指南(13)-SwipeLayout侧滑删除
鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录:1. SwipeLayout组件功能介绍2. SwipeLayout使用方法3. SwipeLa ...
- MySQL之四 存储引擎
1.介绍 存储引擎MySQL中的"文件系统" MySQL体系结构 InnoDB存储引擎介绍 My1SAM 和InnoDB区别 mysql MariaDB [(none)]> ...
- selenium之元素定位的方法(一)
WebDriver 对象有多种方法用于在页面中寻找元素.他们被分成find_element_*和find_elements_*方法.find_element_*方法返回一个WebElement对象,代 ...
- python学习之常用数据结构
前言:数据结构不管在哪门编程语言之中都是非常重要的,因为学校的课程学习到了python,所以今天来聊聊关于python的数据结构使用. 一.列表 list 1.列表基本介绍 列表中的每个元素都可变的, ...
- 白嫖微软Azure12个月服务器
前言 Azure是微软提供的一个云服务平台.是全球除了AWS外最大的云服务提供商.Azure是微软除了windows之外另外一个王牌,微软错过了移动端,还好抓住了云服务.这里的Azure是Azure国 ...