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

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. Docker - 解决 docker push 上传镜像报:denied: requested access to the resource is denied 的问题

    问题背景 在 Linux 已登录自己的 Docker hub 账号 上传本地镜像但是报错了 docker push tomcat 解决方案 docker tag tomcat poloyy/tomca ...

  2. Spring Cloud Eureka 之服务端自我注册

    Eureka服务端实现了一种自我注册机制,涉及配置项: eureka.client.register-with-eureka spring.application.name Eureka Server ...

  3. 集合Collection ----List集合

    Collection集合体系的特点: set系列集合:添加的元素是 无序,不重复,无索引的 ----HashSet: 无序,不重复,无索引 ----LinkedHashSet: 有序,不重复,无索引 ...

  4. 整理STC延时函数时遇到的玄学问题

    void Delay { unsigned char i, j; i = 11; j = 190; do { while (--j); } while (--i); } void Delay { un ...

  5. Java从入门到精通(第5版)上半部分

    1.1java简介 先起了oak 橡树 这个名字,因为商标原因改为爪洼岛谐音的Java 一次编写,到处运行 java如何运行 java程序既是编译型又是解释型 Java版本 Java SE 标准版(开 ...

  6. PHP中的垃圾回收相关函数

    之前我们已经学习过 PHP 中的引用计数以及垃圾回收机制的概念.这些内容非常偏理论,也是非常常见的面试内容.而今天介绍的则是具体的关于垃圾回收的一些功能函数.关于之前的两篇介绍文章,大家可以到文章底部 ...

  7. GoLang设计模式07 - 责任链模式

    责任链模式是一种行为型设计模式.在这种模式中,会为请求创建一条由多个Handler组成的链路.每一个进入的请求,都会经过这条链路.这条链路上的Handler可以选择如下操作: 处理请求或跳过处理 决定 ...

  8. MySQL 基础入门笔记

    目前我们已知的保存数据的容器有: 内存:( 数组,集合) 硬盘:(文件) 将数据从硬盘读取到内存始终是一个性能上的瓶颈 DB :      数据库  ( 保存一系列有组织的数据容器) DBMS:  数 ...

  9. DeepDB:Learn From Data,not from Queries!

    ABSTRACT DBMS典型学习方法的弊端:手机数据集的成本过高;工作方向或数据库发生改变时,必须重新收集数据.--------------解决:提出了一种新的数据驱动方式,直接支持工作负载和数据库 ...

  10. Redis多种数据类型以及使用场景

    SDS简单动态字符串 struct sdshdr { // 记录buf数组中已使用字节的数量 // 等于SDS所保存字符串的长度 int len; // 记录buf数组中未使用字节的数量 int fr ...