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

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. 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...

  2. CSS001. 纯CSS实现瀑布流(纵向排序)

    通过 Multi-columns 相关的属性 column-count.column-gap 配合 break-inside 来实现瀑布流布局. 首先对包裹图片的盒子增加样式,column-count ...

  3. python库--tensorflow--可视化

    方法 返回值类型 参数 说明 tf.summary .FileWrite()   创建事件文件     logdir 文件保存路径(C盘), 通过tensorboard --logdir=文件路径(l ...

  4. 跨 Docker 宿主机 macvlan 类型

    跨 Docker 宿主机 macvlan 类型 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 三台 CentOS 7.0 虚拟机 (Vmware Workstation 15 ...

  5. 01_初识C语言

    第一章 - 初识C语言 基本了解C语言的基础知识,对C语言有一个大概的认识. 每个知识点就是简单认识,不做详细讲解. 1. 什么是C语言? C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的 ...

  6. PHP中的强制类型转换

    学过静态语言开发的朋友对类型转换不会陌生,比如Java.C#.C++等.静态语言的好处就是变量强制必须指定类型,这也是编译的要求,所以大部分编译型的语言都会有强制变量类型的要求.而PHP据说也会在PH ...

  7. git合并内容的1个方式

    诉求 把自己的改动的文件合并到目标分支: 不想改那些不属于自己开发时出现的冲突: 操作 开发分支dev,要合并至master分支 1 所有改动都已提交,保持分支的干净状态(working tree c ...

  8. Shell系列(26)- 条件判断之两个文件比较

    两个文件之间进行比较 测试选项 作用 文件1 -net 文件2 判断文件1的修改时间是否比文件2的新(如果新则为真) 文件1 -ot 文件2 判断文件1的修改时间是否比文件2的旧(如果旧则为真) 文件 ...

  9. vue.js 配置axios 用来ajax请求数据

    * 用npm 安装 axios 切换到项目的根目录 npm install --save axios vue-axios * 在vue的入口文件./src/main.js 中引入axios, 添加2行 ...

  10. javascript 字符串 数字反转 字母大小写互换

    // 符串abcd123ABCD456 怎么转换为 ABCD321abcd654 // 数字要倒序 小写转大写, 大写转小写 Array.prototype.reverse = function() ...