面向对象第四单元博客作业

这东西还没做完!现在仅供保存用

0 引语

  在经历了第一单元表达式、第二单元多线程电梯、第三单元JML的洗礼摧残之后,终于,我们来到了OO之旅的终点——第四单元。这一单元,我们主要学习了有关UML的相关知识,在这一单元中,我们需要完成的任务为实现一个简单的UML分析器。可以实现对UML类图、状态图(第二次作业新增)、过程图(第二次作业新增)的分析和对UML是否违反规则的判断(第三次作业新增)。总体来说,这次的作业在难度上大于上一单元,但仍在可接受范围之内。下面,我将对这一单元的作业进行分析,并发表一下自己对四个单元的看法。

一、本单元作业分析与测试结果

1.1 第一次作业

  一般来说,第一次作业都是在打基础,在做铺垫,所以难度应该并不是很高……

  真的吗?

  那你给我解释一下这一堆都是个什么玩意!

   一拿到作业,看到课程组下发的大礼包,内心是懵逼的:我是谁?我在哪?我该干什么?在前两单元的作业中,课程组虽然也下发了一些jar文件,内含对应的接口供我们使用,但那些文件内容都较少,而且易于使用,代码也比较容易看懂。可这一单元的文件是在玩蛇啊?!让人有一种在看操作系统labn(n>3)的感觉……

  看了指导书和接口使用说明之后,我才明白,这一次作业是让我们完成一个UML类图分析器,其中将输入解析成类的部分已经包含在下发的jar中了(不得不说课程组还比较仁慈,如果连这一部分也要自己写,怕是要写到天荒地老),自己要做的内容,只是根据这些UmlElement类生成对应的结构以及对于每一个“询问”进行对应的回答即可。我设计出的类有:

MainClass:很短,启动AppRunner而已,略过。

MyUmlInteraction:这次的核心类,内含接口要求的数个方法,针对每一个询问给出对应的回答(嗯?怎么和第三单元如此相似?)

MyClass:描述“类”的类,其实就是一个可以自定义方法的UmlClass,内含一些方法以供MyUmlInteraction询问。大部分和“算法”相关的东西也都写在这里。由于这次作业的重点不是算法,而且论算法难度并没有第三次作业难度大,所以略过不谈。

MyInterface:这次作业比较头疼的一个类,其实就是一个可以自定义方法的UmlInterface,它之所以难,是因为它涉及到了接口的多继承!这还导致了我强测中的一个错误。

MyOperation、MyAttribute、MyParameter:在类中“填入”的东西,同理,直接用Umlxxx不太方便,所以都写了各自的My形式。

第一次作业强测结果如下:

 

   还不错啦!但是有点可惜,在UmlInterface中,由于接口是可以多继承的,并且此次作业中允许接口的重复继承,所以在遍历的时候应该按的方法遍历(带visited标记),而我却错用了的方法遍历(直接递归,不涉及visited)。这就导致当节点及路径非常多的时候,会将大量的时间用在无用的计算上,这就导致了这个测试点的超时现象。真的佩服课程组怎么找到这种“带坑”的数据的……

1.2 第二次作业

  第二次作业是第一次作业的迭代,不过说到迭代,这回的“迭代”算是所有(是的,你没有听错)作业中最不需要考虑上次内容的一次,我想也没什么人会因为这一次作业而重构上次作业的代码吧。因为这次作业是要求在上次作业的基础上“追加”UML状态图和UML过程图的内容。UML状态图和过程图和你类图有什么关系?根本就没影响好叭……所以,可以不用考虑是否会“改坏”原来的代码啦,可喜可贺,可喜可贺!

  不过嘛,上一次作业如果有bug,还是要修复的。并且,由于这次作业没有了互测环节,失去了不少乐趣呢,对于bug的测试面窄了,一些有bug的程序也可能通过强测,而这些问题可能在后续的作业中体现出来。那么,我是怎么做的呢?

 加入了一些神奇的东西。

YourMachine:其实就是一个状态机,在里面用HashMap等记录了各个状态的信息,可以计算状态转移等。并没有继承UmlStateMachine类,因为总觉得继承了就不自由了,有好多写法可能会受到限制。

YourState:“你的机器”里当然要有“你的状态”,注意这个YourState中已经包含了起始状态和终止状态,以及普通状态这三种状态。构造方法中也包含了这样的情况。

 YourInteraction、YourLifeline:和状态图类似,这是描述过程图的类。这里面方法很简单,因为本次作业针对状态图的询问本身就不是很多。

  这次新增的东西全部都是Your打头,我这样做的原因是防止和上次的内容搞混,毕竟两部分内容是相对独立的,我也不愿意一打一个字母“M”就出来一大堆东西吧。然而这次打一个字母“U”仍旧会出来一大堆东西……那么,这次的结果如何呢?

   OHHHHHHHHHHHHHHHHHHHH!这次的结果非常好!其实应该归功于这次较为详细的样例,那两个样例帮我找出了多个错误,如果不经过样例直接交的话,恐怕就要出问题了。

1.3 第三次作业

  第三次作业时已经濒临考期,但我依然保持着良好的敲代码手感。但是,说好的只有两次作业呢?

  这次作业增加了对于“模型有效性检查”的设定,类似于第一单元第二、第三次作业的WRONG FORMAT判定,当模型的生成不符合某些要求时,便不会再进行询问,而是直接输出对应的错误信息。这次作业我并没有“主动”新增任何一个类,唯一新增的类是由于CheckStyle不让文件超过500行而强行将一个类拆成了两个类(伪·工厂模式),我直接从这次测试的结果来分析吧。

   这次的强测,老实说还是有点小翻车的,错了两个点(而且并非同质bug,在bug修复环节还要额外被扣分),那么错了哪两个点呢?

 

   就是这样。

二、全单元总结——在点滴中进步

2.1 架构设计演进

  在第一单元的作业中,

猜你喜欢

转载自www.cnblogs.com/yuanshaohan/p/OO_BlogHomeWork_Unit4.html
今日推荐