OO第一单元感悟与体会
第一单元的三次编程作业结束了,现在分享一些我对自己作业的分析和感想
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第一单元感悟与体会的更多相关文章
- OO第一单元总结
OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...
- OO第一单元(求导)单元总结
OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...
- 【作业1.0】OO第一单元作业总结
OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...
- OO第一单元总结与反思
OO第一单元总结与反思 目录 OO第一单元总结与反思 摘要 第一次作业 本次作业UML类图 本次作业度量分析 第二次作业 本次作业的UML类图 本次作业的度量分析 第三次作业 本次作业的UML类图: ...
- 2020 OO 第一单元总结 表达式求导
title: BUAA-OO 第一单元总结 date: 2020-03-19 20:53:41 tags: OO categories: 学习 OO第一单元通过三次递进式的作业让我们实现表达式求导,在 ...
- OO 第一单元
OO第一单元总结 前言 第一单元 OO 作业的主题是求导,从最简单的幂函数求导,到添加三角函数求导,再到最后添加嵌套规则.(对熬夜有了新体验,OO 作业比较适合晚上写,OO 博客也是一样 doge) ...
- OO第一单元作业总结——表达式求导
OO第一单元作业总结 第一次作业 基于度量分析代码结构 基本算法 第一次作业是简单多项式导函数求解,不需要对输入数据的合法性进行判定, 基本思想是用 (coeff, expo)表示二元组 coeff* ...
- OO第一单元
OO第一单元总结 目录 OO第一单元总结 前言 第一次作业 HW1基本思路 UML类图 代码规模 复杂度分析 方法复杂度 分析 类复杂度 分析 优化策略 第二次作业 HW2基本思路 UML类图 代码规 ...
- OO第一单元作业总结
oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
随机推荐
- js bitwise operation all in one
js bitwise operation all in one 位运算 & 按位与 | 按位或 ^ 按位异或 / XOR let a = 5; // 000000000000000000000 ...
- Stack Overflow & Segment Fault
Stack Overflow & Segment Fault https://stackoverflow.com/ https://stackoverflow.com/users/593446 ...
- Techme INC:红光和近红外光疗法有效加速肌肉恢复,美国橄榄球队已采用
Techme INC创始人兼董事长MADELEINE VAUGHAN表示:在运动结束后,肌肉纤维因为细微损伤造成酸痛情形,即是延迟性肌肉酸痛-DOMS.这类酸痛发生时,需要适度的恢复,避免造成肌肉拉伤 ...
- 算法型稳定币USDN有什么价值和用途?
USDN的标签是"数字美元",与大多数稳定资产一样,USDN是一种金融服务产品.基于NGK公链发行的算法型稳定币USDN,USDN是和美元1:1锚定的加密数字货币,1USDN等于1 ...
- 12_MySQL如何对查询结果进行排序
本节所涉及的sql语句: -- 排序关键字 SELECT empno,ename,hiredate FROM t_emp ORDER BY hiredate DESC; -- 排序字段相同的情况 SE ...
- 手把手教你Centos7 部署 gitlab社区版
一.前置说明: 操作系统:Centos 7 物理内存:>=2G 本人亲测,如果安装低版本的gitlab,比如我这里所使用的v8.17.0,物理内存1G,swap 2G虚拟内存即可部署.高版本的所 ...
- 你见过老外的 Java 面试题吗(下)?
前言 上一篇文章总结了 老外常见的 Java 面试题上,如果有感兴趣的同学可以点击查看,接下来补上下半部. 正文 finalize 方法调用了多少次 关于 finalize 总结了以下几点: fina ...
- Filter理解
web中Filter通过<init-param>添加参数.web.xml中的配置: <filter> <filter-name>AuthFilter</fil ...
- frame 和 iframe
1.frame不能脱离frameSet单独使用,iframe可以: 2.frame不能放在body中:如下可以正常显示: <!--<body>--> <frameset ...
- hive复杂数据类型的用法
目录 1.简单描述 2.测试 1.简单描述 arrays: ARRAY<data_type> maps: MAP<primitive_type, data_type> stru ...