web-dev-qa-db-ja.com

「イベントドリブン」と「オブジェクト指向」プログラミングの関係は何ですか?

最近、私は「イベント駆動型」プログラミングについてほとんどどこでも聞いています。

ウィキペディアによると:

コンピュータプログラミングでは、イベント駆動型プログラミングはプログラミングパラダイムであり、プログラムのフローは、ユーザーアクション(マウスクリック、キー押下)、センサー出力、または他のプログラムからのメッセージなどのイベントによって決定されます。/threads。イベントドリブンプログラミングは、ユーザー入力に応答して特定のアクションを実行することを中心としたグラフィカルユーザーインターフェイスやその他のアプリケーション(Javascript Webアプリケーションなど)で使用される主要なパラダイムです。

これはまさに私たちの旧友のOOPではありませんか?そして、これがOOPでない場合、違いは何ですか?

11
mok
  1. オブジェクト指向プログラミング(OOP)とイベント駆動型プログラミング(EDP)は直交しているため、一緒に使用できます。

  2. OOP with EDP with all OOP原則(カプセル化、継承、ポリモーフィズム)はそのままです。

  3. OOPでEDPオブジェクトを使用すると、イベント通知を公開し、他のオブジェクトからのイベント通知をサブスクライブするメカニズムを取得します。

  4. OOP EDPあり/なし)の違いは、オブジェクト間の制御フローです。

    • In OOP EDPを使用しない場合、メソッド呼び出しで1つのオブジェクトから別のオブジェクトに制御が移動します。オブジェクトは主に他のオブジェクトのメソッドを呼び出します。

    • In OOP EDPコントロールを使用すると、イベント通知時に1つのオブジェクトから別のオブジェクトに移動します。オブジェクトは他のオブジェクトからの通知をサブスクライブし、サブスクライブしているオブジェクトからの通知を待機します。通知し、独自の通知を公開します。

  5. 結論:OOP + EDPは「まさに私たちの旧友OOP」であり、イベント駆動型設計のおかげで制御フローが反転しています。

13
Lightman

オブジェクト指向プログラミングは、データとアクションを組み合わせて実世界のオブジェクトのモデルにすることで定義されます。イベントドリブンプログラミングは、通信ポート上にあるかユーザーインターフェイス上にあるかに関係なく、サーバーが入力コマンドを待機するプログラミングのスタイルです。次に、そのコマンドを処理し、目的の結果を表示/生成します。

ほとんどのイベント駆動型言語はオブジェクト指向です。オブジェクトはイベントを待ちます。オブジェクト指向言語のプログラムは必ずしもイベント駆動型である必要はなく、イベント駆動型プログラミングは必ずしもオブジェクト指向言語を必要としません。それらは無関係です。

6
Brian English

シーケンシャル(イベント駆動型ではない)プログラムのアルゴリズムはレシピのようなものです。最初から始めて、最後まで処理してから停止します。

イベントドリブンプログラムは、車の制御に似ています。いつでも、どのような順序でも、何でも起こり得ます。

オブジェクト指向の原則は、各「コントロール」が基本的に他の「コントロール」とは無関係であり(関心の分離)、イベントの順序は時間の一致と同様にほとんど重要ではないため、イベント駆動型モデルにより適しているようです。ワイパーをオンにし、デフロスターをオフにし、操縦と加速をすべて同時に行うと、アクションは相互に影響しません。これはレシピを使用する場合にも可能ですが、それを推測するのはシェフ(コンパイラー/オプティマイザー/ CPU)次第です。

シーケンシャルプログラムはOOになる可能性があります。ブレンダーとオーブンが切断されていても、自分のことをしていてもかまいません。これが有用な例えであったことを願っています。

5
user4624979

私はそれを刺しました。ここに3つの比喩があります:

イベントプログラミングは、ハードウェアバスの動作と似ているようです。バスは、周辺機器が相互に通信するために使用されます。同様に、セルタワーは、携帯電話が相互に通信するためのメッセージバスです。古き良きスターネットワークトポロジモデル( https://en.wikipedia.org/wiki/Star_network )も検討してください。ホームルーターがコンピューターとIoTデバイスをホームネットワークに接続する方法を見てください。

周辺機器や携帯電話やデバイスの代わりに、オブジェクトをコーディングします。送信プロトコルに沿ってパケットを送信する代わりに、イベントまたはメッセージをメッセージブローカー(たとえば、メッセージキュー、またはKafka)に送信します。イベントは、関心のある人なら誰でも実行できます。ワークフローの場合、イベントは特定の誰かによって処理されることが期待され、送信者は、適切な応答で結果のイベントを見つけることを期待します。結果。

ASIDE:教訓

したがって、潜在的には、ハードウェアメーカーや通信エンジニアがすでに遭遇し、イベント駆動型メッセージングに関して解決した問題についての解決策もあります。

2
rje