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 ...
随机推荐
- java类的理解和相关问题
---java抽象类 当我们定义的对象无法抽象或者不适合抽象为一个具体的类的时候 我们通常定义其为一个抽象类 like 衣服 (多种衣服) 手机 (多种手机) ---接口和抽象类的异同 对于概念上来说 ...
- hdu 1754 I Hate It 解题报告(线段树 代码+注释)
题目链接:传送门 I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- nginx常用模块
Nginx模块介绍 核心模块:core module 标准模块:stand modules HTTP modules: Standard HTTP modules Optional HTTP modu ...
- vBox Arch UEFI LVM安装
Table of Contents 介绍 配置 基础 VirtualBox配置 安装准备 基础 分区 格式化 挂载 安装 选择镜像 安装基本系统 配置 fstab chroot 一些配置 lvm2 网 ...
- GAN的入门级理解(按文章顺序)
1.https://www.leiphone.com/news/201706/ty7H504cn7l6EVLd.html 我的理解:一开始,G网络利用一组随机噪声生成一堆合成的垃圾照片,交给D网络判断 ...
- Python学习第四天
一.数字 int 二.字符串 str #以下均为补充内容 #对于空字符串是假 #数字0是假 #数字和字符串可以相互转换 # a="123" # b=int(a) # a=123 # ...
- SecureCRT标签显示标题
- Windows下PyMC安装
先安装Anaconda2 然后conda install -c https://conda.binstar.org/pymc pymc
- erlang证书加密
-module(...). -include("ewp.hrl").-include("backend.hrl").-include_lib("pub ...
- java 的序列化与反序列化
前言: 一直很不理解java的序列化的概念,为什么java对象的序列化要实现 Serializable的接口?或者要实现Externalizable的接口?而且Externalizable 的父类还是 ...