OO第一单元心得感想

第一单元心得感想

一、程序结构

 

 

图1 类图(IDEA生成,和实际情况吻合)

 

第一单元作业主题是表达式处理。表达式可以分为三部分:表达式、项、因子。简单的说,表达式就是项之和,项就是因子之积,因子可以是表达式,也可以是常数,也可以是变量因子。基于这个思路,在第一次训练的代码的基础上进行迭代开发,实现了第一单元作业的迭代开发。

每个类的设计考虑:

Mainclass:程序入口,同时在这里进行sum函数和自定义函数的处理。

Function:存储自定义函数的定义,便于后续处理。

Lexer:字符串的初步处理,可以通过next()方法和peek()方法得知字符串的下一项。

Parser:将字符串形式的表达式转变为Expr型的表达式。

expr包:

Expr:存储表达式和表达式的处理方法。

Term:存储项和项的处理方法。

Factor:因子,接口。

Variable:变量,存储常数因子和变量因子。

Modified:计算时使用的类型。

优点:相对归一化,能够便捷的顺理思路,进行代码编写。

缺点:没有考虑到三角函数和普通表达式的区别而将二者写为同一种表达式,导致程序中需要的特判增多。

 

二、bug分析

在第一单元的作业迭代开发中,我作业的bug集中在输出表达式的形式处理上。

第一次作业:没有考虑到要先输出系数,导致发生了x*-1,x*+1这样的输出,从而导致形式错误。

第二次作业:一开始同样的没有考虑到先输出系数,导致输出混乱,最后我重构了表达式的输出方法才得以解决bug。

第三次作业:输出表达式的括号经常过多,经检查发现是对于表达式的输出printExpr()方法中多加了很多不必要的括号。这也是之前所提到的特判过多而考虑过少的结果。

     

三、架构设计体验

第一单元的作业是迭代开发,实际上和上学期的计组课程有异曲同工之感。对于架构设计,前期的架构设计很大程度上决定了后续迭代开发的难度。相对而言,分类越是清晰,在进行迭代开发时能够有着越是清醒的头脑。不合理的归一化只会导致特判增加,增加无谓的程序复杂度。在进行第二次和第三次作业开发时,每当我刚开始进行迭代开发时,我就感到相对其他同学而言更棘手的开局——要考虑的特判太多了。因此,这次架构设计给我最大的体验,就是分类一定要清晰明了,根据不同特点构建不同的类。

 

四、心得体会

这次作业给我最大的体验,正如前面所说,就是分类一定要清晰明了,根据不同特点构建不同的类。在这第一单元的作业编写过程中,我更加深入的去了解了java这个语言,切实的体会到了java和C的不同之处。java是面向对象的语言,相比于C,可以感受到java更加注重于每个对象本身的属性和这个对象能够适用的方法。于此同时,我还感受到了idea作为写java代码的工具所具有的强大能力以及git作为远程仓库所拥有的强大能力。综上,我认为第一单元作业不仅仅是一次代码本身的迭代开发,更是加深了我对于各项工具的熟练度。

posted @ 2022-03-26 14:12  普通桑  阅读(15)  评论(1编辑  收藏  举报