オブジェクト指向ユニット2の概要ブログ

1.各ジョブの設計戦略、測定分析、およびバグ

最初の宿題

(1)設計戦略

最初のジョブは、プロデューサー/コンシューマーモデルを使用し、リクエストキューを共有オブジェクトとして使用し、シミュレーターにリクエストを生成するようリクエストし、エレベーターがスケジューラーを介してスキャン戦略でリクエストを消費することです。

(2)クラスの複雑さの分析

(3)メソッドの複雑さの分析

(4)UML类图

このジョブの各クラスの機能は比較的独立していますが、エレベータークラスとディスパッチャークラスの間には依然として大きな結合があります。

(5)コラボレーション図

(6)バグについて

このジョブのコーディングプロセスで発生したバグは、スレッドが正常に終了しなかったことです。エレベーターがスリープを終了した場合は、最初にスレッドを起こす必要があります。

第二の仕事

(1)設計戦略

2番目のジョブは複数のエレベータのシミュレーションになり、ディスパッチャスレッドが追加されて、各エレベータの内部キューに要求が分散されました。さらに、このジョブは、スケジューリング方法をエレベータに組み込み、要求のスケジューリングを行います

(2)クラスの複雑さの分析

(3)メソッドの複雑さの分析

(4)UML类图

この操作では、ディスパッチャーがエレベーターの内部に組み込まれ、エレベーターがより複雑になります。

(5)コラボレーション図

エレベータを例にとると、スレッド間のコラボレーション関係は次のようになります。今回は、エレベータからのリクエストに対するリクエストが、ディスパッチャ割り当てリクエストになります。

(6)バグについて

この作業により、相互テストでバグをハッキングし、テスト用のランダムデータを生成するようになりました。この方法では人員を節約できますが、効率的ではなく、同じ部屋に実際のバグはありませんでした。

第三の宿題

(1)設計戦略

この操作により、呼び出し可能なフロアとエレベーターの指示が追加されます。全体的な構造は前の操作とそれほど変わりません。ディスパッチャは到達可能性の判断を高める必要があります。割り当てるときは、新しい待機時間パフォーマンスインジケータと負荷分散を考慮して、各ユニットを作成してくださいエレベーターは可能な限り平行にして総走行時間を短縮します

(2)クラスの複雑さの分析

(3)メソッドの複雑さの分析

(4)UML类图

このジョブディスパッチャークラスの設計はより複雑です

(5)コラボレーション図

現在のジョブスレッド間のコラボレーション関係は前回と同じです

(6)バグについて

この課題の提出中にRTLEの一部が表示されました。問題コードは次のとおりです:

synchronized(requestList){ 
status = ElevatorStatus.IDLE;
{
requestList.wait();を試してください
} catch(InterruptedException e){
e.printStackTrace();
}
}

本次作业设计输入结束时唤醒休眠线程从而退出,但若请求在执行该段代码前结束,则线程陷入休眠后无法被唤醒

二、第三次作业架构可扩展性分析

1. 单一职责原则:第三次作业较为遵循单一职责原则,分派器负责分配乘客,电梯负责运输乘客

2. 开闭控制原则:本单元三次作业电梯种类不多,情况不太复杂,作业实现也未严格遵循开闭控制,若电梯类型繁杂,需考虑多种电梯继承自抽象电梯父类,开关门移动定义为抽象方法以支持不同实现的扩展等等

3. 里氏替换原则:本单元作业没有进行继承相关设计

4. 接口分离原则:第三次作业较为遵循接口分离原则,不实现多余的接口

5. 迪米特原则:第三次作业并未很好遵循迪米特原则,电梯和分派器之间存在直接调用,有一定耦合

三、第二单元心得体会

本单元较大的心得体会首先依然是架构设计的重要性,由于第一次作业开始时架构尚可,后续作业在该基础上迭代较为平缓轻松。

其次就是多线程情形下更突显了架构设计需要降低各个模块的耦合度,各个模块功能独立才能保持程序运行逻辑清晰、简洁高效、可维护,解除耦合可以考虑层次化处理。

另外还有设计模式有必要深入学习,生产者消费者模式、观察者模式等等在开发经验中总结出来的设计模式能有效优雅地解决实际问题

おすすめ

転載: www.cnblogs.com/buaa17373128/p/12723733.html