1. ホーム
  2. oop

[解決済み] オブジェクト指向分析・設計によるエレベータのモデル化 [終了しました]

2022-06-01 07:43:01

質問

オブジェクト指向の設計と分析に関して、面接や授業でよく使われるような質問があります。これはそのうちの 1 つです。残念ながら、大学時代の私の OOP 教授は実際にそれに対する答えを与えなかったので、私は不思議に思っていました。

問題は次のとおりです。エレベーターバンクをシミュレートするために使用されるオブジェクト/メソッドの基本セットを設計してください。オブジェクトとその属性/メソッドは何でしょうか。

議論のために、私たちのビルが20階建てであると仮定します。最下層はロビーで、2階は駐車場に接続しています(したがって、人々は最下層または2階のどちらかでビルに出入りすることになります)。エレベーターバンクには3つのエレベーターシャフトがあり、シャフトごとに1台のエレベーターがあります。

オブジェクト指向モデルでこれをモデル化する正しい方法は何でしょうか?

どのように解決するのですか?

まず、エレベータクラスがあります。これは、方向(上、下、立ち、メンテナンス)、現在の階、方向でソートされた階要求のリストを持っています。このエレベータからリクエストを受け取ります。

次に、銀行があります。これは、エレベーターを含み、フロアからの要求を受け取ります。これらは、すべてのアクティブなエレベーター(メンテナンス中ではない)にスケジュールされます。

というようなスケジューリングになります。

  • 利用可能であれば、このフロアのために立っているエレベータを選ぶ。
  • else このフロアに移動するエレベータを選びます。
  • else 他の階で立っているエレベータを選ぶ。
  • else 最も負荷の低いエレベータを選びます。

各エレベータは状態のセットを持っています。

  • メンテナンス:エレベーターは外部からの信号には反応しません(自分自身の信号のみ)。
  • スタンド:エレベーターはフロアに固定されている。呼び出しを受けた場合。そして、エレベーターがその階にいれば、扉が開く。他の階にいる場合は、その方向に移動します。
  • 上:エレベーターは上へ移動します。ある階に到達するたびに、停止する必要があるかどうかをチェックする。停止する必要がある場合は停止し、ドアを開ける。そして、一定時間待って、ドアを閉じます(何か動いていない限り)。次に、その階をリクエストリストから削除し、別のリクエストがあるかどうかをチェックします。もしあれば、エレベーターは再び動き出します。そうでない場合は、スタンド状態になります。
  • 下:上と同じですが、逆方向です。

追加の信号があります。

  • アラームが鳴ります。エレベーターが停止します。そして、ある階であればドアが開き、リクエストリストがクリアされ、リクエストがバンクに戻されます。
  • ドアオープン エレベーターがある階にあり、移動していない場合、ドアを開きます。
  • ドアを閉じます。ドアが開いている場合は閉じます。

EDIT 特に高層ビルの場合、最下層/1階から出発しないエレベーターがあります。

min_floor & max_floor は、エレベーターの2つの追加属性です。