一、基于度量来分析自己的程序结构

1、第一次作业

1.1类图:

  

  第一次作业由于比较简单,我采用了面向过程的编程方式。在Polynomail类的构造函数中将项直接求导输出。这样的弊端显而易见,不能进行优化。

1.2复杂度分析

  由于在Polynomail类的构造函数中直接求导,构造函数复杂度最高。

1.3总结反思

  第一次作业属于投机取巧的反面教材,面向过程编程的错误显而易见。应该用Arraylist将建造的类存起来,再在Polynomial类中写求导方法,这样既符合面向对象的编程思想,又便于优化

2、第二次作业

2.1类图

  第二次作业在第一次作业的基础上做了改进,采用如下思路:

  

2.2复杂度分析

  这次将求导单独成类,正则表达式匹配format先去空格。复杂度最高的仍然是这两个方法。

2.3总结反思

  第二次作业仍然属于偷懒,在讨论区学习到了这种方法后做了一定的改进。由于没有建立幂函数类和三角函数类,无形中给第三次作业增加了许多难度。

3、第三次作业

  第三次作业没有通过中测,由于前两次没有建立起面向对象的编程思想,在第三次作业中我尝试使用面向过程进行求导,但过于复杂没有实现。

二、自己程序的bug

1、第一次作业

  第一次作业的bug主要来源于format。由于采用暴力正则表达式匹配,导致正则表达式十分复杂。在检查时发现在符号 x 和 ^ 之间没有添加空格,是粗心导致的bug。其次关于正则匹配爆栈的问题,经讨论区大佬推荐,参考了该文:https://blog.csdn.net/weixin_42516949/article/details/80858913。

2、第二次作业

  第二次作业在建立Term类的时候对于字符串的处理出现了失误。在 为-x 和 +x 建立类的时候没有将常数 +1 和 -1分离出来,而后在将字符串转化为BigInteger类型的数字时程序抛出异常。这个异常在Term类的x1Add方法中抛出,但实际需要修改的时Dervation类的change函数中。

三、发现别人程序bug所采用的策略

  一开始我选择阅读每一个人的代码来找出别人的bug,但这样的工作量实在太大。后来我转变思路,先从自己写代码时遇到的困难和出现的bug入手,优先测试别人程序中有没有解决这些问题或者是否还存在着我遇到过的bug。在讨论课上有大佬分享了自己使用对拍器进行互测的过程,受益颇多,以后可以尝试这种方法。

四、总结

  本单元作业难度递增,前面两次作业在为第三次作业铺路,然而偷懒的小学生并没有意识到课程组用心良苦的安排,在前两次作业中摸水,直接导致第三次作业爆炸。错过了第三次作业面向对象的洗礼,后面只能面对更大的挑战。

BUAA_2019_OO_第一单元总结的更多相关文章

  1. OO第一单元作业小结

    前言 第一单元的主题是表达式求导,第一次作业是只带有常数和幂函数的求导,第二次作业加入了正余弦函数,第三次作业又加入了表达式嵌套,难度逐渐提升.总体来说前两次作业还易于应对,而第三次作业做得相对有些艰 ...

  2. BUAA面向对象设计与构造——第一单元总结

    BUAA面向对象设计与构造——第一单元总结 第一阶段:只支持一元多项式的表达式求导 1. 程序结构 由于是第一次接触面向对象的编程,加之题目要求不算复杂,我在第一次作业中并没有很好利用面向对象的特点, ...

  3. 2019_BUAAOO_第一单元总结

    前言 OO第一单元共有三次作业,分别为多项式求导.带有三角函数与幂函数的表达式求导.带有嵌套表达式因子的表达式求导.虽然这三次作业都离不开求导,可是每次作业的复杂度都是大大递增的.对于习惯于面向过程编 ...

  4. OO第一单元作业总结

    oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...

  5. OO第一单元总结

    OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...

  6. OO第一次博客作业--第一单元总结

    OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...

  7. OO第一单元总结(表达式求导)

    写在前边:第一次接触面向对象语言,编程思想仍然不可避免的有以前面向过程的影子.从第一次作业的完全面向过程,到第二次学会剥离各个类互不影响到第三次作业的先构思面向对象的基本程序架构再编程.虽然程序有些地 ...

  8. OO第一单元优化博客

    OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)​\)和\(cos(x)​\)的指数作为坐标,在图上画出来就可 ...

  9. 【BUAA-OO】第一单元作业总结

    #OO第一单元作业总结 #确认存活,爱学习,爱北航,爱OO 一.三次作业分析 1.第一次作业 1.1 程序结构 对方法的度量: 类的内聚和相互间的耦合情况: 类图: 优缺点: 优点大概没什么优点,毕竟 ...

随机推荐

  1. epoll代码框架

    epoll代码实现框架: #define MAX_EVENTS 10 struct epoll_event ev, events[MAX_EVENTS]; int listen_sock, conn_ ...

  2. 文件流转换(一般用于axios设置接收文件流设置时responseType: 'blob')

    文件流转换 一般用于axios设置接收文件流设置时responseType: 'blob'当接口报错时,前端因已设置responseType: 'blob'无法再接收json格式数据,会把json格式 ...

  3. 使用Eclipse的基本配置

    因本人 IntelliJ IDEA 正版授权前些日子已到期,最近开始使用 Eclipse .体验开发了一阵子,觉得除了在界面美观与前端编辑的操作上 Eclipse 与 IDEA 差距还比较大以外,其他 ...

  4. Nginx系列(4)- Nginx安装 | Windows

    下载 访问官网,选择稳定版对应的Windows系列 安装解压即可 启动nginx 有很多种方法启动nginx 直接双击nginx.exe,双击后一个黑色的弹窗一闪而过 打开cmd命令窗口,切换到ngi ...

  5. Docker系列(28)- 自定义网络

    自定义网络 网络模式 bridge:桥接docker(默认,自己创建也可以使用bridge模式) none:不配置网络 host:和宿主机共享网络 container:容器网络联通!(用的少!局限性大 ...

  6. 怎么通俗的理解Netty呢?

    目录 Netty(3.X) 简单体验 Netty的事件驱动机制 Netty的源码阅读 Netty(3.X) 有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,W ...

  7. mysql8 navicat远程链接失败

    原因:mysql 8加密规则问题 更改加密规则: ALTER USER 'ycc'@'%' IDENTIFIED BY 'you password' PASSWORD EXPIRE NEVER; 修改 ...

  8. P3244-[HNOI2015]落忆枫音【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3244 题目大意 给出一个\(\text{DAG}\),保证\(1\)可以到达所有点.然后再加入一条边(之后不一定 ...

  9. P4585-[FJOI2015]火星商店问题【线段树,可持久化Trie】

    正题 题目链接:https://www.luogu.com.cn/problem/P4585 题目大意 \(n\)个集合,开始每个集合中有一个数字. 开启新的一天并且往集合\(s\)中插入数字\(v\ ...

  10. 【Go】Golang实现gRPC的Proxy的原理

    背景 gRPC是Google开始的一个RPC服务框架, 是英文全名为Google Remote Procedure Call的简称. 广泛的应用在有RPC场景的业务系统中,一些架构中将gRPC请求都经 ...