OO第一次博客作业(第一单元总结)
Q:菜是绿的,鸡是黄的,那菜鸡是什么颜色的?
A:红的,强测全WA了,能不红么。
菜不菜的问题先不说了,认真研究一下这次的题目,以及WA的原因吧。
程序结构简析
三次实验的核心结构都是差不多
第一次的没什么好分析的,每个Item可以用固定的方式表示:num * x ^ n(暂且不考虑格式),然后拼成表达式就行了。
第二次,以Item为最小单位显然是不现实了,每个Item的项数和项的种类都不确定,那么就用抽象类Factor作为基本单位,常数因子、幂函数因子、sin函数因子和cos函数因子作为该类的具体实现。
每个Item用Arraylist<Factor>实现(不会用Hashmap),每个表达式Expression又用Arraylist<Item>实现。
继承关系很容易看出,由Expression为父类,子类Item,然后是抽象类Factor和实现Factor的四个子类。
所有的类都实现一个求导接口,从最底层的四个Factor实现类写起,Item的求导采用乘法求导公式循环求导,Expression求导采用加法求导公式逐个求导。
简化的方法,就是将每个项变为常数因子*幂因子*sin因子*cos因子的标准形式在进行类似第一次作业的简化。
虽然第二次的重构非常痛苦,但是好处是第三次求导可以特别快速地进行:只须添加一个继承Factor类的表达式因子,修改一下sin函数因子和cos函数因子,就可以实现第三次作业的基本功能了。
由于第三次作业简化要求太复杂就不做简化了。
这里只放出最后一次作业的度量结果,从结果上看,还有很大的优化空间,主要是表达式处理上有很粗糙的地方,表达式读入的方式仍旧过于面向过程,写了冗长的函数体。
分析自己程序的BUG
BUG的原因真没什么好分析的,前两次都是在简化的时候发生了对输出的错误处理。但是,两次采用的简化方法并不相同,所以导致BUG的原因也不完全相同。
第一次的简化策略是,逐项输出,以项为最小单位进行简化。在简化中,要考虑常数、幂指数为0、1、-1等的情况。输出表达式时,用+或-进行连接。错误的原因是在常数为0时多输出了一个+号,项却已经被简化没了。
第二次的简化策略仍是以项为最小单位进行简化,但由于此时的最小单位为因子,所以简化起来和第一次相差很大。这次是根据未简化时产生的字符串按正则表达式简化,但由于情况考虑疏忽,导致简化了不该简化的情况,强测出现大量BUG。这就是一个教训:在第一次作业的BUG修复之后,在容易导致BUG的薄弱环节上就不该另起炉灶了。
除此之外第二次还有一个地方在拷贝代码时少改了一个变量名,导致求导求错。
第三次的话,就是注意一下评测机系统的System.exit返回值必须为0,不然就会RUNTIME_ERROR就是了。其实在中测的时候就已经发现了这个问题,但是还有一个System.exit(-1)没有改掉,说白了还是自己不细心。
分析自己发现别人程序bug所采用的策略
头两次因为Bug都分在了C组,用黑盒盲测的方法就能发现许多BUG(而且都是一些各种各样无厘头的WRONG FORMAT类问题,技术含量真心低),第三次也无心投入太多时间用来找BUG,所以没什么可谈的。
值得一提的是,有时采用代码评审的方式,能够从代码中直接找出BUG的存在,这个方法在以后处理多线程程序时会起到很重要的作用。
Applying Creational Pattern
如果没错的话应该是用了一个叫什么工厂模式的东西,虽然并不是有意识地在用,写的时候也并不知道这个东西。不过设计模式这个东西真的挺有用的,建议课上多讲一些。
OO第一次博客作业(第一单元总结)的更多相关文章
- OO第一次博客作业--第一单元总结
OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...
- oo 第一次博客作业
oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...
- OO第一次博客作业
OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...
- OO第一次博客作业总结反思
使用了masteruml插件来生成类图和metrics插件分析代码 第一次作业 1.UML类图 >在第一次作业中,使用了两个类,代码中有没有使用的变量与函数,为平衡两个类的内容,我将输出函数放在 ...
- [BUAA OO]第一次博客作业
第一次作业 第一次进行面向对象的编程,不论是针对数据设计类还是对方法进行合适的归于不同类中,都不是很熟悉.所写出来的程序还是面向过程+有函数的类(虽然现在很大程度上感觉起来也是这样).索性作业难度并不 ...
- [BUAA软工]第一次博客作业---阅读《构建之法》
[BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...
- Java第一次博客作业
第一次博客作业 目录 三次作业题目详情 作业中的错误分析 感想与心得 题目详情 题目1:第一次作业: 类图: 题目2 类图: 题目3 类图: 题目4 题目5 题目6 类图: 题目7 类图: 题目8 第 ...
- OO第二次博客作业--第二单元总结
第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...
- OO第一次博客总结
虽然早在开学之前就已耳闻过OO这门课的威力,也在寒假自学了一些java的语法,但在真正面对OO这样的工程训练时才发现寒假所学的那点语法简直不值一提,也深刻的感受到在这个过程中自己的提升确实很快,毕竟d ...
随机推荐
- JDBCUtils——C3P0
需要导入的包: mysql-connector-java-5.1.37-bin.jar c3p0-0.9.2-pre5.jar mchange-commons-java-0.2.3.jar 如果使用D ...
- python基础之作业2----购物车小练习
product_list = [ ("Iphone",6000), ("Mac pro",12800), ("Bike", ...
- inout口在modelsim仿真的方法
//主要是// 和**********部分是关键 1 `timescale 1ns/1ns module tb(); reg main_clk; :] addr; reg FPGA_CS0;//FPG ...
- C++11-->单生产者,单消费者问题
参考上一篇C++11并发编程 #include <iostream> #include <queue> #include <assert.h> #include & ...
- jquery添加节点时能有点击事件
<script> var n=0; $(".dj").on('click',function(){ ...
- StringBuffer&StringBuilder
对字符串修改时,用到StringBuffer&StringBuilder,能够多次修改对象并且不产生新的未使用对象 StringBuilder线程不安全(不能同步访问),速度有优势,多数情况下 ...
- DevExpress TreeList 拖动时中如何判断源节点作为目标节点的子节点还是兄弟节点
目的:只允许同级拖动. 两个判断: 1.原节点(假设为:S)的父级如果不等于目标节点(假设为:T)的父节点,那么发生了跨级,即非同级移动.这个判断很容易. 2.S.T是同一级的,但是S是移动到T下一级 ...
- java proxy 转包
package org.rx.socks.proxy; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; ...
- 合肥工业大学oj G-诺德森海岸
#include<iostream> #include<vector> #include<bits/stdc++.h> using namespace std; v ...
- JSF的分析
一.JSF的有关定义 JavaServer Faces (JSF) 是一种用于构建Java Web 应用程序的标准框架 它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发 ...