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

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. js data type checker

    js data type checker js 数据类型检测 "use strict"; /** * * @author xgqfrms * @license MIT * @cop ...

  2. google advanced search operators

    google advanced search operators https://www.google.com/advanced_search js es6 site:xgqfrms.xyz http ...

  3. nasm astrcspn函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...

  4. Techme INC解读基因魔剪,带来的是机遇还是风险?

    10月7日,诺贝尔化学奖颁给了法国美国生物学家Jennifer Doudna和生物化学家Emmanuelle Charpentier,以表彰她们对新一代基因技术CRISPR的贡献,全网沸腾. CRIS ...

  5. 01、初识Java

    目录 前言 一.认识Java 历史介绍 Java介绍 二.认识及安装JDK 1.认识JDK 2.安装JDK 配置与测试 配置注意及不生效解决 3.认识Java虚拟机 三.Java的工作方式 四.jav ...

  6. SQL Server中DELETE和TRUNCATE的区别

    ​DELETE和TRUNCATE语句之间的区别是求职面试中最常见的问题之一.这两条语句都可以从表中删除数据.然而,也有不同之处. 本文将重点讨论这些差异,并通过实例加以说明. TRUNCATE DEL ...

  7. Vue学习笔记-jsonl转换显示工具JsonView安装及使用

    一  使用环境: windows 7 64位操作系统 二  jsonl转换显示工具JsonView安装及使用 1.下载: https://github.com/gildas-lormeau/JSONV ...

  8. 如何系统的了解Kafka

    1.概述 在大数据的浪潮下,时时刻刻都会产生大量的数据.比如社交媒体.博客.电子商务等等,这些数据会以不同的类型存储在不同的平台里面.为了执行ETL(提取.转换.加载)操作,需要一个消息中间件系统,该 ...

  9. 在16G笔记本上安装GaussDB 200

    云主机太贵(最便宜的每月几千吧),长期如果需要GaussDB200有个功能测试或学习环境,那么性价比最高的方式还是在自己的笔记本电脑上尝试安装一个本地的数据库进行学习和功能验证. 01 安装环境信息 ...

  10. 剑指 Offer 42. 连续子数组的最大和 + 动态规划

    剑指 Offer 42. 连续子数组的最大和 题目链接 状态定义: 设动态规划列表 \(dp\) ,\(dp[i]\) 代表以元素 \(4nums[i]\) 为结尾的连续子数组最大和. 为何定义最大和 ...