oo第一单元总结

(1)    基于度量来分析自己的程序结构

方法和类的复杂度分析图片中ev(G),iv(G),v(G),OCavg,WMC含义如下:

ev(G)即Essentail Complexity,用来表示一个方法的结构化程度,范围在[1,v(G)]之间,值越大则程序的结构越“病态”,其计算过程和图的“缩点”有关。

iv(G)即Design Complexity,用来表示一个方法和他所调用的其他方法的紧密程度,范围也在[1,v(G)]之间,值越大联系越紧密。

v(G)即循环复杂度,可以理解为穷尽程序流程每一条路径所需要的试验次数。

OCavg代表类的方法的平均循环复杂度。

WMC代表类的总循环复杂度。

第一次作业

类图

方法以及类的复杂度

思路分析:第一次作业中使用了四个类。Main类负责输入表达式正确性的判断,首先是利用正则匹配,直接对表达式进行判断,后来发现出现爆栈的问题,出现爆栈的原因是因为正则的贪婪特性,之后便改为用替换的方法,先将首项替换为空字符串,再将其他项替换为空字符串,最后和空字符串比较,两者比较结果为真则输入正确;Pushtoarr类将表达式分离为项,通过ArrayList保存,再将项中系数和指数通过动态数组保存,最后进行求导并保存结果;Remove类主要是去除数的前导0,但互测时才发现这一步多余,将字符串转换为BigInteger类型不需要去除前导0;Jianhua类主要是将求导后的表达式简化,合并同类项,对指数为0,1,系数为0,1,-1的项进行优化处理。

优点:学到了正则表达式的用法,使用了四个类,虽然说还未摆脱掉c语言代码风格,但通过这次作业了解并应用了对象与类。

缺点:正则表达式过长,出现bug后难以定位。类中许多方法都使用了许多if else语句,导致代码量较多。

第二次作业

类图

方法以及类的复杂度

思路分析:第二次作业使用了五个类,Main类进行输入,输出;Judgeregex类利用正则判断表达式的正确性,改进了第一次的正则写法,写出因子的正则,然后合并为项的正则,判断正确性则是与第一次作业一样;Cutterm类通过split将项与项分离;Splitfactor类将项分割成系数,x的指数,sinx的指数,cosx的指数。Derivative类进行求导,合并和优化。

优点:将项化为了x,sinx,cosx,便于以后的求导,合并,优化,对于类中的属性,只能通过get()的方法读取,封装得较好。

缺点:未能用到同学课上介绍到的try-catch,不熟悉其用法,Derivative类中进行了求导优化化简,方法太多,代码量较多。

第三次作业

类图

方法以及类的复杂度

思路分析:此次作业写出的程序与第一次和第二次作业有了较大的区别,表达式正确性的判断并不是提前处理,而是边建树边判断,运用到了五个类,Main类进行输入输出,Wrongformat类进行预处理,提前处理一些显而易见的错误,以及将空白字符给去掉,便于以后的数据处理,Expression类属性为ArrayList,储存Term对象,Term类属性为ArrayList,储存Factor对象,Factor属性为me和ArrayList,属性me区分数,x,sin,cos,表达式因子,ArrayList存储可能存在的嵌套因子(Factor对象)或者表达式(Expression对象)。将树建立后,进行求导。

优点:学会了用try-catch机制,应用递归建树。

缺点:未能进行合并优化,未能用到接口。

(2)自己程序的bug

第二次作业:互测时发现了一个bug,未能仔细阅读题目,忽略了项与项之间可以存在三个正负号的问题,

第三次作业:强测时,输入x*+x未能输出相应结果,预处理时忽略了这一情况。

互测时,输入sin(-7)未能得出正确结果,在程序中将-+也当成了因子,所以会程序错误。

(3)发现别人程序bug所采用的策略

第一次通过爆栈,空格超时,以及阅读他人正则表达式时发现了一些bug。

第二次通过阅读正则表达式(例如缺少\t)以及表达式输出找到了bug。

第三次主要是通过设计正确的输入来找bug。

(4)Applying Creational Pattern

第三次作业建立了树的概念,若增加其他数学符号tan等,可以在原有代码上增加少量代码即可将树建立起来,但第三次作业未能实现一个求导的接口,未能描述类之间的共性行为,并且在求导时,因子与因子之间只考虑了乘法,如果增加其他的运算法则,则难以扩展,因此应该实现一个求导的接口,增强程序的可扩展性。

原文地址:https://www.cnblogs.com/pyb1999/p/10604730.html

时间: 2024-10-19 18:22:41

oo第一单元总结的相关文章

北航OO第一单元

????第①单元 知道要写博客实在太开心啦,因为我就喜欢写些奇奇怪怪的东西,然后沉迷于把它变得越来越??里胡哨(雾 杂谈 废话 和 心路历程 废话 大二下是来6系的第二个学期了,依然频繁地为同学们的强大感慨不已(同时觉得自己菜的不行) 开学不满一周,就能分明地看出来OO这门课和别的课不太一样. 起初在寒假的时候,我以为这有是一门类似于c语言或数据结构的课,教你一些语言或以语言为载体教你一些初级算法.后来寒假的pre2,3一出来我懵了,我以为要学的东西竟然已经要求你在寒假自学完成了?!于是本人承受

OO第二单元单元总结

总述 OO的第二单元主题是电梯调度,与第一单元注重对数据的输入输出的处理.性能的优化不同,第二单元的重心更多的是在线程安全与线程通信上.这此次单元实验之前,我并未对线程有过了解,更谈不上“使用经验”,整体上第二单元三个实验也做的较为吃力.三次实验,也算是对线程的一步步入门吧,以及由于对于线程不是很熟悉,所以我总是下意识的把程序分割,尽量减少通信量. 第一次实验 基本需求:单电梯.无捎带要求.基本无性能要求. 基本实现:一个主线程或者一个主线程与一个电梯线程 我采用的方法是使用一个主线程,因为实际

面向对象第一单元总结

目录 一.任务需求 二.实现方案 多项式数据结构的设计 多项式解析与WRONG FROMAT判断 表达式求导 表达式简化 三.基于OO度量的程序分析 四.程序bug分析 五.对象创建模式 六.对比和心得体会 第一单元通过三次迭代的表达式求导任务建立对面向对象程序的初步认识,并熟悉面向对象的思维和编程方法. 一.任务需求 三次作业的需求如下: 第一次作业:求解简单多项式导函数 第二次作业:求解包含简单幂函数和简单正余弦函数的表达式的导函数 第三次作业:求解包含简单幂函数和可嵌套因子的正余弦函数的表

第一单元总结

登录vnc ip:172.25.254.250:7 ############虚拟机相关操作############## [[email protected] Desktop]$ rht-vmctl start desktop ###开启 Starting desktop. [[email protected] Desktop]$ rht-vmctl view desktop##显示 [[email protected] Desktop]$ rht-vmctl stop desktop##正常关闭

第一单元练习题

<<<第一单元练习题>>> 1.用student用户登陆系统图形界面 2.打开一个bash 3.修改student的密码,把密码更新成"T3st1ngtlme"(主机字母和数字) psaawad student 4.显示当前系统时间 date 5.显示当前系统时间,显示格式为:"小时:分钟:秒 AM/PM"(AM/PM为上下午标识) date +%X%p 6.显示"/usr/bin/clean-binary-files&

运维第一单元练习题

<<<第一单元练习题>>> 1.用student用户登陆系统图形界面 点击student user - 输入password 2.打开一个bash 右键--open in terminal application--utilities--terminal gnome-terminal 3.修改student的密码,把密码更新成"T3st1ngtlme"(主机字母和数字) passwd student -更改密码T3st1ngtlme 4.显示当前系统

第一单元. &nbsp; &nbsp; &nbsp; &nbsp; Linux 系统登录及部分基础命令

第一单元 1. 用student用户登陆系统图形界面 [[email protected] Desktop]$ rht-vmctl start desktop  ####打开虚拟机#### Starting desktop.                                      #####虚拟机开启中### [[email protected] Desktop]$ rht-vmctl view desktop    #####显示desktop#### [[email pro

.C#认证考试试题汇编:第一单元:1,11 第二单元:1,11

第一单元1,11 好久没用异或都快忘了,就让我们一起来了解哈啥子事异或 说的这个,就不经意让我想起书上的几种交换值得方法了 我这儿说的交换的方法是,不使用第三个变量来交换,而是两个 实现条件是C a=100,b=10;第一种 缺点可能会如果超出范围溢出a=a+b; a=110,b=10b=a-b; b=100,a=110a=a-b; a=-10,b=100b=100,a=10;第二种 缺点可能会如果超出范围溢出a=a*b;a=1000,b=10b=a/b;b=100,a=1000a=a/b;a=

linux基础学习 第一单元练习

第一单元练习题 1.用student用户登陆系统图形界面 2.打开一个bash 3.修改student的密码,把密码更新成"T3st1ngtlme"(主机字母和数字) 4.显示当前系统时间 5.显示当前系统时间,显示格式为:"小时:分钟:秒 AM/PM"(AM/PM为上下午标识) 6.显示"/usr/bin/clean-binary-files"的文件类型 7.统计"/usr/bin/clean-binary-files"的文