结对项目博客——四则运算题目生成程序的改进与分析(附加题)
结对成员: 康家华(学号后三位190)
一、界面模块,测试模块和核心模块的松耦合
这个部分,我们小组决定和刘乾的小组进行和合作,实现模块的交换。原以为很简单地一项任务在我们拿到代码的时候就出现了大问题:由于我们在设计层面上的想法有着比较大的差别,尤其是用户界面方面,这就导致核心模块的接口必然不会相同(因为核心模块的接口是与用户界面的接口相匹配的),那就更不用谈测试模块了,所以要想将两个小组的测试模块与用户界面模块进行互换几乎是一件不太可能完成的事情。
具体去分析这个问题产生的原因,其实就是在于对需求的理解不一样,比如说在用户需求上一个小小的差异就会导致核心模块的接口出现差异,从而两者无法完全匹配。另外,在算法设计层面上的差异也是很明显的,例如我们的程序是利用一个Setting(Dictionary<String, Object> dicr)函数来进行参数的设置,而刘乾小组并没有采用这样的方法,这就导致测试模块完全无法正常工作,因为无论是函数参数,还是函数的返回值类型,如果没有事先制定好统一的标准的话,是很难达成一致的。
于是,我们决定选择一个择中的方法:互相吸取对方的经验来改进自己的程序,如果对方对用户的需求理解的更到位,那么我们就适当地修改自己的接口,从而达到两者的匹配,例如,在与他们小组进行比较之后,我们也决定设计出一个计算器的界面来进行操作,从而降低用户输入的难度。
二、通过增量修改的方式,改进程序,完成对各种错误情况的处理
错误处理这方面,在上学期的面相对象课程的影响下,我们这次的代码在设计层面上就处理了输入参数不合法(例如括号不匹配)或者计算出错(例如除数为零)的情况,并且自己定义了许多异常,在函数处理时分情况进行异常抛出,顶层模块在检测到不同种类的异常时会采取不同的方法(即输出不同的提示消息),保证程序的完备性。
具体抛出异常的细节处理如下:
Calculate中抛出了这些异常:
WrongFormatException // 表达式格式错误
CalculationException // 运算错误,包括除零等等
OverflowException // 数字溢出异常
Produce中抛出了这些异常:
ValueRangeTooSmall // 数值范围太小,生成题目数量太大
Judge中抛出了这些异常:
JudgeFileOpenFailedException // 文件打开失败
JudgeFilesNotMatch // 文件不匹配
Setting中抛出了这些异常:
WrongParameterException // 参数设置错误
ProducePathNotExistException // 生成路径不存在
作为一个要发布的软件,必然需要处理一些用户不合法的输入,而我们的程序在这一方面可以算是做到了比较完备的地步,在错误发生的时候能够准确地判断出错误的类型并且输出相应的提示消息。