OO_第四单元总结

OO_第四单元总结

一、第四单元架构设计

本单元主要的目标是实现一个UML的解析器,使其能支持状态图,顺序图,类图的解析,并能支持各种要求的查询指令和根据UML的规则进行规范性的验证。在依次检查了九条规则后,如果
过程中出现异常则抛出异常并推出。若无异常则正常执行查询指令给出相应输出。
本单元三次作业我的类设计如下所示,在Mymain中创建MyImplementation的实例,通过调用官方包的方法,将UML的信息解析完毕后生成element的元素,并可以通过官方的方法获取
element元素的多种信息,按照elementType对element元素进行分类和信息存储。将状态图信息在MyStateMachine中进行存储和信息处理,将顺序图信息在MyInteraction中进行
存储处理,对于类图信息则分为类的操作和类在MyOperation以及MyClass中分别处理。
丨--MyClass.java
丨--MyImplementation.java
丨--MyInteraction.java
丨--Mymain.java
丨--MyOperation.java
丨--MyStateMachine.java

二、总结四个单元中架构设计思维及OO方法理解的演进

第一单元的作业内容为对表达式的解析,本单元侧重于通过建立层级结构对表达式进行递归下降的层层解析直到得到正确结果。因此在本单元我们初步接触面向对象式的编程方法,学习了继承,
封装,多态等方法。
在本单元的架构设计方面,则主要根据对每种函数,每种运算规则分别建立类进行解析,特别的对于自定义函数和求和函数可以在代入之后再进行计算。

第二单元以电梯运行策略为背景,本单元主要学习的是多线程的使用,这是一种对我来说很新颖的设计架构模式,对于各个线程之间如何进行信息的交互和功能之间的协作都非常有意思,并且
还需要考虑到线程之间的互斥、死锁、线程安全等问题。另外本单元作业还关注到了代码的运行效率等问题,以往我只关注到代码运行的正确性,对于性能的考究较少。在本单元如果未能采用正
确的电梯运行策略或者过多的使用synchronized去互斥降低代码运行效率,是无法通过测试的。
在本单元的架构设计方面,则主要分为三类线程。输入类线程,调度器类线程和电梯类线程来进行设计,在设计过程中要特别注意线程间的信息交互和线程安全的问题。

第三单元以构建社交网络为背景,通过阅读和理解JML规格化的语言,去实现规格约束下的方法,最后这些类和方法组合成类似社交网络信息交互的各种功能。本单元除了让我们熟悉和掌握JML
规格化的语言还通过几次作业中具体方法的实现,学习了几种经典的算法,包括并查集、最小生成树、最短路径算法等,并且对算法实现的时间复杂度进行约束,让我们能关注代码实现的性能问
题。本单元由于是设计好的架构模式,更多的关注方法的具体实现,因此架构设计不多赘述。

第四单元以设计实现UML的解析器为背景,有点类似于第一单元的层次化的设计,加深了我们对于层次化设计模式的理解。

三、四个单元测试理解和实践推进

一、
  一开始大多采用靠个人理解手搓数据,按照自己觉得需要注意的边界条件来测试数据,这样测试带来的覆盖性很弱,而且数据量很小,能发现的bug也是少之又少。
二、
  采用自动生成数据的方式,随机生成测试数据,相比较于第一种带来了更多的数据量,但是完全随机带来的边界条件的测试样例也很少。这种情况测试方法我主要运用在第二单元电梯测试,
因为此时需要构造更大的数据量去发现可能的线程安全问题。
三、
  单元测试,利用junit进行测试。可以按照一定的逻辑来生成数据并测试,个人感觉覆盖性较好,有利于发现更多的bug。至于更近一步的自己构造自动评测机,只有白嫖过别人一次,未曾尝试。

四、课程收获

掌握了JAVA这门语言的基础用法和语法,学会了层次化的设计思想和设计方式,学会了继承、多态、封装等的运用。

熟悉了多线程的编程思想,了解了多线程编程带来的便利和需要注意的线程安全问题。

学会了阅读JML规格化的语言和书写JML语言

熟悉了UML类图的结构,能够用程序化语言进行一定的解析。

建立了面向对象的编程思想,学习了一些基本的设计模式,学习到了一些算法的高性能实现模式,学会不仅仅依赖评测机去测试程序,而要自己去测试程序的性能和功能的正确。另外由于研讨课的

存在也认识了更多的朋友,和同学之间有了更深入的交流。评测的提交顺带还学会了一些git的使用方式,总之这门课程让我受益匪浅,感慨良多。

五、个人建议

一、感觉课程一开始的难度过大了,如果能在开始之前给出更多的时间预先学习一些知识或者给一些铺垫会让我们在第一单元完成作业上更加顺利。

二、对于实验课感觉很迷茫,一个是本身编程能力不是太强阅读起代码速度慢导致的时间不够,另一个是即使完成了作业也不知道对错,在实验课中收获不多,如果在实验课结束后在课下做成必须

完成的小作业,并且需要评测可能会更好。

三、第三单元的JML语言不仅在阅读上,在书写上应该也做一定要求,仅有实验课和研讨课写过极少还不知道对错的JML语言,在这块很虚。


 

posted @ 2022-06-27 09:38  zzb不是bzz  阅读(31)  评论(0编辑  收藏  举报