第一单元的三次编程作业结束了,现在分享一些我对自己作业的分析和感想

1.程序结构的分析

第一次作业:

本次作业我的主要思路是,为每一项写一个正则表达式,在输入的字符串中匹配每一项,多项式类中保存着一个单项类的列表,这样来完成求导并不难,完成多项式中项的排序工作后,合并同类项也不难。

第二次作业:

我的第二次作业是基于第一次作业做了一些小的修改,每个项中新增了sin(x)的次数和cos(x)的次数两个属性,对单项的求导结果返回一个包含三个新项的列表,大体与第一次作业类似。只不过优化过程中思路有些混乱,当然这并不会影响对错,只是会影响一部分性能分。

第三次作业:

由于我的前两次作业的结构难以适应第三次作业的嵌套结构,所以第三次作业必须重构。在ddl一直逼近的压力之下,我选择了类似二叉树的结构存储多项式,但是没有为各种运算都创建一个类,只是在节点中存储了“+”、“*”、“sin”等字符串来判断运算种类,也并没有类的继承关系,因此出现了非常冗长的类,这显然是一种非常不好的构造。如果当时我能多静下心来思考一下,为每种运算创建一个类,共同满足一个父类或接口,结构会好很多,在以后求导和debug中也能轻松很多。

2.程序的bug分析

第一次作业并没有被发现bug。

第二次作业很多沿用了第一次的内容,由于读指导书的疏忽在,判断格式时将所有\s(所有空白字符)替换了,而题目中只有\t和空格是合法的空白字符,因此有一种格式错误不能发现,在强测中错了一个测试点。

第三次作业我写的太过混乱,在解析字符串的时候出现了一些错误,例如对于括号的处理时没有考虑到这种类似于(x)*(x)这样最开始的括号的另一部分没有在最结尾,从而产生了bug。

3.发现别人bug采用的策略

第一次作业我并没有成功发现别人的bug。

第二次作业我觉得有些人可能在优化时产生错误,因此我故意构造了一些包括sin(x)**2+cos(x)**2以及包括sin(x)**4-cos(x)**4的样例,发现了别人的一些bug。

第三次作业我故意写了一些括号嵌套情况复杂的测试数据,成功找到了别人的bug,此外利用次数绝对值不超过50的要求,我构造了sin(x)**2*sin(x)**49这样的数据,也让一部分人输出了WRONG FORMAT。

4.应用对象创建模式

三次作业中我都设计了包括了解析字符串,求导,输出的PolyComputer类,暂时还没有使用工厂模式。

5.对比和心得体会

我觉得前两次作业用我的方法写比较便捷,但是这种方法不适应第三次的嵌套结构,也让我在设计第三次作业时遇到了极大的困难,最后程序结构很混乱。现在反思过来,应该在第三次作业中多使用接口继承等工具,能让自己的代码更清晰,也有利于更改和调试。此外,我觉得以后的作业中我应考虑使用工厂模式,来改善自己的代码。

OO第一单元感悟与体会的更多相关文章

  1. OO第一单元总结

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

  2. OO第一单元(求导)单元总结

    OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...

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

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

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

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

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

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

  6. OO 第一单元

    OO第一单元总结 前言 第一单元 OO 作业的主题是求导,从最简单的幂函数求导,到添加三角函数求导,再到最后添加嵌套规则.(对熬夜有了新体验,OO 作业比较适合晚上写,OO 博客也是一样 doge) ...

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

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

  8. OO第一单元

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

  9. OO第一单元作业总结

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

随机推荐

  1. Service Worker in Action

    Service Worker in Action https://caniuse.com/#feat=serviceworkers Service Workers 1 W3C Candidate Re ...

  2. 根据对象,返回'&键名=值&键名=值‘形式

    Object.prototype.srcCode=function () { var str=''; for(key in this){ if (this.hasOwnProperty(key) == ...

  3. python中yaml模块的使用

    1.yaml库的导入 经过尝试,发现在python2 和python3语言环境下,安装yaml库的命令行语句不一样. python2: pip install yaml python3:pip ins ...

  4. 使用docker mediawiki,搭建网页wiki

    我只是想做一个大家都能访问的wiki,用于成员间共享和维护一些文档.找到了docker的mediawiki,这里记录一下我怎么搭的吧. 首先,如果你在一个局域网里,有公用的可以访问的服务器,那可以直接 ...

  5. [转]【视觉 SLAM-2】 视觉SLAM- ORB 源码详解 2

    转载地址:https://blog.csdn.net/kyjl888/article/details/72942209 1 ORB-SLAM2源码详解 by 吴博 2 https://github.c ...

  6. 08.手写KNN算法测试

    导入库 import numpy as np from sklearn import datasets import matplotlib.pyplot as plt 导入数据 iris = data ...

  7. IHttpClientFactory 踩过的坑

    public class BasicUsageModel : PageModel { private readonly IHttpClientFactory _clientFactory; publi ...

  8. Guava - LoadingCache实现Java本地缓存

    前言 Guava是Google开源出来的一套工具库.其中提供的cache模块非常方便,是一种与ConcurrentMap相似的缓存Map. 官方地址:https://github.com/google ...

  9. s2010 安装mvc3

    下载链接如下:MVC 3安装包:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=d2928bc1-f48c-4e95-a0 ...

  10. pytorch(16)损失函数(二)

    5和6是在数据回归中用的较多的损失函数 5. nn.L1Loss 功能:计算inputs与target之差的绝对值 代码: nn.L1Loss(reduction='mean') 公式: \[l_n ...