BUAA_2022_OO_Unit4总结 && 学期总结

2022_OO第三单元总结 && 学期总结

一、架构迭代过程

1.hw13 建立类图数据结构

  作为第四单元的第一次作业,hw13指令的难度不是很大,主要在于类图数据结构的架构上,由于之前对uml图了解不多,也不知道怎么根据给出的uml代码构建数据结构,导致一开始无从下手,最后还是通过学习往届学长的博客,想了很久才知道自己要干什么。
  第一次的架构就是参考指导书末尾的parent和reference限定条件,建立了新的类用于存储父子关系等,通过分层次遍历构造对应的层次结构;除此之外,还在MyImplementation类中构建了一个“总表”,存放所有的元素及其id,便于指令查询。
image

2.hw14 建立顺序图、状态图的数据结构

  在上一次作业的基础上,明白了具体要做什么,这次作业就显得更加简单,构建难度相较类图也更低,所以这次难点主要在指令上,比如关键状态的判断等等。
  第二次架构时整理了文件中自建的接口和类,在hw13的基础上修修补补,增添几个方法就完成了hw14的数据结构构建,总的来说架构改动不大,难度较低
image

3.hw15 实现模型有效性检查

  这次作业没有增加新类型图,所以数据结构构造大部分沿用了hw14,变更了一小部分用于有效性检查,另外在有效性检查的类中增添了对应的方法。
  这次作业主要就是增加指令,实现对数据结构的检查,但是由于之前所有的指令都在MyImplementation内实现,导致该类过于臃肿,所以进行了优化,将类图、顺序图、状态图和有效性检查指令的实现分别放在了MyClassMethod、MySequenceMethod、MyStateMethod和MyCheck中,MyImplementation只需调用方法即可。
image

二、架构设计思维及OO方法理解的演进

  第一单元,由于对面向对象编程方法还不熟悉,此前也没接触过如此巨大的设计难度和代码量,产生了严重的“水土不服” ,最终在同学的帮助下才磕磕绊绊完成了作业。虽然第一单元过的十分艰难,但也让我养成了写代码前先构思的习惯,为接下来几个单元打下了基础。
  第二单元,个人认为是最有面向对象特色的单元,也是难度很高的一个单元,不仅要实现每个电梯各自的功能,还要考虑线程安全问题,以及优化问题等等,但在提前预习后还是比较顺利地通过了中测,最遗憾的一个点是第二次作业没有对系统做轮询的检查,导致强测只过了一个点,这也促使我后来的测试更加完善和谨慎。
  第三单元,对我来说是电梯后的放松,以为架构已经给出,只要理解jml的用意,并加以算法优化即可,这单元我学会了读jml,以及利用规格检查自己的代码。
  第四单元,个人感觉难度大于第三单元,主要难在对uml的不熟悉,一开始不知道自己要写什么,等到基础架构完成后就比较简单了,主要学到了uml三大图的结构和各部分元素的功能,也对如何画uml图有了更深刻的认识。

三、测试理解与实践的演进

  经过四个单元的磨练,我对程序测试也有了更深刻的理解。
  首先是刚写完代码后,先自己构造一些简单的样例,结合指导书给出的测试样例进行测试,保证程序的基本功能没问题;然后是对一些核心方法进行单元测试,比如并查集算法,图的算法和调度算法等等;最后是构造一些边界数据进行强测,并与同学交换bug数据、对拍等等

四、课程收获

  首先就是学到了面向对象的编程方法,以前学习c语言、数据结构都是面向过程编程,这门课为我们的代码实现提供了面向对象编程的新思路;
  其次,我的编程能力和代码规范也得到了提高,有时候不经意间就能做出一些小优化;checkstyle用久了,有时候不用检查代码规范都能自动写成规范形式,培养了更好的编码习惯。
  另外,与其他大佬一起讨论问题也让我学到了许多,一起对拍找出了我许多的bug,也让我学到了一些大佬的编程方式和习惯。

五、课程建议

  - 个人感觉oo的理论课和作业还是有一点脱节,有的知识讲的有点滞后,导致想运用只能重构代码;
  - 建议增加预习环节,每个单元第一次作业几乎都是从零开始,完全不知道自己要写什么,以及如何实现作业要求的功能;
  - 建议适当调节一下每个单元的难度,比如第一单元相比三、四单元实在是难得多,刚开始接触面向对象就被第一单元狠狠的折磨(

posted @ 2022-06-21 14:13  wuhuaka  阅读(32)  评论(0编辑  收藏  举报