オブジェクト指向の設計と分析に関しては、面接や授業でよく聞かれる一連の質問があります。これはその 1 つですが、残念ながら、大学の OOP の教授は実際にこれに答えたことがなかったので、私は疑問に思っていました。
問題は次のとおりです。エレベーター バンクをシミュレートするために使用するオブジェクト/メソッドの基本セットを設計します。オブジェクトとその属性/メソッドは何ですか?
議論のために、建物が 20 階建てで、最下階がロビー、2 階が駐車場につながっていると仮定します (したがって、人々は最下階または 2 階のいずれかから建物に出入りします)。すべての階にサービスを提供するエレベーター バンクが 1 つあり、エレベーター バンクには 3 つのエレベーター シャフトがあり、シャフトごとにエレベーターが 1 台あります。
これをオブジェクト指向モデルでモデル化する正しい方法は何でしょうか?
ベストアンサー1
まず、エレベータ クラスがあります。方向 (上、下、スタンド、メンテナンス)、現在のフロア、方向順に並べられたフロア要求のリストがあります。このエレベータからの要求を受け取ります。
次にバンクがあります。バンクにはエレベーターが含まれており、フロアからのリクエストを受け取ります。これらは、アクティブなすべてのエレベーター(メンテナンス中ではない)にスケジュールされます。
スケジュールは次のようになります:
- 可能であれば、この階には立ち乗りエレベーターを選択してください。
- それ以外の場合は、この階に移動するエレベーターを選択してください。
- そうでなければ、別の階にある常設エレベーターを選んでください。
- それ以外の場合は、負荷が最も低いエレベーターを選択します。
各エレベーターには一連の状態があります。
- メンテナンス: エレベーターは外部信号に反応しません (エレベーター自身の信号にのみ反応します)。
- スタンド: エレベーターは階に固定されています。呼び出しを受信し、エレベーターがその階にある場合、ドアが開きます。別の階にある場合、その方向に移動します。
- 上: エレベーターは上に移動します。階に到達するたびに、停止する必要があるかどうかを確認します。停止する必要がある場合は停止し、ドアを開きます。一定時間待機してからドアを閉じます (何かがドアを通過している場合を除く)。次に、リクエスト リストから階を削除し、別のリクエストがあるかどうかを確認します。別のリクエストがある場合、エレベーターは再び動き始めます。別のリクエストがない場合、エレベーターは停止状態になります。
- 下: 上と同じですが、方向が逆です。
追加のシグナルがあります:
- 警報。エレベーターは停止します。エレベーターが階上にあれば、ドアが開き、リクエスト リストがクリアされ、リクエストがバンクに戻されます。
- ドアが開きます。エレベーターが階上にあって動いていない場合、ドアが開きます。
- ドアが閉まります。ドアが開いている場合は閉めてください。
編集: 一部のエレベーターは、特に高層ビルの場合、最下階/1 階から開始しません。
min_floor と max_floor は、Elevator の 2 つの追加属性です。