OO第四单元总结

一、总结本单元两次作业架构

如图所示,这两张UML图即是我这两次作业的整体架构。

具体来说,可以分成两部分:读入和查询

  1. 读入:根据传入的数组内UMLElement元素,读入图,需要分成3次读入

    1)读入类、接口、关联、状态机、顺序图最高级对应的UMLElement,并相应存储

    2)读入方法、属性、继承关系、接口实现关系、关联对端、状态机和顺序图画布对应的UMLElement,并相应存储

    3)读入方法的参数、状态、生命线等其他剩余元素,并相应存储

    这样做是因为存储过程中会涉及层次关系,为防止乱序的输入指令,而只能3次读入

  2. 查询:根据需求,进行相应的检验或查询操作

  分别建立了如图所示的类来分别存储类结构、接口结构、关联结构、顺序图、状态图等

 

二、架构设计及OO方法理解

这里对已经过去的四个单元的作业做一个回顾与反思

U1 多项式求导

  这一单元的难点可以概括为对多项式的读入与识别,需要巧妙的利用正则表达式找到正确数值,并排除错误公式,尤其到了第三次作业需要将读入识别过程与递归相结合

  这一单元由于刚刚接触OO,对其思想还不是很熟悉,第一次作业基本就是面向过程,通过hack时看别人的程序,第二三次作业这一情况略有好转,可以将表达式分割成项、因子、式子分别处理,可以说是面向对象的入门

U2 多线程电梯

  这一单元的难点在于需要接触线程的概念,另一难点在于调度策略的优化。两者结合考虑,既要尽可能快的完成任务,又要考虑线程互斥等等问题

  尤其到了第三次作业,多个电梯如何较快且不冲突调度也是设计架构的一大难点;这里,更优的方式是三个电梯设计一个共同调度器,所有等待乘客位于同一等待队列,这样可以更大程度避免乘客等待,不过需要妥善处理好线程间的关系,避免死锁

U3 地图的设计

  这一单元主要是为了加强我们对JML的理解,利用给定规格完成图的构建并实现需要的操作。

  在理解了JML规格后,这单元作业相对就好理解了;但另一个难点出现在了第三次作业的方法需求上:如何改进最短路径算法从而使其可以解决票价问题、满意度问题、换乘问题;这里我采用的方式是先将每条路径生成完全图在应用最短路径算法即可

U4 解析UML图

  这次作业是解析UML图,其实其重点在于理解UML图的构成,在较为深入的理解类图、顺序图、状态图后才能较好的完成这次作业,具体架构上面已经写过,这里就不细说了

 

三、测试方法

在这一系列课程中,我主要采用的测试方法是以下两种:

  1. 看代码分析,这种方式主要是在第一次作业中应用,通过读代码,“干瞪”出bug

  2. 利用评测机,大量随机数据测试;针对指导书给定的数据限制,自己编写评测机并测试。毕竟很多小bug是由于惯性思维而产生,光看代码思考很可能会和之前陷入相同的思维误区,而大量的随机数据则可在一等程度上解决这种问题。因此,这种方法是我在第二三四单元主要的测试方法。

另外,第三单元还采用了JUnit进行测试

 

四、课程收获

这一系列的作业让我还是收益颇多的,具体来说,有以下几点

  1. 学习了JAVA语言,并通过学习对面向对象的思想有了一定深度的理解,也提升了我编程能力

  2. 锻炼了与人合作,在实现评测机的过程需要与其他同学合作完成,另一方面,也锻炼了与人沟通合作能力

  3. 面对难度复杂度都很大的作业(比如第三四单元的最后一次作业),熬夜肝代码锻炼了我的抗压能力,也让我一次次感受到合理安排时间的必要性

 

五、给OO课程组的三个建议

  1. 希望课程组能更好的内部沟通,指导书能更加明确,比如这最后一次作业,在临近截止的前一天才明确了限制

  2. 希望每次作业的难点和该单元的重点能够统一。比如第三单元第三次作业,虽然这一单元重点在于对JML规格的理解,老师课上讲的重点也是JML;但真正做作业时候的难点则是处理变种的最短路径,这次作业我的大部分时间也是花在了处理最短路径问题上

  3. 希望每次作业的时间能更人性化一点,比如这最后一次作业,虽然有将近两周时间,但从给出作业接口到作业截止也是只有不到5天时间,而这段时间有恰逢考期,又有其他功课需要复习,未免弄的手忙脚乱。

 

最后,衷心感谢OO课教会我的一切,也祝OO课越来越好!

posted @ 2019-06-21 22:30  17231007  阅读(114)  评论(0编辑  收藏  举报