OO第四单元作业总结——UML分析

一、第四单元作业架构

  本单元作业主要训练同学们结合starUML工具解析UML图的能力,提升同学们对UML类图、顺序图、状态图的理解以及UML类各类图的解析方法。两次作业都不算难,但是细节很繁琐,需要在深入理解接口代码的前提下才能够完成作业。

1.1 第一次作业

  第一次作业要求解析UML的类图,需要完成对类,类的属性,类的方法,类间继承,类实现接口等UmlElement的查询。本次作业涉及到了大量的UmlElement,看起来十分复杂,但理清楚脉络后可以很快的添上代码即可。

  经分析各个UML类都继承于UmlElement类,UmlClass类继承于UmlInterface类,UmlClass类中包含有UmlOperation和UmlParameter类,UmlOperation类中含有UmlAttribute类,通过创建自己的类,设置相应属性,即可构建如上图所示的架构。

  但在创建自己的类的过程中一开始我想把MyUmlClass继承与UmlClass,但接口中UmlClass的构造方法为private的,无法直接继承,还需要将其以属性的形式传入,并额外写方法,个人认为这是接口考虑不够充分的地方,大大增加了我们的代码量,不够oo。

  另外考虑到这次作业的输入并不是严格的顺序输入,可能存在乱序输入,即每个第二层元素出现时其所对应的最顶层元素还未出现,因此我进行了二次遍历,第一次遍历只把所有输入通过switch-case分别存储,第二次遍历才构建以上架构。构建以上架构后函数的具体实现有点繁琐,但仔细考虑并无难点。

1.2 第二次作业

  第二次作业的类图和第一次作业一模一样。顺序图和状态图的函数实现再理清楚原理后并无难点。本次作业的难点在与3个最初的异常检测,这三个异常检测也是完善了上一次作业中类图构建中无需考虑,但确实是错误的部分。

  1.R001(针对下面给定的模型元素容器,不能含有重名的成员)实现思路很直率,只需统计出类本身的各个属性,然后通过数据结构找到其对应的所有associationEnd的名字,遍历看是否有名字重复出现即可。

  2.R002(不能有循环继承)的实现过程我对于类和接口构建了不同的检测方法。对于类而言,因为类是单继承,我只需一直让其往上寻找父类,如果中间其自身再次出现则有问题需要添加。如果有非自身的元素出现两次或者到达顶级父类,则没问题,这个类无需添加。对于接口而言,接口涉及到多继承,因此遍历过程采用了bfs添加每一层的信息,并添加限制条件,看遍历完自身是否重复出现即可。

  3.R003(任何一个类或接口不能重复继承另外一个接口)一开始认为三个异常检测中最难的是R002,但后来发现R003才是三个异常检测中最难的一个,很有可能考虑不完备。需要bfs寻找其父类和继承、实现接口,将其存入list中最后直接转化为set,判断其个数是否相同,如果不同着报异常,可以说这个方法也是非常独特、便捷的。

二、四个单元架构设计与OO方法理解演进

  四个单元的训练下,我的架构明显从面相过程转变为面相对象,能够大胆的建类,对对象的分类也能够更加清晰,使程序具有较高的可读、修改能力。

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

  在我看来OO课程不仅训练了我们面向过程的设计思想,也切实提升了我们的debug能力和程序完备性检测能力。

  最初的单元我基本上都是采用人工构造测试数据的方法,但这与自己写的代码思路相关大,很容易造成写代码中考虑不全面,测试数据中考虑也不全面的结果。后几单元的测试数据生成,我基本上都采用程序自动生成的办法,能够非常便捷的发现程序中的bug。

  在本学期OO课程中,通过互测和强测等环节我着实提升了自己的逻辑完备性及bug检测能力,收获颇丰。

四、课程收获

   一学期OO下来,不得不承认自己的代码能力有了巨大的提升。现在也非常开心能够自豪的说出可以熟练应用JAVA.

  首先,是代码能力的提升。大一的时候主要用C语言写一些算法程序,最多也就200行作业,因此听学长和老师介绍说OO一周需要写1000+行程序时还有些担心,不知道自己能否完成。而现在,1000-2000行的代码信手拈来,两天就能轻松搞定,着实进步了不少。

  其次,是自己编程思想的改变。一学期下来,这门课程的训练让面向对象的思想深入我心。如今的我在写应用程序时第一反应就是寻找程序要求之间的抽象联系及层次,寻求创建合适的对象,可以说我的视野得到了很大的开阔。

  然后,OO也锻炼我的测试能力。对于一个真正的程序员而言,工作绝不是写出程序就好,而是还要对程序进行检验,要保证程序的正确性。这与大一时写的程序也不一样,不是通过基本测试点就好了,而是需要花大量时间通过不同手段进行覆盖性测试确保自己的程序没有任何问题。

  最后,OO也提升了我的阅读理解。OO的作业每次都以指导书的形式发放,包含许多细节方面的要求,形式上类似用户提出的需求,需要我花大量的时间阅读理解指导书才能正确设计程序。虽然以后用户的需求一定会远比OO作业复杂,但我相信经过OO课程的训练我已经有了初步的准备,以后能够较快地适应。

五、课程改进建议

  1、这四个单元的内容都十分有意义,但是我个人还是感觉多线程单元最重要也最为复杂,其对应的训练量远远不够,颇有些浅尝即止。最后的JML单元和UML单元只是单纯的介绍两个新的工具(规格化语言和UML图),难点主要在于对概念的理解,算法和设计方面都不是很难,希望指导书可以更加详细的介绍一下我们需要完成的任务。

  2、理论课程过于无聊,希望能够加入更多的例子,甚至要求学生们现场实现部分代码。理论课也可以对本次作业进行介绍。

猜你喜欢

转载自www.cnblogs.com/HobbitByDyk/p/11078904.html