面向对象第二单元总结
设计策略
调度器
负责协调输入线程和电梯线程,维护等待乘客的队列,负责给电梯分配任务,负责分析乘客应该在哪层换乘。电梯可以从队列中获取乘客的信息,输入部分也可以向队列中添加乘客的信息。调度器要保证两个部分是线程安全的。
电梯
维护自己从调度器获取的等待乘客的队列,可以从调度器获取乘客的信息。不关心怎样接人效率高、不关心有没有载人、不关心载的人在几层下。电梯需要知道的只是要往几层跑以及到一层时要不要开门。
输入部分
负责向调度器提供乘客请求的信息
乘客
工具人,没有自己的思想,电梯到了就上,让在哪层换乘就在哪层换乘,到达目的楼层就离开电梯。
可扩展性分析
- 在设计上采取了工厂模式来进行电梯类对象的创建,可扩展性比较好
- 电梯、调度器和输入是分别进行工作的,对于某一类的扩展不会影响到其他类的工作
- 在电梯调度上主要采取了随机分配的方法,对于多个电梯对象的情况下可能会出现问题
- 在换乘问题上是针对特定情况下进行的换乘方案,可扩展性比较差
程序结构分析
第五次作业
UML
复杂度分析
第六次作业
UML
复杂度分析
第七次作业
UML
复杂度分析
自己程序的bug
由于在调度电梯的时候我采取的方式是随机分配,即所有电梯竞争一个资源,所以有可能出现一个电梯竞争到了所有的资源,而其他电梯还空着的情况,从而造成RTE。
寻找他人bug的策略
记录下自己的测试样例,尤其是自己调试过程中出错的样例,然后对他人的代码进行测试。
心得体会
在这一单元的学习过程中,我学会了java多线程的使用方法,并且了解了java项目的一些基本架构。
线程安全方面,一是注意临界资源使用的同步,二是注意避免死锁,临界区应该尽量的短,不用同步时立即释放锁,尽力避免锁内拿锁。
设计方面,应该分离各部分功能,使得更改要求时不至于全部更改,注意对一个类功能的抽象,建立完后审视,那些是这个,类必须具有的方法,那些是这个类可有可无的方法,对类进行瘦身,才能在后来更好的继承,增加功能总比增删功能要简单些也不容易出错。