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第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
随机推荐
- HTTP/HTTPS Proxy & Charles
HTTP/HTTPS Proxy & Charles Charles https://www.charlesproxy.com/ https://www.jianshu.com/p/53d2c ...
- webpack & webpack-cli
webpack & webpack-cli Error: Cannot find module 'webpack' Google site: stackoverfow UnhandledPro ...
- WebAssembly in Action
WebAssembly in Action 数据加密,反爬虫,防盗链,版权保护,数据追踪,埋点 blogs 加密,js 禁用检测,权限控制 WebAssembly 防盗链 wasm online id ...
- html->pdf直接下载
import html2Canvas from 'html2canvas' import JsPDF from 'jspdf' export default{ install (Vue, option ...
- 同步vscode的setting.json和extensions
vc 详情 $ npm i -g vscode-config $ vc config --token <your github token> $ vc config --id <yo ...
- [Python学习笔记]文件的读取写入
文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...
- 一文读懂Servlet
1 Servlet简介 Servlet就是sun公司开发动态web的一门技术 Sun在这些API中提供一个接口叫做:Servlet. 开发一个Servlet程序,只需两步: 编写一个类,实现Servl ...
- 遇见ZooKeeper:初识
0. 什么是ZooKeeper ZooKeeper 是一个开源的分布式,它的设计目标是将那些复杂且容易出错的分布式协同服务封装起来,抽象出一个高效可靠的原语集,并以一系列简单的接口提供个用户使用. Z ...
- java与freemarker遍历map
一.java遍历MAP /** * 1.把key放到一个集合里,遍历key值同时根据key得到值 (推荐) */ Set set =map.keySet(); Iterator it=set.iter ...
- mtk相机冷启动拆解
1 概述 冷启动大致可以分成以下几块内容: S0 (system) 主要是 Activity 的创建耗时(从 Touch up,即 ptr:up 开始) ptr:up S1 App 从 Activit ...