OO第二单元小结

一、度量分析程序结构

1. UML类图分析

1.1 第一次作业UML类图

 OO第二单元小结_第1张图片

1.2 第二次作业UML类图 

OO第二单元小结_第2张图片

1.3 第三次作业UML类图 

OO第二单元小结_第3张图片

1.4 分析结构

  在多线程的第二单元里,我三次作业代码的代码结构前两次十分相似,最后一次有了一些进步,在电梯内部声明定义了一个控制模块用来和容器交互。我觉得我对于多线程的理解到现在为止也不算太好,进程之间的等待和通知还需进一步理解。

 

2. MetricsLoaded代码分析

2.1 第一次作业

OO第二单元小结_第4张图片

2.2 第二次作业

OO第二单元小结_第5张图片

2.3 第三次作业 

OO第二单元小结_第6张图片

2.4 代码圈复杂度分析

  第一次和第二次代码结构相似,电梯类内部的run函数复杂度很高,因为当时实现的时候,把电梯所有的调度,转向,上下乘客全部写在了一起,所以v(G)就会很高。

  在第三次作业中,将调度分离,写在了一个调度器类里,复杂度就随之下降了。

  第一次和第二次作业较高的圈复杂度也意味着更高的维护复杂度,所以在第三次作业增加电梯时就进行了重构- -

3. Statistics代码分析

3.1 第一次作业 

OO第二单元小结_第7张图片

3.2 第二次作业 

3.3 第三次作业 

3.4 代码量分析

   三次作业的代码量在逐渐增长,在第一单元的三次作业中,我几乎没有编写注释,这给日后的维护带来了很大的麻烦,我会在以后的作业中注意这个问题。

 

二、漏洞分析

1 第一次作业

  在这次作业中,出现的问题是在主线程(输入线程)中采用了轮询的方式查看电梯线程是否结束,这样的方法导致了电梯线程可能在下客完毕之后,未关门之前就被主程序结束。

2 第二次作业

  在这次作业中,出现的问题和第一次非常像,也用了相同的办法处理。

3 第三次作业

  在这次作业中,又出现了关不上门的情况,多电梯之后,代码变得比较复杂,之前在主程序里的判断由于我加锁方式复杂,不太奏效,最终采取了室友的方法,在电梯内部进行进程终结。

 

三、互测方法

  手玩数据点  

 

四、总结

  通过这个单元的学习,我艰难地完成了多线程编程的入门,这些在多线程中新出现的概念,比如同步、锁、原子操作,理解容易,运用起来非常困难。在这个单元踩了许多坑,也学到了一些知识。学到了怎样把一个不线程安全的类如ArrayList,通过包装使其变的线程安全。我的多线程编程能力还十分不足,应该多阅读高质量代码以求进步。  

 

转载于:https://www.cnblogs.com/Yang-OO-Blogs/p/10753977.html

你可能感兴趣的:(c/c++)