北航oo第四单元总结及课程总结

第四单元总结及课程总结

第四单元架构

构建

因为前两次作业是不断增量的,所以我就拿第二次作业来说。我建立了自己的类Myclass、Myinter、Myinteraction、Myop、Mystate、MyUmlGeneralInteraction分别用于存放对应的UmlElement以及与关系相关的各种信息,如Myclass类:

在MyUmlGeneralInteraction的构造函数中就分析传入的Umlelements数组,根据其属性实例化自己的类、接口等,当然这个过程是分为多次遍历的,如在遍历所有属性为UmlOperation的UmlElement时,就必须先把所有的UmlClass遍历并创建完,因为UmlOperation是要存在对应的UmlClass中的。其他情况也以此类推。

查询

本单元查询的难点主要在于涉及到父类的查询如getImplementInterfaceList()函数,这个函数不仅要考虑类的继承,还要考虑接口的继承,因此我在Myclass和Myinter中都设置了递归查找的函数,如下图所示:

检查

第三次作业正好赶上了考期时间容不得我细想,所以对于每个检查函数,我直接最外层如Myclass等写了BFS查找,没有像之前一样写成递归的形式。如下图所示:

其中比较有体会的是r001和r002。r001一定要判断name为null的情况。r002指导书说的不是很清楚,有很多人可能上来会想一个一个环来查,这样很麻烦,也会有很多重复。我一开始也是这么写的,但我转念一想,既然要查的是环,那这个环上的每个c类或接口都成环了呀,那我岂不是只要遍历所有的类和接口,看看他的所有父类有没有就是本身的,再把所有这样的类或接口存在一个数组里不就好了嘛。

UML类图如下:

四个单元中架构设计及OO方法理解的演进

第一单元:第一单元可以说是最痛苦的一个单元,重构的过程充满了困难。网上也没有关于递归下降的系统讲解,只能根据学长的类图往上套。这一个单元是对面向对象的思想体会的最充分的一个单元,如果不把一个多项式拆分成乘法类、加法类,根本就做不出来。递归下降的结构很有用,能够完全自己来实现很有成就感。

第二单元:电梯最懵的只是第一单元,刚接触多线程完全不知道怎么实现,百度一堆教程也不知道该信哪个,还是在做了课上实验后才有了系统的理解。简单来说,就是一个channel线程负责输入,一个elevator线程负责运行,电梯自带一个在电梯里的人的数组,在外部还有一个queues类用来存各个电梯对应的等待人队列。只要理解了生产者消费者模式这个单元的实现还是不难的。

第三单元:第三单元本质上来说没有啥架构设计,但问题就在于强测数据卡了ctle,这就导致直接BFS莽上去强测会拉跨。因此只能采用了cache的思想以及并查集算法。这一个单元说实在的感觉没有很“面向对象”。

第四单元:第四单元的架构设计主要在于如何存储UmlElement数组,分析有哪些元素必须要建立自己的类,事实上也就是要把最顶层的类、接口、状态机、时序图的相互作用建立自己的类,然后将其他的UmlElement存入其中。

四个单元中测试理解与实践的演进

说起来很惭愧,我的测试并不能称之为演进,因为我做测试最多的,且唯一一次写了评测机的是第一单元。第一单元要考虑的情况是在太多,我在测试了基本操作之后,直接开始想特殊情况,如三个连续+-号,sin(+ 030)等等,然后使用评测机测了几次,将出错数据不断简化,直导找到出错的那一部分数据,就这样找到了一部分BUG。

第二单元作业的BUG主要在于轮询ctle,这个只要分析自己电梯和调度器的运行流程就可以发现。

此外就是在第三单元开始接触的Junit,我使用Junit的顺序主要就是先编写整体的测试程序看看有没有大错,但后再为每个函数编写测试程序,设计一些数据进行测试,Junit中也有很多有用的断言方式可供使用。

课程收获

  1. java的使用以及idea的使用
  2. 面向对象的编程思想,将一个过程拆解成很多个类分别实现
  3. 重温了在数据结构课程中学到的BFS、DFS、迪杰斯特拉算法,新掌握了并查集算法以及递归下降的方法
  4. 利用cache以及算法来优化程序性能
  5. 多线程的实现方式,多线程的各种模式
  6. 利用Junit进行系统全面自动测试
  7. 如何根据JML规格进行编程
  8. UML类图、时序图、状态图的结构,内在逻辑
  9. 每周看到弱测中测全是绿色时的快乐,当然也有强测全绿的快乐

改进建议

  1. 多线程部分如果不考虑优化的话,后两次作业实际上是可以瞬间完成的,而优化又与多线程关系不大,因此我认为可以不用拘泥于一个电梯,而让同学们在第二单元体会更多的多线程模式。
  2. 第四单元有关于格式检查的指导书很不容易理解,歧义很多,建议能给出对应的实例。
  3. 课上实验的排课时间有些靠后,事实证明课上实验在第一二四单元对作业的帮助很大,而我们总是在周三到周五感觉摸不到头脑(第一次作业),希望能将课上实验时间提前。
posted @ 2021-06-26 16:34  phm19231049  阅读(73)  评论(1编辑  收藏  举报