OO第四单元总结

OO第四单元总结

架构设计

第四单元作业围绕UML展开,需要在理解UML类图、顺序图、状态图中的各种元素及个元素间的关系的基础上对输入的UML图进行解析,进行状态查询及规格检查。根据每次作业的要求,我将一些元素进行了封装,保存部分属性,方便查询。

第十三次作业

第十三次作业主要为实现类图的建模,整体架构如图。在理解了各元素间的关系后,我通过三层向下逐层解析类图,具体顺序如下:

第一层第二层第三层
Class, Interface, Association_End

Operation, Attribute, Interface_Realization,

Generalization, Association

Parameter

剩下就是对类图的一些属性进行查询,主要难点在于几个递归,为了提高效率设置了缓存机制。

第十四次作业

第十四次作业增加了时序图和状态图的建模,并增加了对这两类图一些简单属性的查询。同样的,对这两种图也分三层进行解析,具体顺序如下:

类图同第十三次作业

时序图:

第一层第二层第三层
State_Machine, Region State, Final_State, Pseudo_State Transition, Event

状态图:

第一层第二层第三层
Interaction Lifeline Message

第十五次作业

本次作业较上次增加了8个合法性检查,整体架构与上次作业一致,读取层次也无改变。一些合法性检查在解析过程中便可完成,如R005、R008等,对于查询重复继承/实现接口的检查可能出现一接口继承同一个接口多次,故把之前的一些HashSet改为了ArrayList进行遍历。

设计架构及对OO的理解演进

第一单元

第一单元可以说是这学期最难的一单元也是OO思想体现最明显的单元,第一次作业比较简单,通过实验课的架构get到了一些些OO的设计,以此为基础稍作修改就行了,但是第二次作业难度直接飙升,架构思考许久才想明白,进行重构,按表达式——项——因子进行解析,并将项根据其函数类别抽象分出几个类,各自编写求导方法和toString方法,每个类只需要完成自己的任务。通过第一单元让我对OO有了初步而又深刻的理解,但性能方面有待提升。

第二单元

第二单元延续OO的设计思想,同时引入了多线程的概念,要求对各个对象之间的交互进行一定的理解。实现多线程电梯,全程按照生产者——消费者模式写的架构,并在后两次作业加入调度器,主要难点还是在于多线程的线程安全问题。

第三单元

本单元以课程组所给的架构为基础,阅读JML实现相应函数的功能,通过缓冲机制及优化的算法避免性能爆炸。本单元主要让我掌握了JML规格的阅读,也体会到了JML书写的复杂及困难,并且也复习了部分数据结构和算法的知识如并查集、堆优化dij等。

第四单元

本单元UML的结构在课上已经学习,我们只需要根据作业的需求进行架构设计,如前文所述,我根据要求对每种类型的图进行分层解析,并封装几个比较重要的类将相应的属性存入,在这几个类中进行相应的查询。

测试理解与实践

第一单元

通过随机生成数据以及手动构造一些极端数据进行测试

第二单元

主要测试性能,针对每种电梯每种模式构造对应的边界极端数据。

第三单元

采取阅读代码+生成数据进行测试。先通过阅读代码在我认为比较可能出问题的几个地方进行检查然后再进行覆盖性测试及极端性能测试。

第四单元

自己画一些奇奇怪怪的staruml图再用官方包导出进行对拍测试。

课程收获

  • 学会了基础的java和python,能够熟练地使用各种容器了

  • 较为深刻的理解了OO思想,并意识到了架构的重要性,高内聚低耦合的思想牢记在心

  • 亲手实践了OS课上学习的多线程(虽然是先实践后学习

  • 复习了一些数据结构和算法的知识

改进建议

  • 实验课提供一些反馈

  • 后两单元的规格表述可能存在一些不明确的问题,可以将本届同学们的一些疑问点在今后更明确的指出

  • JML单元或许可以增加一些书写规格的要求?但是如何测试似乎是个问题。

  • 希望在每单元结束后能在经过同学允许的情况下选出部分优秀同学的架构进行分享

最后的最后,感谢各位老师和助教一学期的辛勤付出,OO课是目前为止体验最好的一门课了,不仅学到了许多知识还让自己能更合理的做好时间规划,十分感谢!!

posted @ 2021-06-26 11:33  Sharpzz  阅读(43)  评论(0编辑  收藏  举报