面向对象第一单元总结

一、第一次作业

1.1需求分析:

实现对幂函数的线性组合(多项式)的求导,并对结果经行合并。

1.2实现方案:

由于在做第一次作业时,是我第一次写面向对象程序,还不知道程序设计规范,所以我只写了一个类,采用状态机的方法进行输出字符的处理,用动态数组ArrayList来储存多项式。

1.3类图:

1.4度量:

由于当时分解方法的时候出现了很多问题,没有调好,就只好交了一个只含有一个方法的程序。

 

 

二、第二次作业

2.1需求分析:

在第一次作业的基础上加入三角函数sin(x)和cos(x),优化方案也随着三角函数的出现变得复杂。

2.2实现方案:

第二次作业对于输入字符的处理变得更难了,于是我学习了正则表达式来对输入字符经行处理,使得输入字符的正确性判断变得十分容易。在数据存储方面我还是用了动态数组ArrayList,用list1,list2,list3.lis4分别表示常数项,x指数,sin(x)指数和cos(x)指数,求导则按照A*x^a*sin(x)^b*cos(x)^c的模板进行求导,将结果保存为三项。优化方面我先把x,sin(x),cos(x)三个变量指数相同的项合并在一起,再进行平方和的合并。

2.3类图:

 

2.4度量:

 

 

 

三、第三次作业

3.1需求分析:

在第二次作业的基础上加入线性组合,乘积组合和嵌套组合,以及组合规则的递归调用。

3.2实现方案:

第三次作业我主要写了六个类,分别是表达式树结构定义Node类,定义因子的Factor类,输入数据正确性检验和数据预处理Check类,创建表达式树的First类,提取因子的Value类和求导打印输出的Outclass类。由于第三次作业的表达式因子不能用正则表达式表示,所以不能一次性的用正则表达式对输入字符进行分析。这次我首先用正则表达式检查是否出现空白字符错误(带符号整数和sin,cos之间不能出现空白字符),然后再进行数据的预处理,这一部分在Check类里面实现的。关于数据处理我这次采用的是表达式树,树的结构由Node类定义,节点由Factor类定义,中间结点是运算符,叶子节点代表因子。表达式因子则在内部嵌套一个表达式树。数据处理完之后则按照表达式树的求导方法将表达式求导并输出。

3.3类图:

 

3.4度量:

 

四、bug测试与修复

4.1bug测试:

对所有的因子的组合进行测试。

系数和指数应该包括0系数,1系数,-1系数,超大系数,还有多个符号的组合。

4.2bug修复:

第一次作业没有使用大整数BigInteger,导致强侧出现很多错误。

第二次作业暂时没有发现Bug。

第三次作业在输出的时候没有处理好加负数的情况,导致出现”+-”这样的不和规则的字符。

五、单元感想

第一单元的三次作业都是实现多项式的求导运算,由简到难,处理的难度越来越大,由于我是第一次写面向对象的程序,面对难度递进的任务,我三次都重写了代码,但是每一次重写我的代码,我都使用了新的方法,使得能够处理更复杂的问题。经过这三周的练习,我能深深的感受到我的进步。

转载于:https://www.cnblogs.com/CC1090348107/p/10608288.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值