OO第二单元总结

OO第二单元总结

1.多线程设计策略

在本单元的作业中,我采用的是一致的设计策略:采用生产者-消费者模式,由输入管理线程(生产者)不断读取输入,并放进队列RequestQueue中进行排队,由电梯(消费者)从队列中取需求。

在本单元的作业中,我没有实现调度器,而是完全由共享容器来联系生产者和消费者,任务的调度由各个电梯自行实现,电梯的状态也由电梯自身进行管理,这样大大减少了线程间的交互,也大大降低了代码量。

 

2.可扩展性

由于我的程序中没有调度器,只有输入管理线程和电梯,因此可扩展性还是比较好的。但仍有以下不足:每部电梯能到达的楼层是用布尔类型数组存放的;同时由于是最后一次作业,因此没有采取继承的方法来创建各种类型的电梯,而是在电梯创建时直接判断类型进而初始化相应参数。

SOLID 原则分析:

S - 单一功能原则:输入管理线程和电梯之间互不干扰,职责明确。

O - 开闭原则:在第三次作业时进行了较大幅度的修改。

L - 里氏替换原则:没有使用继承。

I - 接口隔离原则:没有使用接口。

D - 依赖倒置原则:较差,没有使用接口,直接实现了各个类。

 

3.程序结构分析

由于三次作业结构基本一致,也没有进行重构,仅第三次作业增加了一个新类,因此在此仅给出第三次作业的类图和复杂度分析。

类图:

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

复杂度分析:

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

可以看到,出了电梯类的run方法以外其他的方法复杂度都较低。

 

4.bug分析

第一次和第二次作业中都没有出现bug。

第三次作业的互测中发现了一个bug:如果有电梯创建后没有移动过,则该电梯线程不能正确退出,其实这个bug在前两次作业中也存在,但在前两次作业中仅有空的输入会引发这个bug,因此我没有发现。

前两次互测时我重点阅读了同学的线程退出和访问共享容器方面的代码,但是没有发现bug。第三次互测由于其他原因没有阅读其他同学的代码。

 

5.心得体会

本单元的三次作业我整体完成的不错。同时多线程编程对于我们来说也是一个全新的领域。通过本单元的学习,我对于多线程编程的基本思想有了初步的掌握,也对多线程中的线程安全问题和生产者-消费者的设计模式有了更深刻的理解。

你可能感兴趣的:(OO第二单元总结)