写在开头:

  第一次接触面向对象思想和java语言,在学习以及完成作业的过程经历了一个比较痛苦的过程,

虽然在每次写作业时总是会有一些小小的抱怨,虽然写出的代码还是很差,

但是看到自己有所进步,还是感觉到自己的努力没有白费。

一.代码分析

第一次作业:

UML类图

耦合度:

第一次作业时对oo的了解和对正则表达式的使用都还欠缺

在这次作业中使用了长正则表达式匹配的方法来判断WF

只是简单的分了表达式和项的类,表面上似乎是面向对象

事实上真正的实现逻辑还是没能离开面向过程

第二次作业:

UML类图:

耦合度:

在第二次作业中没有使用长正则表达式匹配,而是在经过预处理之后

进行一项一项地匹配

这次作业中每个项都可以化简成a*x^b*sin(x)^c*cos(x)^d的形式,因此只是简单地建立了乘法项,三角函数项

和幂函数项进行处理

但是每个类中方法很多,现在想起来预处理和求导都可以利用接口的形式实现。

第三次作业:

UML类图:

耦合度:

第三次作业的主要思想是对表达式做预处理之后,通过加号将表达式分割成项,再通过*将项分为因子

因子又分为表达式因子,嵌套因子,和幂函数因子。

那么在本次作业中,所有的输入经过分解后都会称为表达式,项和因子,

之后调用对应的求导函数即可得到结果。

然而在这个过程中,递归的次数非常多,所以这个架构是非常差的。

(对于有一点蠢并且对个人能力不自信而希望快速完成作业的本人来说,这个架构是最符合我要求的“傻瓜”架构)

在周日写完最初的不优化版本后,由于对过长的输出实在看不下去,开始进行简单优化,

(简单优化的结果是虽然达到了去掉多余01和去掉部分括号的目的,却出现了运行时间过长的bug)

二.程序bug

1.第一次作业被发现的bug使用了长正则表达式引起的爆栈,吸取教训后就没再使用过。

2.第二次作业的bug是在对结果进行优化时没有考虑到项的第二个因子的1*不能省略,导致出现了format问题

3.第三次作业的bug是优化之后导致代码运行时间过长出现bug,表明自己的架构和优化方法都很差。

三.互测

  在前两次互测中使用的策略大致是先扫一遍其他人的代码然后挑几个人的代码

进行精确打击,这样的策略在第一次测试时还有一些效果,然而在第二次时由于代码量

较大,就很难通过看代码找出bug。

  因此在看了讨论区大佬的讨论之后,写出了一个简单的自动测试脚本进行批量测试

来发现bug。自动测试果然是发现bug的杀器,使用它之后找bug的效率大大提高了。

  在这里强烈推荐大家都可以写一个简单的自动测试脚本。写一个没有太多复杂功能的

脚本还是不困难的,像我这种小菜鸡也能写出来,相信大家都行。

四.一些感想

  在看到第三次作业的强测结果后虽然也曾有后悔去写优化,

但是转念一想,这次优化失败能让我在以后的作业中去思考设计更好的架构

也能让我花更多的时间更多的精力去学习怎么写出更好的符合oop思想的代码

所以尽管丢了一些分,但至少做出了努力,也一定会得到一些东西。

  还有就是学习oo一定要在实践中去学习,单单只听讲是不能真正理解的(至少对我来说是这样的)

只有写了一段代码去实现这个东西,才能真正对它有比较深的理解。

  因此在接下来的学习中,会花更多的时间在实践中,争取能对面向对象有更深的理解。

  加油加油加油。

oo第一单元学习总结的更多相关文章

  1. 【OO学习】OO第一单元作业总结

    OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...

  2. OO第一单元作业总结

    oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...

  3. OO第一单元总结

    OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...

  4. 【作业1.0】OO第一单元作业总结

    OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...

  5. OO第一单元(前四周)作业总结

    OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...

  6. OO第一单元总结与反思

    OO第一单元总结与反思 目录 OO第一单元总结与反思 摘要 第一次作业 本次作业UML类图 本次作业度量分析 第二次作业 本次作业的UML类图 本次作业的度量分析 第三次作业 本次作业的UML类图: ...

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

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

  8. OO第一单元作业总结——表达式求导

    OO第一单元作业总结 第一次作业 基于度量分析代码结构 基本算法 第一次作业是简单多项式导函数求解,不需要对输入数据的合法性进行判定, 基本思想是用 (coeff, expo)表示二元组 coeff* ...

  9. OO第一单元

    OO第一单元总结 目录 OO第一单元总结 前言 第一次作业 HW1基本思路 UML类图 代码规模 复杂度分析 方法复杂度 分析 类复杂度 分析 优化策略 第二次作业 HW2基本思路 UML类图 代码规 ...

随机推荐

  1. Spring AOP Aspect的简单实现(基于注解)

    第1步:声明使用注解 <!-- 配置扫描注解--> 扫描包的位置<context:component-scan base-package="com.zz"/> ...

  2. go语言游戏服务端开发(一)——架构

    五邑隐侠,本名关健昌,12年游戏生涯. 本教程以Go语言为例.   网络游戏程序分为客户端和服务端.客户端负责图形渲染.交互和一些简单校验处理,服务端负责业务逻辑处理.数据存储. 我们开发一个游戏de ...

  3. node实战小例子

    第一章 2020-2-6 留言小本子 思路(由于本章没有数据库,客户提交的数据放在全局变量,接收请求用的是bodyParser, padyParser使用方法 app.use(bodyParser.u ...

  4. Prometheus 2.21.0 新特性

    Prometheus 2.21.0 现在(2020.09.11)已经发布,在上个月的 2.20.0 之后又进行了很多的修复和改进. 这个版本使用了 Go 1.15 进行编译,不赞成在TLS证书验证中使 ...

  5. Android通过WebView实现新闻界面的加载

    原文链接:Android实现WebView加载网页及网页美化(简易新闻 四)_Tobey_r1的博客-CSDN博客 效果展示: 我是按照原文作者的步骤一步步来的,中间没有遇到什么问题.主要是界面中有很 ...

  6. PHP中的数据库连接持久化

    数据库的优化是我们做web开发的重中之重,甚至很多情况下其实我们是在面向数据库编程.当然,用户的一切操作.行为都是以数据的形式保存下来的.在这其中,数据库的连接创建过程有没有什么可以优化的内容呢?答案 ...

  7. Python中“if __name__=='__main__':”

    在Python当中,如果代码写得规范一些,通常会写上一句"if name=='main:"作为程序的入口,但似乎没有这么一句代码,程序也能正常运行.这句代码多余吗?原理又在哪里? ...

  8. javascript 编码规范 - 正确使用parseInt

    题目描述 修改 js 代码中 parseInt 的调用方式,使之通过全部测试用例 示例1 输入 '12' 输出 12 示例2 输入 复制 '12px' 输出 复制 12 示例3 输入 '0x12' 输 ...

  9. 基于SpringBoot+Mybatis plus+React.js实现条件选择切换搜索功能

    笔记/朱季谦 在写React前端逻辑时,经常遇到可以切换不同条件的列表查询功能,例如下边截图这样的,其实,这块代码基本都一个逻辑,可以一次性将实现过程记录下来,待以后再遇到时,直接根据笔记复用即可. ...

  10. Visaul Studio Code中提示 vue:无法加载vue.ps1,未对vue.ps1进行数字签名

    Visaul Studio Code错误提示 错误如图: 解决办法 首先以管理员身份打开windows PowShell终端. 输入下面命令,如提示选择Y即可. get-help set-execut ...