OO第四次博客作业

一、作业架构设计

第一次作业

1、设计思路:

第一次作业主要是对于类图元素的解析,而为了更便捷的处理元素,我使用了多个HashMap来以树状的层次来储存元素,也就是类图本身的树状结构类似的结构,实现了从父元素直接找到相应的子元素,大大降低了遍历与寻找子元素的难度,后续的分析只要注意好各自不同元素的具体属性就能很简单的实现。

2UML类图:

 

3、总结

在确立了合适的程序结构后,在理解uml类图的基础上每个功能我都是比较容易就实现了,但是在寻找接口的实现时,进行图的遍历的过程中没有进行标记,导致菱形图之类的会导致大量的冗余查找,同时由于所有的代码都实现在了我的交互类,因此导致交互类代码过多,过于复杂,此外没有太大问题。

第二次作业

1、设计思路:

由于上一次作业代码太过于集中,同时这一次作业增加了对顺序图和状态图的解析,因此我对程序进行了一定的重构,将各类图的元素储存在各自的Container类中,并在各自的交互类实现任务,最终整合到统一的交互类中。

2UML类图:

3、总结

由于解析的难度比起上次作业大大降低,在上次作业的思路下,可以说这次作业相当简单,但是由于我使用HashMap来模拟树状结构,形如<UmlElement,ArrayList<UmlElement>>,导致部分元素的ArrayList为空,但遍历前却并未考虑,导致代码产生了一定问题,其他方面并无问题。

 

第三次作业

1、设计思路:

第三次作业主要是实现对uml的检查,由于检查是发生在构造后,交互前,因此我将检查的任务下放到了各自的Container类中,由于事先的树状结构,因此实现起来比较简单。

2UML类图:

 

3、总结

作为最后一次作业,我认为这次作业的难度甚至低于第二次,唯一一个bug是因为我对于题目的要求理解不恰当导致,其他方面实现起来并不困难。

二、架构设计和oo方法的演进

第一单元

第一单元初入面向对象,对于架构问题我并没有过多考虑,基本是怎么舒服怎么来,这也导致了在后面作业的迭代时给我造成的大量的麻烦,基本上每次都要重写代码,甚至在最后一次作业时由于自己过于拖延,且代码遗留问题过多造成了严重的后果。

在这一单元中,我主要是学会了如何使用面向对象的方法去实现工程,懂得了如何从对象和关系入手而不是单纯的想一步写一部,同时也在后果中体会到了架构的重要性。

第二单元

第二单元主要是关于多线程,第二次作业时自己对于面向对象已经有了一个比较深的理解,同时在书写代码之前也进行了一定的架构设计,因此在程序的实现过程中遇到的麻烦大大减少,由于我将任务具体分发到各个模块并封装,因此在后续的迭代中也只需要改动相应的模块即可,在改进性能的同时并不会影响程序的正确性,大大提高的书写代码的体验,但是由于对于线程的安全性考虑的不周全,也导致了一定的问题。

第二单元主要是让我学会了多线程的交互,同时也加深了我对于面向对象的理解,重要的是任务的分发与封装,各个部分根据其逻辑与功能关系实现架构与方法,从而在需要方法时只需要调用即可,而不需改动其具体细节,这种面向对象的方法大大提高了实现代码的效率。

第三单元

第三单元主要是关于JML。这个单元对于架构之类的关系因为不是完全由自己设计,只需要按功能实现各个方法,因此可能不是像之前两个单元那么重要,但是也十分重要,在实现功能上这个单元的难度并不高,但是在效率方面却有着很高的要求,因此在数据结构以及算法上有着一定的要求,JML大大减低了程序员理解要求的难度,我们只需要按照规格实现方法即可,但也因此导致这个单元对于单元的测试有着很高的要求,虽然只需要保证每个方法的正确性就能保证整体的正确性。但这也大大提高了对测试的严谨性,全面性的要求,可以说只要能保证测试的完全覆盖就能保证程序的正确。

第四单元

第四单元主要是关于UML。这次作业主要考察的是对于UML的理解,就我个人而言,这一单元只要确立了一个比较好的整体架构,一个单元都几乎不需要太大改动,同时各个方法也能简单实现,因此这个单元主要是考察对于UML的理解与在此之上能不能有一个合理的架构。

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

就测试这方面,我个人而言自己做的并不是很好,初期我几乎并没有做什么测试,但由于第一单元强测大量的问题,让我深刻体会到了测试的重要。但由于自身的懒惰,我几乎没怎么做过自动测试机以及自动测试,大部分都是手动测试,当然,测试是十分重要的,而一个全面的测试既需要对于每个方法的单独测试,也需要整体的黑箱测试,甚至还要有一些模块的测试,我的方法主要是通过构建代表性的数据进行每个方法的独立测试,和整体的黑箱测试,但是由于缺少自动测试,因此对于大量的数据集的问题很难覆盖到,因此在需要大量数据才能导致的性能问题我总是会疏略,在后期我也开始学会着去搭建自动测试,但是可惜这时候,自动测试已经没有那么重要了,但是总的而言,我确实学会了一套系统的测试方法。

四、课程收获

首先,是自己的时间规划问题,我自己一直有一个很严重的拖延问题,总是会尽可能的切着ddl完成任务,但是却在第一单元中导致了严重的后果,这完全是因为我既没有进行整体的架构设计,也没有恰当的时间规划,因此而得到的反思便是要提前进行代码的设计和规划,尽可能早的完成任务,这样才能保证质量。而后,经过一系列的学习,让我成功的理解了什么是面向对象的思想方法,从一开始的面向过程,到最后能够自然而然的从面向对象的角度去思考,在面向对象的运用上我有了很大的进步,同时这种思想在解决实际问题上确实有很大的好处,我学会了先分析,在设计,最后在实现的整体方法,学会了如何去搭建一个合理的架构,何时应当进行一次适当规模的重构,这些方法都是在训练的构成中自然而然的学会的,对于我以后代码的书写有着很大的帮助。此外,正如前文所说,我也学会了如何进行一次系统的测试,以及测试的重要性,最后,我学会了如何去发现问题,解决问题,除了课程组提供的渠道外,我还学会了如何自己去查询资料并找到有用信息,这对于以后有着很大的好处。总的来说,经过这一系列的课程,我的收获很大,除了学会了许多方法,技巧外,思想也有了很大转变,这对于我以后的学习将有着巨大好处。

五、改进建议

第一,建议首先是讨论区不像讨论群那样透明,很多时候我们不能及时的找到这有优秀的提问和建议,而是必须自己主动去找,导致我总是因为疏忽而错过一些关键信息。

第二,希望课程组的系统能够更加稳定,不要再发生实验那次的问题。

第三,希望实验能够更加及时的给我们个人反馈,否则即使存在问题,也很难通过实验反映出来。

六、线上oo学习体会

由于没有参加过课下的oo课程,因此也没有什么比较的对象,唯一的问题可能便是课上不像课下能够当面向老师提出问题,面对面的交流。其他方面,我认为由于课程组积极地调整,整体上体会虽然与课下学习有所区别,但并不会影响学习效率,总的来说,体验很好。

posted @ 2020-06-17 17:04  AOEHST  阅读(136)  评论(0编辑  收藏  举报