OO第四单元总结

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

这一单元有两次作业,第一次是UML类图的架构设计,第二次是对于UML顺序图与状态图的架构设计。因为时间关系,大四毕业匆忙,我非常遗憾没有很好地完成第二次作业,在此我先表达歉意。但是架构设计对于这两次作业而言可谓是举足轻重,对于UML类图而言,我的设计是读取输入然后用一个由HashMap组成的ArrayList去存储这些UML类图的键值对,每一个HashMap对应一个节点,有唯一的Id。对于每一个函数,都遍历这个ArrayList去查找到响应的HashMap,然后执行相关的操作。

对于这一单元作业的架构设计,我将采用以下方法进行分析:

Complexity Metrics(复杂度分析)

这部分我们需要使用的主要是方法的复杂度分析。
方法的复杂度分析主要基于循环复杂度的计算。循环复杂度是一种表示程序复杂度的软件度量,由程序流程图中的“基础路径”数量得来。

  1. ev(G):即Essentail Complexity,用来表示一个方法的结构化程度,范围在[1,v(G)]之间,值越大则程序的结构越“病态”,其计算过程和图的“缩点”有关。
  2. iv(G):即Design Complexity,用来表示一个方法和他所调用的其他方法的紧密程度,范围也在[1,v(G)]之间,值越大联系越紧密。
  3. v(G):即循环复杂度,可以理解为穷尽程序流程每一条路径所需要的试验次数。

对于类,有OCavgWMC两个项目。

  1. OCavg:类的方法的平均循环复杂度。
  2. WNC:类的方法的总循环复杂度。

Dependency Metrics(依赖度分析)

  1. Cyclic:指和类直接或间接相互依赖的类的数量。这样的相互依赖可能导致代码难以理解和测试。
  2. DcyDcy:计算了该类直接依赖的类的数量,带表示包括了间接依赖的类。
  3. DptDpt:计算了直接依赖该类的类的数量,带表示包括了间接依赖的类。

整体的架构如下图所示:

度量表如下所示:


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

这四个单元的OO作业各有其侧重点,却层层递进。

  1. 第一个单元处于熟悉java语言的阶段, 为了让我们理解面向对象的思想, 更多的是通过封装的方式实现高内聚低耦合, 用层次化结构设计降低代码错误的方式。
  2. 到了第二单元, 有一些设计模式的东西在里面, 通过对生产者消费者模型的理解, 实现了多线程电梯, 理解了多线程结构的设计原则。
  3. 第三单元, 我体会到的是一个软件的由最初逐步迭代, 最终变的很复杂的过程。 这需要把每一个功能抽象出来,实现软件的可扩展性。
  4. 最后一个单元UML,是对前面所有单元的综合, 虽然只有两次, 但是前面所用的技能都有体现。

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

在进行作业完成的同时,需要同时对代码进行测试,我由最初的手动调试,想边界测试点,到最后的自主测试处理,产生了很大的进步。主要是从自动生成实例,进行输入测试与比对,到人为生成复杂实例,针对特别功能进行针对性测试,再到最后的完全自动化,使用Junit进行测试,自动检测出相应错误。

自己的课程收获

我感觉自己从对面向对象思想和Java语言什么都不懂的小白,变成了理解Java,熟悉面向对象思想,多线程编程和软件架构设计的编程者。这其中,老师和助教们对我起到了莫大的帮助。相对于助教和老师们的工作,我们做的真的很少了。我通过这门课,对java语言掌握更熟练,对多线程掌握更熟练,学会了软件测试的方法,对设计模式有了一定的了解,对UML的类图,状态图和顺序图有了更深的理解。感谢这门课给我带来的收获!

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

先凑齐三点小建议吧:

  1. 希望作业的发布能够尽可能的再准时一些吧。
  2. 希望指导书能够尽可能的完善,减小之后修改指导书的次数。
  3. 希望能够更多地增加讨论环节,增加互动,让我们能够得到更多的历练。

最后还是要感谢课程组,改写OO这门课,虽然我没有完美地完成所有作业,但是我还是学到了很多,希望这门课越开越好!

posted @ 2019-06-20 23:29  Arrow0  阅读(230)  评论(0编辑  收藏  举报