第二单元oo作业总结
第一次作业
1、设计策略
将电梯与请求输入作为两个线程,在调用时直接将请求队列作为二者的共享对象,减少了线程数。在电梯调度上,可以使用先来先服务算法,每到一层判断是否可捎带,满足条件就捎带。
2、基于度量分析
(1)作业类图如下
(2)依赖关系如下
其中,Requestqueue类中的方法getQueue复杂度较高,因为它用于判断是否需要捎带,条件较多,与电梯类关联也比较大。
(3)UML协作图如下
第二次作业
1、设计策略
在第一次作业基础上,优化了电梯运行,使用LOOK算法。同时在main中利用循环按需生成电梯线程。
2、基于度量分析
(1)作业类图如下
(2)依赖性分析如下
其中RequestQueue类中的checkdir方法复杂度较高。因为这个方法是look算法的关键,用于检测当前方向上是否还有未被响应的需求。如果有需求则继续行进,否则掉头。需要对需求队列进行遍历,故复杂度高。
(3)UML协作图如下
第三次作业
1、设计策略
在第二次作业的基础上,添加了电梯工厂类,用于按需生成不同型号的电梯。
2、架构设计
扩展性不够好,如果增加需求,或许会需要大规模改动代码。
(1)单一责任原则
这一部分做的不太好,因为虽然有Elefactory这个类,但是在生成固定的A\B\C三个电梯时,仍需在Main类里一个个敲参数参数,使得类的功能不够独立。
(2)开放封闭原则
这一部分的问题在于,如果需要增减不同规格的电梯,除了需要更改Elefactory类,还需要在与电梯无关的RequestQueue类里更改相关条件。
(3)里氏替换原则
三个电梯子类与电梯父类基本可以满足需求。
(4)依赖倒置原则
电梯类的方法抽象性不佳,导致这一原则未能得到较好满足。
(5)接口分离原则
代码中没有接口。
3、基于度量分析
(1)作业类图如下
(2)依赖性分析如下
仍是RequestQueue类中的checkdir方法复杂度较高。原因同上。
(3)UML协作图如下
单元总结