第一次作业

类图:

 

复杂度:

  圈复杂度的问题一直困扰着这三次作业,主要体现在求导方法中先判断符号导致出现过多判断语句,应该将整理符号放在一个新的类中处理。

第一次作业由于对面向对象的思维有些不理解,只创建了两个类,一个Main函数处理输入和输出,一个Poly类负责判断表达式合法性并求导。由于未考虑到超过32位数字的存在,导致我未能通过强测的半数内容,后来在Poly类中的求导阶段将数据的判断改成了BigInteger,顺利通过了强测的所有测试点。这个bug的修复只需修改几个方法的数据类型转换并用到BigInteger类的一些函数。当然,强测并未能测出我对一些\t类型的字符判断,比如说\f,这个问题我注意到了并在第二次作业中进行了修改。

由于强测分数过低没能进入互测环节,这次的测试用例大部分都在代码的格式问题上,就不再赘述。

第二次作业

类图:

复杂度:

第二次作业相比第一次作业多了sin和cos函数的求导,吸取了上次的经验教训,这次我将输入单独写入一个类,然后单独写了一个求导类,通过poly类调用,类图如上,缺点就是每个类的功能不够专一,然后类的相互调用有点多。

出现的bug主要在优化上,首先是0的优化没有做好,这里我将求导类中的symbol方法修改后解决了问题。另一个bug出现在cos函数的求导方法上,有个地方漏写了sin(x),导致了错误。这些bug都不是结构的问题,是在程序写完后没能够构造完备的测试集导致的问题。

在互测环节,我主要针对乘积项的求导进行了检查,在代码检查上,我着重看的是代码在求导类中,项的拆解和结合,所以我设计的测试用例是多种不同的项的乘积之和。

第三次作业

类图:

复杂度:

  

  判断格式错误中的空格错误需要大量判断条件和判断语句,导致设计复杂度急剧上升,需要留意。

  这次作业我把注意力放在类的专能化上,将判断合法性从input handler中剥离,然后将表达式的分解单独放到一类。这样做的优点是条理清晰,便于debug,缺点在于没有使用继承导致一个类的方法过多而不得不将求导类中的一些方法单建一类放置。

这次我的bug主要出现在0的优化以及一些格式判断上。问题出在求导类和Judge类中。犯了上次的错误,这次要格外注意。

互测中,我这次的测试用例着重考察代码中对于括号的处理,通过多重括号的嵌套,观察程序能否将括号内的所有信息抓取出来,从测试结果来看很多人的括号内的内容抓取都出现了问题,主要体现在符号错误方面。

三次作业的分析

在第一次作业的时候,由于表达式较为简单,可以使用正则表达式直接判断合法性,但是随着难度的加大,一个正则表达式的判断方法明显不能满足要求,于是我采取了拆解表达式分项判断的方法。后来明白我用的方法类似于递归下降。首先我将表达式中的不合法空格与不合法字符进行了判断,然后删去所有空格,将表达式拆成项,再将项拆成因子,对每个因子进行正则表达式的判断。在求导阶段,我将项传入求导函数中,拆解成因子,再逐因子求导、拼接,最后连接起来就达到了求导后的结果。接下来再处理符号问题。由于求导的过程未使用继承导致程序看起来很复杂,这是我需要改进的地方。

  第三次作业应该采用的是工厂模式创建接口,但是我采用的是逐个列出方法的做法,导致了程序的复杂度和代码量的激增,在这点我需要多了解面向对象的思维方法,争取在下个单元做出改进。

张德法

OO第一单元作业的更多相关文章

  1. 【OO学习】OO第一单元作业总结

    OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...

  2. 【作业1.0】OO第一单元作业总结

    OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...

  3. OO第一单元作业总结——表达式求导

    OO第一单元作业总结 第一次作业 基于度量分析代码结构 基本算法 第一次作业是简单多项式导函数求解,不需要对输入数据的合法性进行判定, 基本思想是用 (coeff, expo)表示二元组 coeff* ...

  4. OO第一单元作业总结

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

  5. 北航OO第一单元作业总结(1.1~1.3)

    经过了三次作业之后,OO第一单元告一段落,作为一个蒟蒻,我初步了解了面向对象的编程思想,并将所学内容用于实践. 一.第一次作业 1.架构分析 本次作业需要完成的任务为简单多项式导函数的求解.表达式仅支 ...

  6. OO第一单元作业小结

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

  7. 2019北航OO第一单元作业总结

    一.前三次作业内容分析总结 前言 前三次作业,我提交了三次,但是有效作业只有两次,最后一次作业没能实现多项式求导的基本功能因此无疾而终,反思留给后文再续,首先我介绍一下这三次作业,三次作业围绕着多项式 ...

  8. OO第一单元作业——魔幻求导

    简介 本单元作业分为三次 第一次作业:需要完成的任务为简单多项式导函数的求解. 第二次作业:需要完成的任务为包含简单幂函数和简单正余弦函数的导函数的求解. 第三次作业:需要完成的任务为包含简单幂函数和 ...

  9. OO第一单元作业总结之初识面向对象

    第一个单元的三次作业均为求导,循序渐进的让我们掌握如何构造类和方法,让整个代码是面向对象的设计而不是面向过程的设计.如果第一次作业和第二次作业你只是简单的对过程着手架构类,到了第三次作业就会变得格外麻 ...

  10. 多项式与三角函数求导——BUAA OO 第一单元作业总结

    第一次作业 需求简要说明 针对符合规定的多项式表达式输出其符合格式规定的导函数多项式,格式错误输出WRONG FORMAT! 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16> ...

随机推荐

  1. 2018.07.03 POJ 2318 TOYS(二分+简单计算几何)

    TOYS Time Limit: 2000MS Memory Limit: 65536K Description Calculate the number of toys that land in e ...

  2. 2018.06.29 NOIP模拟 排列(线段树)

    排列(premu.cpp) [题目描述] 对于一个 1 到 n 的排列,逆序数的定义为:排列中第 i 位 ai的逆序数就是 a1-ai-1中比 ai大的数的个数.另外用 pi表示 a1,-,ai的逆序 ...

  3. js 验证input 输入框

    <h1>js验证输入框内容</h1><br /><br /> 只能输入英文<input type="text" onkeyup ...

  4. Android继承BaseAdapter时要重写的函数的说明

    原文来自:http://www.2cto.com/kf/201405/299601.html,我自己做了一些修改 Android中继承BaseAdapter后需要重写四个函数,但一般还要写一个构造函数 ...

  5. qq强制聊天工具

    当你想和别人聊天, 别人有不理你的时候可以用上哦!!!特别是情人吵架的时候, 呵呵 复制下面的代码: @echo off title DIY-QQ强制聊天工具color 0a echo. echo.  ...

  6. Swift中的闭包(Closure)[转]

    闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储着一个整数,一个String类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很多在一些古老的语言中不能处理的事 ...

  7. tensorflow1.12 cuda10 cudnn7

    https://download.csdn.net/download/giselite/10909984 https://blog.csdn.net/chary8088/article/details ...

  8. B-tree B+tree适合文件系统索引和MySQL索引

    B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树 它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点.下图是 B-树的简化图. B-树 ...

  9. C++主流编译器整理(编译器版本--供应商--C++11支持情况)

    C++标准   年份 C++标准                俗称   备注 2011 ISO/IEC 14882:2011     C++11  第三个C++标准 2007 ISO/IEC TR ...

  10. JSP、Servlet中get请求和post请求的区别总结

    在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法.前两天看<Head First Servlets & JSP>看到其中讲关于 ...