OO完结篇-第四单元小结

OO第四单元小结    

一.作业架构分析。

1.第一次作业

       本次作业需要完成UML类图查询。

       难点在于初次接触UML,需要对UML进行一定程度的学习和理解。

       思路主要是根据每个传进来的element获取其type然后进行分类以及层次化处理,由上而下,先找到所有的接口和类,构建Myclass和MyInterface,来管理类和接口的下层元素以及继承实现关系等信息。由于查询考虑到继承,所以还需要进行适当的信息建模,以便进行记忆化递归搜索。

       具体架构如图:

 

2.第二次作业

  本次作业需要完成UML顺序图和状态图的查询,检测三个规则。

  难点在于三个规则的查询以及新的两个图的建模。

        首先根据在第一次作业基础上,新建一个类来检查有效性,考虑使用离散化建模后来进行循环继承的查询。其余的思路同第一次作业,从上往下建模。

        具体架构如图:

 

 

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

第一单元:多项式求导

第一次作业现在看来虽然简单,但是对于当时仅达到了解基本语法水平的我还是比较困难,主要是在于类之间的数据交互以及层次化地设计。但是第一二次作业我都使用了大正则来进行错误格式的判断,以及没有将各种多项式运算组合分散开,导致第三次作业完成得非常困难。但是完成第三次作业之后,发现之后的作业在层次化、基本架构有了较高的提升,代码复用性也慢慢变好。

第二单元:电梯

第二单元是非常有特色的也是发挥上限很高的一个单元。三次作业基本架构都是输入流、调度器、电梯三个线程一起,三者的同步互斥是重点和难点。输入流与调度器共享等待队列,调度器和各个电梯又共享新的待执行队列和单例化后的第二部分指令队列。正确性比较容易完成,但是优化有一定的难度。

完成电梯单元后,对各个对象之间的数据共享的同步互斥有了一定程度的理解,加深了对对象之间的交互、依赖的理解以及进一步提高了自己层次化设计的水平。

第三单元:规格化设计

第三单元我觉得是比较简单的一个单元,原因有二:官方包的提供极大简化了我们的代码设计;之前的训练让自己有了一定的提升。在读懂JML规格后,要做的事情就是:传入数据,离散化建模,统一算法。算法主要使用的是floyd算法,简单高效。层次主要就是path图和path内的节点列的管理。

这个单元的三次作业的代码复用性都明显比前两个单元的好很多,我认为这就是规格化设计的能力和魅力,严谨明确,让自己提前和规范设计的能力有了一定的提升。

前两个单元自己并没有多次使用继承和多态的特点,而这个单元的训练,对OO独特的继承、多态的方法有了更深层次的理解。

第四单元:UML解析

UML类图、顺序图、状态图主要是为了锻炼我们工程化设计的能力,这个单元主要在于对UML各个元素内部要素的理解以及对元素之间层次化的树的关系的理解。理解完成后,就要综合前三单元学到的知识,来对元素分类、层次化设计、设计适当的查询算法。完成这个单元的过程中,我对层次化的设计、对象之间的交互、共享数据的保护、各个类和各个方法的分工等工作的完成流畅度和明显好于前三个单元,可见经过前面三个单元的训练,不知不觉地我们在OO道路上已经前进了不少。

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

测试的目的一直都是来确认程序的正确性和性能优劣。

我一个学期以来都采用了比较low的测试方法:手动捏数据。根据自己在代码过程中的bug数据,自己总结的一些极端情况的数据以及室友提供的部分大测试数据,来进行自测和互测。

尽管一直都是手搓数据点,但是从第一二单元bug重重到第三四单元bug较少的情况来看,一是随着训练的推进自己的代码水平有了一定提升,二是测试数据的构造思路有了一定的改善,能更快的发现哪里容易有坑,也能较快地对之进行修复。

四.课程收获

自动化测试主要是用于代码的覆盖测试和高效测试,虽然我自己实践不足,所以只有在代码思路设计方面多下功夫。几乎每一次作业我都会在动手写代码之前写一份简要的思路设计,这样做的好处我觉得主要是有:方便自己将一个大问题分成若干小问题,逐个解决;从设计上就杜绝了大部分可能会出现的bug。随着训练的推进,我发现这种方法越来越好用,并且代码时间越来越短,bug出现的概率越来越小,同时也能加深对面向对象方法的理解,提升代码的设计能力。

四个单元,11次代码作业,这一路走来跌跌撞撞,但是也学到了很多很多东西:无论是从面向过程到面向对象,还是从一main到底到多个类的层次化设计,亦或是从艰难几十行到顺利完成千行工程代码,从OO这门课程学到的知识是良多的,但更重要的是在这修罗道路上前进的同时,自己变得更加坚强了。

五.一些建议

1.第一单元建议先来一次较为简单的JML规格作业,能够快速地帮助我们理解层次化设计和OO特点。

2.我认为互测是OO这门课的一大特色以及在助教的努力下,其进步是明显的。但是实际上,我们对互测的热情从第一单元到第三单元是递减的(可能数据体现不出来),或者说几乎没有看别人代码,而是盲狙或者自动化测试,似乎与互测的目的背道而驰,或许互测机制需要更好地完善。

3.说实话,实验课的体验很不好,主要是上完新课下午就去实验,一开始难度太大,后来是现场自学,希望实验课降低分数比例或者改进实验课。

猜你喜欢

转载自www.cnblogs.com/qmxdzy/p/11074931.html