其他分享
首页 > 其他分享> > BUAA_OO_2020_UNIT1_Summary

BUAA_OO_2020_UNIT1_Summary

作者:互联网

BUAA_OO_2020_UNIT1_Summary

​ 第一单元的整体任务为,给出一串字符串,判定是否合乎规范,并按照一定的规则将字符串解析为表达式,并将表达式求导后的结果输出

一、程序分析

第一次作业

​ 第一次作业较为简单,只包含带系数的幂函数项组成的表达式,并且不涉及WF判断

1. 设计思路

2. 代码质量分析

​ 通过以上工具的分析结果,可以看出,由于第一次作业较为简单,代码复杂度不高,耦合程度较好,方法复杂度也都较低,只有输出方法涉及化简因此复杂度较高

第二次作业

​ 第二次作业添加了三角函数和部分判断,考虑到向后兼容,便重构了架构,使得整体架构具有较好的扩展性。另外,第二次作业中的化简部分也是一大难点

1. 设计思路

2. 代码质量分析

​ 通过以上工具的分析结果可以看出,由于较好地进行了类的规划和分工协作,在数据存储和处理部分的方法复杂度和类复杂度均较好。但是在深搜优化部分,由于进行了递归,方法复杂度较大。整体类之间的耦合性较好

第三次作业

​ 第三次作业加入了嵌套因子和表达式因子,以及完全的WF判断。因此本次作业的重点在于架构设计,数据处理,对于优化,只做了较为简单的、力所能及的优化

1. 设计思路

​ 整个架构的设计延续了第二次作业的设计,只进行了一些扩展和优化;解析字符串部分由于有嵌套因子和表达式因子的存在,扩展较多

2. 代码质量分析

​ 通过以上结果看出,随着作业复杂度增大,类与方法的复杂度也随之增大。其中PowerMachine、TermMachine、TriMachine由于生成对象时需要大量循环和判断,平均复杂度较高。Format由于内置了大量静态变量和复杂的静态方法,平局复杂度和耦合性较高。而Expression和Term类由于处理核心数据,类总复杂度较高。除此之外,其他类的复杂度与耦合性均较好

​ 整体而言,此次作业由于第二次作业留出的扩展性,几乎没有重构的部分,主要是进行扩展。同时由于类的规划较好,整体的复杂度与耦合性均较好。

二、测试与bug

1. 公测:

​ 本单元作业均未在中测以及强测中被发现bug。其中第一次与第三次由于优化较好,性能分获得满分;第二次作业由于优化不够彻底(测评方式有问题),获得97.7583分。

2. 互测:

被hack

​ 第一次作业中采用TreeSet对项按照系数大小进行排序,由于对容器TreeSet和接口Comparable理解不深,导致系数相同的项只会输出一项,从而被hack出bug

​ 第二次与第三次均未被hack出bug

hack

第一次作业hack出的bug有:

第二次作业hack出的bug有:

第三次作业hack出的bug有:

hack的主要思路有:

三、设计模式

​ 主要采用了工厂模式

​ 在第一次作业中,采用了简单工厂模式来解析输入字符串,由于比较简单,没有考虑向后兼容

​ 在第二次作业中,由于解析字符串的复杂性,以及考虑到向后兼容,采用了抽象工厂模式:设计接口Machine,内置方法Function getFunc(String str) throws WrongFormat,再设计各种具体的Machine实现Machine接口,以通过正则捕获到的字符串生成对应的对象。设计一个Factory类,通过HashMap管理这些Machine的实例化对象,通过输入命令的方式获得需要生产的对象

​ 在第三次作业中,延续了第二次作业的工厂模式,对于嵌套因子和多项式因子进行了相应的扩展

​ 工厂模式使得创建过程透明于用户,业务逻辑代码不需要过多地关注对象是如何由输入产生的,降低了程序的耦合性和业务逻辑代码的复杂度

​ 同时工厂模式有利于扩展,当出现新的产品对象时,设计相应的生产类并实现接口即可

四、心得体会

标签:OO,化简,对象,复杂度,作业,因子,2020,UNIT1,表达式
来源: https://www.cnblogs.com/wangyikun/p/12520974.html