面向对象第四单元个人总结

第四单元作业的架构设计

本单元作业架构设计

我的总体架构类图如下:

第一次作业

在实现第一次作业的时候,由于第一次接触UML图,指导手册看得云里雾里,不是很明白,自己根据实验给出的UML的代码一步步对照,理解UML结构,才得以完成。

MyImplementation类中用hashmap存储各个UmlElement,以进行架构,获取需要的信息,并把信息存放在自己新设计的类里面以便于查询,也封装了一些方法进行查询。如,interfaceclass的继承接口和类均存放在新建的相应类对象中。

第二次作业

第二次作业加入了顺序图以及状态图的查询,因此把顺序图、状态图的架构也加入到MyImplementation中,其中MyStateMachine以及MyInteraction分别充当状态图、顺序图的“画布“作用,用来储存整体架构,内部有更小的部件,如MyState、UmlLifeLine等。

完成第二次作业时,我依旧根据实验给出的UML的代码一步步对照,理解状态图、顺序图在UML中的结构,完成信息存储与架构实现。

第三次作业

这一单元增加了一些规则的检查,因为原来的架构中的MyImplementation类行数超过了checkstyle的代码风格要求,所以我新建了单例模式的MyErrorCheck类,把第三单元所需要求的一些具体实现以及各个不同类之间的交互都放在此类中,以减少MyImplementation类的压力。其他的架构与前两次作业基本相同。

总体来说,本单元实现了一个UML解析器,第一次作业对类图进行建模,实现一些查询的接口;第二次作业对顺序图、状态图进行建模,同样实现一些查询的接口;第三次作业则对一些规则进行了检查。

架构设计思维及OO方法理解演进

经过一学期,感觉对oo有了更深入的理解,发现oo重要的是能化整为零,让程序设计更像一个整体机器,如果每一个部件运作良好,那么总体的性能也会很好。特别是在进行小组合作开发或者独自开发大型的软件的时候,能快速分工,定位bug或者性能较差的地方,进行更好的开发。

  • 第一单元:表达式化简

    这个单元学会了运用递归下降的方法进行分类存储处理,初步接触了层次化设计的概念,感受到了层次化设计的强大之处,对java语言的运用也更加熟练,并且在一次次作业的迭代开发过程中体会了增量开发的思想。

  • 第二单元:多线程电梯

    在这个单元中第一次接触多线程,最主要的是需要保证对关键的部分上锁,如果上锁范围较大则容易造成电梯运行过慢,多线程退化为类似单线程,而关键部分如果不上锁会出现线程不安全的情况。

    从单部电梯到多层多栋横竖动态增加电梯,从静态人员分配到电梯自由竞争,每次作业都在上一次基础上进行拓展,实现了代码复用。

  • 第三单元:JML

    主要是针对JML规格进行学习。由于有大量官方的结构,所以整体架构很清晰。实现方面即按照官方规格进行一步一步理解实现即可,部分地方由于性能的原因,需要进行优化实现。在实际完成中,体会到了规格化设计的重要性。

  • 第四单元:UML

    了解了UML模型,通过自己建模、阅读实验代码以及单元要求的合法性检查,对UML图的理解更加完善。

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

四个单元中我都没有自己设计完整的评测机,基本只是根据指导书完成后用课程网站的样例测试,外加以自己手动构造的样例和同学友好分享的样例。也尝试过写评测机,但是实际苦于知识短缺频繁出现bug、覆盖面小以及时间短等问题,未能很好的应用。

手动构造样例时,应用到了课堂中老师讲解的等价类划分,构造正常、异常、边界数据等思想。

总而言之,课程结束还是没有完成一个完整的评测机比较遗憾,数据测试方面也少有进步。一方面是懒惰的心理作祟,对课程组评测机的依赖,另一方面是本身掌握知识少,时间紧迫,苦于使作业有效的挣扎。

课程收获

这学期的OO学习让我明白自主学习的重要性。例如,各种数据结构的使用以及第二单元的多线程。我正是听从了老师的建议,提前学习了多线程相关知识,才得以在第二单元作业中没有犯线程安全相关的错误,否则结果将会很惨。

虽然OO学习过程万分痛苦,但是这门课确实让我学到了很多。首先至少学习了一门语言,虽然课程组老师说掌握一门语言不是什么事,但对我来说已经是很重要的收获了。然后就是架构设计的重要性,让我明白了,在拿到需求时要先进行想得远一些,进行可拓展的基本架构,而不是不管不顾直接上手写。另外也了解了生产者-消费者,工厂模式,单例模式等,对多线程有了一定认识,了解了JML语言和UML模型。

总体来说,有在凌晨1、2点过了中测的欣喜以及十六次作业都完成并有效的成就感,代表着我在不断进步,能一直进步就是我最大的收获。

改进建议

  • 错误交流平台

    目前的讨论区虽然能起到相似的功能,但并没有整理的功效,当同学遇到问题时,需一个个查看,缺少检索、整理方法。所以希望能够建立一个具有检索功能的错误交流平台帮助同学更好地学习。

  • 难度跨度大

    第一单元表达式求导和第二单元多线程电梯的前两次作业难度都跨越较大,尤其是第一单元,刚刚接触面向对象设计,明显感觉到大家的焦虑。希望各单元间的衔接能更顺滑一些。

  • 指导书

    每个单元迭代开发时指导书会更新,但是更新的部分没有突出显示。例如第三单元JML的第二次或第三次作业增加了红包消息和表情消息,已经填写过的某个方法需要修改,但是因为一般不会修改已写方法所以忽略了,为此多花费了许多时间。以及指导书希望能添加跳转链接,不用手动翻页。

posted @ 2022-06-28 15:45  魔光、炫水  阅读(17)  评论(1编辑  收藏  举报