BUAA_OO_Unit1总结

一、整体概述

​ 第一单元三次作业核心任务是进行表达式的化简问题,包含因子、项和表达式三个层级,在此基础上进行了迭代开发,如下:

  • 含有加减幂次运算的括号表达式
  • 增加sin、cos、自定义函数与求和函数
  • 增大sin、cos内部因子范围

二、设计思路

类图

分析

第一次作业

​ 基于形式化表述,将表达式拆成若干个项,项与项之间用+/-连接;项拆成若干因子,用*连接;因子分为表达式因子、幂函数因子、常数因子。将顶层表达式归入表达式因子。

​ 基于递归下降法,通过Lexer类将字符串拆分成若干语义单元,再通过Parser返回相应的表达式元素。

​ 为了化简的便利,我使用了一个Hashmap来保存键值对,key代表幂次,value代表系数,特别地value使用Biginteger。

第二次作业

​ 采用了预解析模式,该模式已完成了对输入的解析,只需要完成计算和化简,在自己不熟悉Java语言和面向对象思维的情况下选择了该种方式。

​ 采用Hashmap的嵌套使用,将表达式的每一项除以系数的部分作为key,每一项的系数作为value,存放在顶层的Hashmap中。每一项除以系数的部分的信息单独作为一个类,其中包含关于三角函数sin因子乘积的Hashmap和三角函数cos因子乘积的Hashmap。两种三角函数的Hashmap都以函数括号内部的信息作为key,函数的指数作为value,采用边计算边合并同类项的操作。

​ 输出借助于Hashmap。预解析模式得到的子表达式包含的内容都是标签,操作符,操作数。以标签作为key,标签对应的表达式作为value,每计算出一个标签对应的表达式,就把标签和对应表达式的键值对存入HashMap中,最后结果针对最后一个标签寻到到对应表达式输出即可。

第三次作业

​ 未完成

三、度量分析

PS:未经过评测机测试。

四、Bug分析

因未提交有效作业,暂无bug分析。

五、互测分析

因未参加互测部分,暂无互测分析。

六、心得体会

​ 对OOP有了一些浅薄的理解:

​ 封装:即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

​ 继承:在继承关系中,父类更通用、子类更具体。父类具有更一般的特征和行为,而子类除了具有父类的特征和行为,还具有一些自己特殊的特征和行为。

​ 开学的第一个月由于家中的一些事情打乱了自己学习生活的节奏,没能以很好的状态面对自己的学习生活,导致未能及时参与到学习测试中。在接下来的学习中我会加紧学习脚步,跟上同学们的学习步伐,在此也感谢老师和助教们的关心和帮助。

posted @ 2022-03-26 14:02  走马行川  阅读(34)  评论(1编辑  收藏  举报