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

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. Appium自动化(6) - 控件定位工具之uiautomatorviewer 的详细介绍

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 app定位不如web定位那么 ...

  2. adb 常用命令大全(1)- 汇总

    adb 常用命令大全系列 基础命令 查看手机设备信息 应用管理 日志相关 模拟按键输入 其他实用功能

  3. Markdown时序图--基础语法

    时序图 ​ 序列图是一种交互图,它显示了流程以何种顺序相互操作. Mermaid可以渲染序列图,如下定义. sequenceDiagram Alice->>John:Message Hel ...

  4. Oracle体系结构一

    总体结构分为三个部分:SGA,PGA,FILE文件 按功能分: 存储结构  存储结构对应关系  主要文件: 数据文件: 每个数据文件只与一个数据库相关联 一个表空间可以包含一个或者多个数据文件 一个数 ...

  5. 【转】asp.net core环境变量详解

    asp.net core环境变量详解 环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境 ...

  6. .Net Core with 微服务 - 分布式事务 - 可靠消息最终一致性

    前面我们讲了分布式事务的2PC.3PC , TCC 的原理.这些事务其实都在尽力的模拟数据库的事务,我们可以简单的认为他们是一个同步行的事务.特别是 2PC,3PC 他们完全利用数据库的事务能力,在一 ...

  7. php实现实例化类后自动进行错误以及异常处理(简易版)

    <?php class App { public function __construct() { /* * ini_set 设置配置项 * display_errors 是否在页面显示错误信息 ...

  8. Linux系列(19) - 常用压缩命令(2)

    常用压缩格式 .tar.gz .tar.bz2 上述两个原理:先用tar进行打包,打完包再用gz或者bz2进行压缩 打包命令tar 命令格式 tar -cvf [打包文件名] [源文件1] [源文件2 ...

  9. 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01

    百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...

  10. P6793-[SNOI2020]字符串【广义SAM,贪心】

    正题 题目链接:https://www.luogu.com.cn/problem/P6793 题目大意 给出两个长度为\(n\)的字符串,取出他们所有长度为\(k\)的连续子串分别构成两个可重集合\( ...