OO第一单元总结
OO面向对象课程第一单元总结
- 程序分析
第一,二次作业:
第一,二次作业我使用的结构相似,都是在main函数里面通过大正则判别该表达式是否符合格式,在之后进入下一个大类进行处理,先将多项式拆成项,然后在之后对单独每个项进行分析,逐因子分析x,cos(x),sin(x)的个数,通过复合函数的表达式进行处理,并进行简化输出,得到最终的结果。
第一次作业类图:

第一次作业复杂度:

第二次作业类图:

第二次复杂度:

第三次作业:第三次作业的设计思路就是将一个大的表达式拆解成为很多个项,再将项拆分成为很多个因子,在拆分的过程中判断格式错误,逐个求导,建立树的结构,以此来进行求解。首先,我在main函数中调用了Derivation这个的最基本的类,在这个类所建立的对象里,我首先将第一个项提取出来,然后将剩余的表达式再次放入Derivation这个类中,建立在树层面上平行于前一次调用所创建方法的方法。在提取完第一个项之后,我再使用Polytoterm类将提取出来的项分成单独个因子存入字符串数组中进行处理,在分别对因子进行求导,如果因子为多项式因子,则再次调用Derivation类重复进行递归,以此构建树的结构。这样,就构建了由多项式,到项,到因子,以及一直往下延伸的树的递归结构。
第三次作业类图:

第三次作业复杂度:


2.bug以及冗杂度分析
对于第一,二次作业,由于初次接触,其在设计上并没有按照层次化结构来设计,而是直接使用了一个大类,进行处理,在大类中建立了许多的方法,这是按照C语言的旧思维来操作的,虽然代码较为简单,但是代码的可拓展性和可维护性是十分不够的。
对于第三次作业,在强测以及互测中均没有被测出bug,但是在下课测试的时候,出现了对于复杂次幂处理不到位的情况,这通过增加对出现多项式因子时判断括号时纠正了过来。
但是,从总体上来说,在这次代码设计在结构上还是存在着许多的问题,首先,在与树构建的层次上,对于多项式的拆分以及因子的拆分在同一个类里面,这造成了Derivation这个类里面结构过于复杂,从复杂度图中我们就可以较为清晰的了解到,代码量过于冗杂的情况。对于这种情况,应该重新定于一个类,专门用于将多项式拆分成项的情况,但是这个情况又会造成多余嵌套的多项式因子无法处理的情况,需要另外判断处理,会使得思路更加复杂。
3.互测环节
在互测环节,我一开始主要是通过分析别人代码结构去找出对方的bug,而在分析对方的代码时,会让自己了解到许多关于别人编程思想。在分析别人的代码结构时,我主要使用的是IDEA自带的调试功能,先输入一个功能较为齐全的样例,然后进行单步调试,即可以较好的理解其中的每个模块的功能。
而到了后面,我主要是通过尝试一系列自己构建的测试样例去测别人的代码,除此之外,在第三次作业是,我会使用之前自己出错时构造的复杂样例去分析互测屋中别人的代码,而复杂样例则主要是与括号的多层嵌套有关,而事实证明,自己程序中曾出现的错误有些会在别人的代码上实现。与此之外,在第一次和第二次作业中,由于存在WRONG FORMAT的存在,因此在观察别人的代码时我会先优先观察有关正则表达式的部分。
4.总结
总而言之,这三次的下课oo作业是循序渐进的,对于刚刚接触oo的我来说,也逐渐熟悉了如何构建面向对象的java语言,也让我熟悉了如何正确的使用正则表达式。我认为,构建这几次的作业的时候我们应该根据功能,根据用途进行,功能化层次化分类,将不同的功能分成不同的类,将不同的层次分成不同的类,这样就可以较为清晰明了,且代码会具有较好的可拓展性。
然后对于处理多项式问题,我们应该将这个复杂的对象分解成位更加简单的对象,并根据基本的因子进行一步步的分解,在这里使用了面向对象的思维方式。
但是,在这几次作业中,对于具体分解项这个环节,我仍然使用的是对字符串中的单个字符进行特判分析,同时在具体的类中,我使用了较多的if嵌套,这些显得有些过于“C”style了,有待日后的改进与努力。
浙公网安备 33010602011771号