OO第一次博客
过去的三周里我们完成了表达式求导的程序设计与构造。表达式求导程序,大致思路是实现一个表达式类,支持表达式的输入、求导运算和输出功能。可能的话,还可以增加表达式的化简方法,从而得到更高质量的输出结果。总的来说,输入的处理是最为繁琐,也最容易出错的;而只要表达式类的结构设计合理,求导运算和输出都不会构成太多障碍。
一.程序结构分析
1.1第一次作业
第一次作业我在Main类中写了表达式输入的部分,因此Main类非常臃肿。尤其是对于x的指数部分的处理,判断分支写的很繁琐。这个在后面的两次作业中做了改进。
如上面UML类图所示,表达式由一系列的项组成,项中包含系数和指数。Main类中实例化一个表达式对象,完成输入处理,并调用表达式类的求导方法和输出方法。表达式的求导和输出都是通过调用项的求导和输出来实现的。
1.2第二次作业
可以看到,与第一次作业相比,Main类被很好地简化了,输入的功能放在了表达式的三个类中。因子的输入方法,本事涉及复杂的判断处理;项的输出方法,我的判断逻辑写的比较随意。这两处问题在上面都体现出来了。
Main中提供了字符串处理的下标值,并配备了访问方法和修改方法。表达式类的输入、求导和输出方法都是借助项类的相应方法实现的。项包含四个成员变量,分别是常系数、幂指数、正弦指数和余弦指数。这一次作业的因子其实比较简单,我这里为了后续作业的方便,设计了一个因子类;但这里只做了因子的输入处理,每一个因子在完成输入判断以后就会被并入项中。
1.3第三次作业
可以看到,这次代码中因子类成为了核心,负担很重。与上次作业情况类似,因子的输入和项的输出依然是最大的问题所在,在目前的设计思路下无法简化。
整体的结构与第二次作业非常相近,只是因子类变得更加复杂,并加入了单独的求导方法和输出方法。综观三次作业,主要的改变就是因子类。第一次作业是纯多项式,几乎可以不需要因子的概念;第二次作业可以提出因子的概念,但本身结构简单,可以轻易化简到项中;第三次作业里因子可以包含表达式,不再能轻易化简,而是成为了表达式结构中核心的一环。
二.bug分析
这三次作业我并没有在公测中被查出bug,只是在一些测试点扣了性能分。我第一次作业的nextLine方法没有做异常处理,如果输入为空会导致crash,后两次作业改正了这个问题。还有没有其它bug我就不知道了。
三.bug检测
高工16级没有安排互测,所以我就说下我是如何检测自己程序的bug的。
首先,如我刚才提到,表达式类总共是支持三项功能,我会先单独检查各项功能。先看输入处理能否准确剔除错误格式,提取正确信息,再检查正确的表达式能否顺利输出,最后调用求导方法,检查计算结果是否正确。
各部分检查通过后,再整体做测试。对出现问题的测试数据,再进一步检查,是输入bug还是求导bug等。
我个人的经历来说,前两次作业都在输入这一块出现问题,尤其是第一次作业的时候,感觉很迷茫;而第三次作业的输入处理已经比较熟练了,倒是求导时出现了些疏忽。
四.Applying Creational Pattern
表达式是一个很具体的东西,设计一个功能强大的表达式类,并创建一个表达式对象,是很自然的一种思路。至于求导方法,比起直接写死在表达式类里,如果写成一个接口,感觉结构上更加合理一些。具体的改动不会太大。
五.总结
OO的三次作业做完,我感觉是很有收获的。尤其是当我比较顺利地由第二次作业的代码改出第三次作业的代码时,很深刻地意识到良好的架构在面对需求更改时显现的巨大优势。另外,面向对象的程序,在检查bug方面,相比面向过程的程序要方便一些,但是完备的检查仍然非常困难,我现在也不确定我这三次作业还有多少bug,只能说试着测了我能想到的各种问题,每次交作业的时候其实心里都没什么底。后面的挑战会更加困难,我还需要好好准备。
OO第一次博客的更多相关文章
- OO第一次博客作业
OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...
- oo 第一次博客作业
oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...
- OO第一次博客总结
虽然早在开学之前就已耳闻过OO这门课的威力,也在寒假自学了一些java的语法,但在真正面对OO这样的工程训练时才发现寒假所学的那点语法简直不值一提,也深刻的感受到在这个过程中自己的提升确实很快,毕竟d ...
- OO第一次博客作业--第一单元总结
OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...
- 2019年北航OO第一次博客总结
一.基于度量对程序结构的分析 1. 第一次作业 1.1 基于类的分析的度量 首先,基于类的属性个数,方法个数,每个方法的规模,每个方法的控制分支数目,类总代码规模等特征对本次作业的结构进行分析. 1. ...
- OO第一次博客作业总结反思
使用了masteruml插件来生成类图和metrics插件分析代码 第一次作业 1.UML类图 >在第一次作业中,使用了两个类,代码中有没有使用的变量与函数,为平衡两个类的内容,我将输出函数放在 ...
- 始入OO课程的殿堂,初识面向对象的奥妙——OO第一次博客总结
当我满怀期待叩开OO的大门,却发现宝藏藏在层层阻难之后 第一次作业 1.度量分析 >关于第一次作业的metrics图分析没有出现标红的McCabe Cyclomatic Complexity或者 ...
- OO第一次博客作业(第一单元总结)
Q:菜是绿的,鸡是黄的,那菜鸡是什么颜色的? A:红的,强测全WA了,能不红么. 菜不菜的问题先不说了,认真研究一下这次的题目,以及WA的原因吧. 程序结构简析 三次实验的核心结构都是差不多 第一次的 ...
- [BUAA OO]第一次博客作业
第一次作业 第一次进行面向对象的编程,不论是针对数据设计类还是对方法进行合适的归于不同类中,都不是很熟悉.所写出来的程序还是面向过程+有函数的类(虽然现在很大程度上感觉起来也是这样).索性作业难度并不 ...
随机推荐
- python全栈开发day103-python垃圾回收机制、mro和c3算法解析、跨域jsonp\CORS、Content-Type组件
Python垃圾回收 -- 引用计数 -- Python为每个对象维护一个引用计数 -- 当引用计数为0的 代表这个对象为垃圾 -- 标记清除 -- 解决孤立的循环引用 -- 标记根节点和可达对象 - ...
- web服务-2、四种方法实现并发服务器-多线程,多进程,协程,(单进程-单线程-非堵塞)
知识点:1.使用多线程,多进程,协程完成web并发服务器 2.单进程-单线程-非堵塞也可以实现并发服务器 1.多进程和协程的代码在下面注释掉的部分,我把三种写在一起了 import socket im ...
- 第七篇 Flask 中路由系统以及参数
Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST" ...
- HDU.4903.The only survival(组合 计数)
题目链接 惊了 \(Description\) 给定\(n,k,L\),表示,有一张\(n\)个点的无向完全图,每条边的边权在\([1,L]\)之间.求有多少张无向完全图满足,\(1\)到\(n\)的 ...
- SQL语句删除表中的字段只留下最新一行
方法一 DELETE FROM A WHERE `name` in ( SELECT a.name FROM( SELECT name FROM A a GROUP BY name HAVING CO ...
- Python数据分析基础教程
Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...
- 17使用systemd方式开机自动启动Home Assistant服务
2018-03-20 15:48:36 转移自网易博客! 首先使用编写文件hass@homeassistant.service,文件内容如下 # 这个文件用于systemd方式自动启动hass服务.# ...
- Tutorial中的Hello2代码
该hello2应用程序是一个Web模块,它使用Java Servlet技术来显示问候语和响应. 1.GreetingServlet.java源码文件: 1 @WebServlet("/gre ...
- react-native-splash-screen 插件 android 系统app崩溃问题
问题 react-native版本 0.53.3 react-native-splash-screen版本 3.0.6 一切配置妥当后出现如下问题: 在android studio里的调试报错为and ...
- __x__(40)0909第五天__表格 table 的 css 样式 美化
如果就向下面的代码那样,不写 tbody , 则浏览器自添加 tbody , 并将所有的 tr 移入 tbody 意味着 tr 并非 table 的子元素,而是 tbody 的子元素. 所以 以后编写 ...