OO2022第四单元作业总结

OO2022第四单元作业总结

本单元架构设计

本单元的架构设计基本是按照UML图元素间的树形结构进行设计的,为UML图中的每个元素都建立一个类。在读入数据时进行多次循环遍历,从上到下依次提取出对应类,为类图、状态图、顺序图等建立出树状结构。在执行指令时也是从上到下逐层判断对应元素是否产生异常(重名或没有等情况),如果产生了就直接抛出异常即可,如果没有产生就继续调用下一层的对应方法即可。

四个单元架构设计思维及OO方法理解

第一单元中主要是学习了面向对象层次化的设计思想,对一个表达式进行逐层的分解,建立一个层次树,每个表达式类包含多个项类,每个项类又包含多个因子类,而因子类又可能包含表达式,构成一个层次结构。我认为,无论是递归下降法,将输入逐层解析,还是对括号展开时逐层的调用对应方法展开和合并,都是一种层次化的思想。

第二单元中主要是将多线程和面向对象结合,其中涉及到了线程间的协同与合作,还有许多轮询和死锁等多线程安全方面的问题。经过这一单元学习,我对多线程编程有了一个初步的了解,同时也学习到了许多设计模式,如生产者消费者模式,流水线模式等。

第三单元主要是学习了JML规格以及契约式编程。这种严谨、细致的描述以及编程方法使得编写出的程序更加可靠。另外,还训练了将算法与面向对象结合。

第四单元则是学习了UML图的结构和表述,对UML图中各个元素的含义以及UML图的画法有了一个大致的了解。而架构设计方面与第一单元类似,也是体现的层次化设计的思想。

四个单元测试理解与实践

前三个单元中的测试我基本都是采用数据生成+运行+正确性检验的自动化测试方法。其中第一单元测试数据生成的方法采用与递归下降类似的思路,逐层的生成数据再组合到一起,正确性检验方面则利用sympy来检验。第二单元中正确性检验需要自己写程序进行特判,另外还利用了多线程测试来提高效率。第三单元中,生成的数据需要尽量覆盖各种情况,另外还尝试了一下单元测试的方法,不过最后还是放弃了。第四单元的测试由于临近期末,再加上数据比较难以生成,就没有写测试的程序,主要是通过手动画图,构造一些想到的边界数据来进行测试。

课程收获

经过这一个学期OO课的锻炼,我感觉自己的收获还是非常大的。

首先是学习到了面向对象的设计思想,并运用在实战中,还记得开学初时第一次作业完全没想到过表达式、项、因子也能做一个类,感觉很不适应,还想利用以前面向过程的方法去解决,到现在再回看就感觉自然的多了,对面向对象的理解也更深入了。其次是提升了代码能力,经过一学期的训练,我从原先最多写一百多行的程序到现在可以完成一个一千多行的小型程序,当然这也是得力于面向对象的思想,将一个程序分拆成多个部分完成并相互协作,有效的减少了程序的复杂度。另外,除了第四单元外,每个单元我都写了一个简单的测试程序,提升了自己的测试能力。还有就是自己的代码风格有了较大的提升,现在再回看原来自己写的程序,完全不带空格,已经不忍直视了。

改进建议

1.希望可以压缩一下三、四单元的作业,个人感觉在三、四单元的收获远没有前面两个单元的大,并且还会拖到考期还要写OO作业,就很难受。如果可以的话,尽量将第三、四单元压缩一下,减少一到两次作业比较好。

2.希望可以公布一下每次课上实验的答案以及分数。

3.希望可以再改进一下第四单元指导书,表述的再清晰一些。

总的来说,OO确实是一门非常好的课,我在其中投入了许多精力与时间,也收获到了很多,希望OO课可以越来越好。

posted @ 2022-06-29 10:42  sicongl  阅读(18)  评论(1编辑  收藏  举报