面向对象第四次作业分析和课程总结

(1)总结本单元两次作业的架构设计

本单元作业主题是熟悉UML的内部结构。其中题目已经实现了umlelement,umlclass等类,我们需要实现的是umlgeneration接口,用来查找查询操作。

  • 第一次作业
    对于作业的架构,首先自然就会想到按照实际的逻辑,建立myclass等类,其中包括attribute,operation等属性。但是最后我没有选择使用这种架构。我想到了直接利用题目已经实现的一些类,而我只需要建立这些数据之间对应就可以了。于是我建立了myelement类用来实现对应数据的查找,这造成的结果就是我在这个类中构建了许多的容器以及嵌套容器。。。

  • 第二次作业

    第二次作业是在第一次作业的基础上完成的。第一次作业要求的是有关类图的操作,而第二次作业增加了状态图和顺序图。由于第二次类图和第一次类图完全一样,所以我直接将第一次作业的类图复制了过来,并且将它的数据映射实现的部分和数据查询的部分进行了分离,两者之间是继承关系,分别是myclassmodel和myclassinteraction。而对于顺序图和状态图也进行了类似的处理。除此之外,我建立了Myelement类用来将所有的umlelement进行分类处理并分入对应的图中。MyElemet与类图、顺序图、状态图之间的关系是关联关系。最后MyUmlGeneration通过继承MyElement类来实现它的功能。

(2)总结自己在四个单元中架构设计及OO方法理解的演进

  • 第一单元是我初次接触面向对象思想,甚至可以说只是利用面向对象语言,让面向过程更容易罢了。这一单元最大的收获是让我对可扩展性有了更好的认识,也是从这一单元的第二次作业,我开始在每次作业前认真思考架构以及代码的可读性和扩展性,算是面向对象的起步吧。
  • 第二单元也是第一次接触线程和多线程,这对于我来说是一个比较新的东西,不过得益于第一次总结的教训(认真思考架构)以及认真学习ppt和os的帮助,这一单元过得还算比较顺利。这一单元,我开始刻意去降低代码的复杂度,从这一单元以后我几乎没有重构过架构。同时,我也开始学习使用设计模式,主要是单例模式。
  • 第三单元主要内容是JML的熟悉和使用,也是相对比较简单的内容,有了题目提供的JML,写起代码来如鱼得水,这一单元的模式和之前的开始有所不同,感觉架构不用刻意去思考,因为自己需要实现的东西比较少。这一单元最大的收获大概就是学到了JML这一有用的规格抽象工具。
  • 第四单元主要内容是UML的熟悉和使用,作业内容看上去比较简单,想法很自然,并且只要熟悉了UML内部的结构,写起来就很顺,但是代码量却是开始没有想象到的大,也是让我感觉比较花时间的一个单元。这一单元也让我更加感觉到面向对象在遇到代码量巨大的情况下的方便。

(3)总结自己在四个单元中测试理解与实践的演进

在OO的这个体系中,测试永远都是无比重要的一环,不亚于代码实现环节。

  • 第一单元自己蠢到没有想到自动化测试,而是完全靠手工测试,导致出现了一些由于没有充分考虑所有情况而出现的bug。

  • 第二单元,前两次还是使用手工测试,但是第三次作业发现了自动测试这一宝藏做法,从此便学习利用了起来,可以说,自动化测试是最省力最舒服的做法。

  • 第三单元的bug修复,除了手工和自动的黑盒测试,课程组还给我们提供了一种方法,那就是基于Junit的白盒测试方法,但是说实话,由于本单元作业比较简单,我几乎没怎么使用Junit,而是依然使用自动和手动测试相结合的方法。

  • 第四单元,由于我的代码规定了一些约束限制,不太适合使用随机测试,于是我使用了手工测试的方法,但是后果是严重的,没有考虑完全,最后相当于是白给了一次作业,同时又因为考试记错了bug修复的时间,然后错过了bug修复(哭晕)。这个教训告诉我,bug修复要趁早,免得到时候忘记时间或者忘记bug是啥。

    总的来说,我总结出来比较靠谱的黑盒测试方法就是手工和自动相结合的方法,自动测试固然方便并且测试比较充分,但是难免因为一些极特殊的测试数据翻车,所以还是要利用手工测试进行最后的“查漏补缺”。

(4)总结自己的课程收获

课程收获主要可以分为面向对象,代码可维护性,工程能力和测试几个方面。

  • 最大的收获就是接触到了面向对象思想,而且有一定的实用能力。虽然只是简单接触,熟悉了大多数特性,但是我感觉欠缺的还挺多,就像以前助教和一些有经验的大佬所说,oo是很难的,需要多年的编程经验才算是学会。
  • 由于oo的模式是分为一个个的单元,而单元内部又紧密联系,所以其实对代码的可扩展性和可读性要求很高,并且由于代码风格的检查,也让我更加注重代码风格问题,渐渐养成了习惯。
  • 千行以内代码的工程能力也是一个比较大的收获。这可以说是和数据结构,程序设计课程完全不一样的,是一个比较大的提升。
  • 第四个提升就是在测试方面了,测试能力本来就是oo的主要训练目标之一,经过十次作业的学习,我觉得自己使用自动化测试也越来越熟练,同时也学到了利用Junit进行白盒测试的方法。

(5)立足于自己的体会给课程提三个具体改进建议

  • 关于课程节奏和题目难度的一些建议

    本课程最主要的内容是自己动手完成作业以此来锻炼面向对象编程的能力,但是这样的课程设计导致对于面向对象的基础知识不能够面面俱到,作业只能有所侧重,这是可以理解的,更多的还是依靠我们课后的学习。

    但是有时候为了完成作业,不能有效地练习到面向对象的相关内容,有种舍本逐末的感觉,我觉得出现这个问题的主要原因可能是因为课程节奏略快,第一单元内容较难。第一单元的主要目的应该是让我们掌握面向对象的三大特性,即封装,继承,多态,但是我们刚刚接触到面向对象,对这三大特性的掌握实在有限,我承认第一次作业很简单,但是后面的作业难度提升很大,以至于我们甚至没有时间去深入了解这些重要的知识,反而把时间花在了对拍,做题上。而当我终于完成了作业,想要深入了解封装继承多态的时候,又不得不把时间和精力投入到多线程上。。。

    因此,我觉得通过本课程,学习到的oo方面的内容实在有限,甚至到现在,我都不敢说自己学会了封装继承和多态。举个具体的例子,这么多次作业,我从来没有自己使用过接口,虽然我觉得它很重要,但是我根本不知道该怎么使用,什么时候能用。

    或许这个问题是因为我的天资不高,能力有限,但是窃以为,像我这样的人可能不少,所以我希望课程组可以考虑一下这个问题,调整一下作业难度和作业节奏,以及在课上实验的环节以巩固oo基础知识为目的,专项训练一下。节奏快,难度大,确实能在一些方面大幅度提升我们的能力,但是在另外一些方面可能会适得其反。希望老师们和助教大大们可以参考一下。

  • 对于实验课的建议

    我想,对实验课的设置,可能有很多人都想吐槽吧。我觉得实验课的内容其实还是不错的,确实能够帮我们理解课上的一些内容,但是由于实验课的时长和时间的设置,实验课就成了一个本意很好,但是没什么实际作用的环节。首先,时间短,就注定不能学到很多东西,思考的时间也很有限。其次,每次刚刚上完课就去参加实验课,我们还来不及反应消化课上的知识,很难完成实验课上的内容,当然也很难通过实验课将知识消化,理解,吸收,更多的情况是,想办法把实验完成,但是根本不知道自己做了啥用的是什么,有点鸡肋。

    我的一点点建议是,可以把实验课调到和理论课不在一天,而且利用晚上的时间,让实验课的时间长一点。

  • 对于第四单元作业的建议

    第四单元的指导书确实存在许多表述不清楚,模棱两可的问题,甚至指导书的示例和正确结果不一样。前一单元学习了JML规格语言,我原以为第四单元的要求也会用JML,结果发现并不是。可能助教大大们实在没有时间了,毕竟课程体系今年第一年有了很大的变化,时间有限,但是我相信在以后这些问题一定能够得到完善的。

    总之,oo本来就是一门比较有争议的课程,但是我们可以感受到它明显的进步和变化的,相信在老师们和助教们的努力下,课程一定会越来越完善,越来越好。

猜你喜欢

转载自www.cnblogs.com/hbstudy/p/11078496.html