微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OO第四单元&课程总结博客

本单元作业最大敌人:CheckStyle

Checkstyle found no problems in the file(s)

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

第一次作业

  • 第一次作业要求实现UML类图的解析

  • 最大的麻烦在于,UML类图中诸多元素的输入顺序是没有限制的。比如,一个class1属性attr1有可能在类输入之前就输入了,这种时候没法将attr1及时“关联”并保存到class1之中。(此处的“关联”不是UML中的专业术语,下同)

  • 对于此,有两种处理思路:

    1. 先保存所有元素,再针对每类元素分别与其上层元素进行关联。

    2. 采用多次扫描,自上而下分别保存并关联处于不同“层次”的元素,确保每类元素保存并关联时,其上层元素已经被保存并可被直接调出。注意,这里说的“层次”并非一般理解中由包含、所有关系确定的层次,而是根据元素的parentsourcetarget属性的引用关系而确定的层次。举个例子:

      • 比如Association属性end1end2,分别指向了两个AssociationEnd。要想建立起对应的两个类(接口)之间关联关系,需要先保存两个AssociationEnd,才能在保存Association时根据end1end2直接调出两个类(接口),随后再建立起关联关系。

      • 在某种意义上,可以称AssociationEndAssociation前序元素

  • 我的实现采用了第2种方法,总共三次扫描,每层扫描中处理的元素类型如下:

第一层 第二层 第三层
Class, Interface, AssociationEnd Attribute, Operation, Generalization, InterfaceRealization, Association Parameter
  • 本次作业的UML类图:

    image

第二次作业

  • 第二次作业要求实现UML时序图和UML状态图的解析

  • 整体的思路与第一次相同,但在分析了UML状态图的元素层次之后,发现原先的三次扫描不够用了。。。不过:

计算机上,没有什么问题是增加一个中间层解决不了。除非问题是层数过多。

  • 于是,在保证架构看起来没变的情况下,从三次扫描升级3次扫描。具体每层的扫描内容如下表所示:
第1层 第2-1层 第2-2层 第2-3层 第3层
Class, Interface, AssociationEnd, Interaction, StateMachine Attribute, Operation, Generalization, InterfaceRealization, Association, Lifeline, Region State, Pseudostate, FinalState Transition Parameter, Message, Event
  • 此处表格展示的和实际实现的略有不同。实际实现中有CheckStyle梦魇伴随左右,为了保证每个方法(每次扫描)在60行以内,只能在不违反逻辑关系的前提下,将第2-1层中的部分元素放到第2-2、2-3层的扫描中

  • 本次作业的UML类图:

    image

第三次作业

  • 第三次作业涉及模型的有效性检查

  • 核心内容是图的dfs算法,架构设计与第二次作业相同,此处不再赘述了。

  • 本次作业的UML类图:

    image

  • 最后,经历了与CheckStyle之间漫长的相互折磨后……

    • image

    • 500行以内?绰绰有余嘛。

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

  • 回顾理论课,面向对象的设计思想是重中之重
  • 在这四个单元的作业中,架构设计是落实面向对象思维的直接体现
  • 具体的架构设计在以往的博客作业中已经详细阐述了,这里不再搬运。我认为最核心的是,在四个单元设计与实现的过程之中,我深入理解了、应用了面向对象这种思维模式,并掌握了多种设计模式。

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

  • 第一、二单元,主要采用了黑盒测试。能力一般,水平有限,笔者不会搭建自动测评机,于是只能根据对于所要实现的需求的理解,预判存在WATLE隐患的边界情形,并有针对性地手动构造数据并加以测试。

  • 第三、四单元,主要采用了单元测试对拍大法。同样使用的是手动构造的数据,和同学进行对拍。

  • 此外,我还做了充分的样例测试,以及基于历史强测数据点的二次测试。

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

面向对象悖论:面向对象让人无暇面向对象。

我认为这门课最重要的是面向对象的思想,远比编程本身有价值。

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

我……怎么这么紧呢你,多给几天不行啊……(非原创,此处为转载)

  • 这门课认你上来就熟练JAVA。不会?假期自己学去。
  • 但为什么?作为春季学期的课程,挤占同学们的寒假时间并不妥当。不得不说,这为同学们日后互联网公司的加班生活提供了提前适应的绝佳机会。
  1. 关于课程内容:由于绝大多数同学没有JAVA基础,建议取消第一单元,用四周时间让同学们学习并熟练JAVA。一方面,不给假期施加额外的压力;另一方面,也可以确保课程难度循序渐进,不会违反认知规律。

  2. 关于指导书:希望能就边界情形描述得更加清晰,避免同学们去讨论区提问其中模糊之处。

  3. 关于课程网站:建议OO课程网站上的讨论区,看完的帖子可以显示为灰色。结合上一条食用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐