OO第四单元

OO第四单元

本单元三次作业的架构设计

  • 第十三次作业架构图如下:
    OO第四单元_第1张图片

    由于作业的要求是实现一个UML类图解析器,要求根据各种指令来进行类图有关信息的查询。而且作业所提供的测试数据量不大,而且由于类图之间的元素非常具有层次性,所以采用HashMap存储类图元素之间的关系,ArrayList存储点。这样查找也很方便。不过后来想了一下,其实ArrayList的存在并不必要,而且增加了代码量。毕竟这是对一个图进行查询,并不需要遍历。

  • 第十四次作业架构图如下:
    OO第四单元_第2张图片

    第十四次作业在第十三次作业的基础上增加了对顺序图和状态图的查询。由于作业对代码长度的限制,而且类图、顺序图、状态图所包含的元素并不重合,所以我扩展了三个类,分别对类图、顺序图和状态图进行查询。

    在顺序图和状态图的查询吸取了第十三次作业的经验与教训,只使用了HashMap来存储元素之间的关系。

  • 第十五次作业架构图如下:
    OO第四单元_第3张图片

    第十五次作业实现一些检查规则,对模型进行有效性检查,比如重名检查等。虽然大多数规则是对类进行检查,但是由于代码长度的限制,所以我扩展了一个类来对模型进行R001-R006规则检查,R007和R008则写在对状态图查询的类中。而且由于某些规则检查抛出异常的要求,我增加了一个实现了UmlClassOrInterface接口的类。

    在这次作业中,同样采用HashMap来记录关系,比如继承、实现、关联、属性等,也使用ArrayList来记录点,比如类和接口等,规则检查需要遍历。

在四个单元中架构设计及OO方法理解的演进

  • 第一单元:表达式求导

    第一单元时,我对面向对象设计架构还不太熟悉,不过在第三次作业中的反复套娃中明白了将复杂的问题进行层次分解和抽象的重要性,也了解到一个好的架构要求具有扩展能力。设计时注意高内聚和低耦合会给查错和扩展都带来方便。

  • 第二单元:多线程电梯

    多线程在于一种不确定性,相同的代码、相同的数据也会产生不同的结果。在第二单元中,架构的设计依然强调层次化设计和可扩展性,而且还要注意线程安全、数据的可配置性、控制逻辑的简洁性。在本单元中,我先对电梯、乘客请求、调度器的交互关系进行分析,然后想好策略,再实现架构。而且本单元,还学到了经典的5个设计原则SOLID和其他常用的设计原则。

  • 第三单元:JML

    第三单元我们虽然只需要“填代码”,但是,一念之差就是深渊。我们需要考虑数据容器的选择,中间容器的存储和检索,规格的层次化,算法的选择。规格的层次化往往反映了设计者的架构思考。

  • 第四单元:UML

    第四单元感觉上和第三单元很相似。在本单元的设计中需要注意层次化和可扩展性,还要对UML的知识有一定的了解。

虽然四个单元各有侧重点,但一律考察了架构的可扩展性和强调架构的层次化设计。

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

  • 第一单元:手动测试,效果不佳
  • 第二单元:黑盒测试,python编写测试代码,由于多线程特殊性,效果一般
  • 第三单元:Junit测试,很好
  • 第四单元:画UML图测试,还行

写完了这么多次OO作业,也不断地对不同的测试方法进行了实践,从一开始的手动到Python、Java自动生成样例,shell批处理,到后来的Junit。测试就是对代码的功能、性能进行检查,找不到bug也不能说明你的代码是正确的,但是测试可以让自己“问心无愧”。不过,自己测试时往往会陷入误区,比如,对题意的理解错误会理所当然的用错误的结果来检查错误的代码。如何解决这样的错误?多和同学交流一下。

课程收获

对Java语言从陌生到熟悉,对于面向对象思想从不解到掌握,还学习了多线程方面的知识,认识到规格设计和模型化设计的重要性。还掌握了分析和解决问题的方法,以及一些使代码更易于理解的原则。我还了解了更多的测试方法。学到的有些知识也不仅仅适用于OO课程,还能在其他课程或者生活中得到应用。总而言之,OO是一门具有挑战性的课程,也是一门能让人收获很多的课程。

给课程的三个具体改进建议

1、强测数据并不能覆盖所有考察点,希望强测数据可以更加“强”。

2、后两单元作业可以加大难度,比如增加数据量和减小CPU最大运行时间。

3、研讨课感觉并不那么有意义,可以就一些问题进行讨论。

线上学习OO课程的体会

线上学习OO课程,可以反复观看老师讲课的视频,也给学生带来了方便。而且课堂讨论也是通过网络交流,发言可以随心所欲,节约课堂时间。不过,线上学习没有和老师同学一起学习的氛围,也给同学之间的交流讨论带来了不便。

你可能感兴趣的:(OO第四单元)