プログラミングとソフトウェア設計において、イベントとはソフトウェアによって認識されるアクションまたは出来事であり、多くの場合は外部環境から非同期に発生し、ソフトウェアによって処理されることがあります。コンピュータ イベントは、システム、ユーザー、またはその他の方法によって生成またはトリガーされます。通常、イベントはプログラム フローと同期して処理されます。つまり、ソフトウェアにはイベントを処理するための専用の場所が 1 つ以上あり、多くの場合はイベント ループです。
ユーザーはイベントの発生源になることができます。ユーザーは、キーボードで入力したり、マウスでクリックするなど、コンピューターの周辺機器を介してソフトウェアと対話する場合があります。別の発生源は、タイマーなどのハードウェアデバイスです。ソフトウェアは、タスクの完了を通知するなどして、独自のイベント セットをイベント ループにトリガーすることもできます。イベントに応じて動作が変化するソフトウェアはイベント駆動型であると言われ、多くの場合、対話型であることが目標となっています。
説明
イベント ドリブン システムは、通常、ユーザーがマウス ボタンを押すなど、プログラムで処理する必要のある非同期の外部アクティビティがある場合に使用されます。イベント ドリブン システムは通常、デバイスからの入力や内部アラームなどのアクティビティを待機し続けるイベント ループを実行します。これらのアクティビティのいずれかが発生すると、イベントに関するデータを収集し、イベントを処理する イベント ハンドラーソフトウェアにイベントを送信します。
プログラムはイベントを無視することを選択できます。また、特定のイベントをリッスンするようにプログラムされている複数のハンドラーにイベントをディスパッチするライブラリが存在する場合もあります。イベントに関連付けられたデータは、少なくともイベントの種類を指定しますが、イベントが発生した日時、イベントの発生原因、イベントソースからハンドラーに提供されるイベントの処理方法に関する追加データなどのその他の情報も含まれる場合があります。
イベントは通常、ユーザー インターフェイスで使用されます。ユーザー インターフェイスでは、外部での操作 (マウスのクリック、ウィンドウのサイズ変更、キーボードの押下、他のプログラムからのメッセージなど) が一連のイベントとしてプログラムによって処理されます。多くのウィンドウ環境向けに作成されたプログラムは、主にイベント ハンドラーで構成されています。
イベントは命令セットレベルでも使用でき、割り込みを補完します。割り込みと比較すると、イベントは通常同期的に実装されます。つまり、プログラムはイベントが生成されて処理されるのを明示的に待機します (通常は、次のイベントをディスパッチする命令を呼び出すことによって)。一方、割り込みは即時のサービスを要求できます。
ユーザー生成イベント
プログラムやシステムが生成したり、応答したりする状況やイベントは数多くあります。ユーザーが生成する一般的なイベントには次のようなものがあります。
マウスイベント
ポインティングデバイスは、ソフトウェアが認識可能なポインティングデバイスジェスチャを多数生成できます。マウスは、マウスの移動(移動方向と距離を含む)、マウスの左/右ボタンの上下[1]、マウスホイールの動き、またはこれらのジェスチャの組み合わせなど、多数のマウスイベントを生成できます。たとえば、ダブルクリックでは通常、境界内の単語や文字が選択され、トリプルクリックでは段落全体が選択されます。
キーボードイベント
キーボードのキーまたはキーの組み合わせを押すとキーボードイベントが生成され、現在実行中のプログラムが、ユーザーがどのキーを押したかなどの入力データに応答できるようになります。[1]
ジョイスティックイベント
ジョイスティックを動かすと、XY アナログ信号が生成されます。イベントをトリガーするためのボタンが複数あることもよくあります。人気のゲーム ボックスの一部のゲームパッドでは、ジョイスティックが使用されています。
タッチスクリーンイベント
タッチスクリーンを使用して生成されるイベントは、一般にタッチ イベントまたはジェスチャと呼ばれます。
デバイスイベント
デバイス イベントには、シェイク、傾き、回転、移動など、デバイスによるアクションやデバイスに対するアクションが含まれます。
デリゲートイベントモデル
clickmeこれはイベント ソース (この例ではボタン) であり、リスナーのリストが含まれています。オブジェクト指向プログラミングの一般的なバリエーションは、一部のグラフィック ユーザー インターフェイスによって提供されるデリゲート イベント モデルです。このモデルは、次の 3 つのエンティティに基づいています。
- イベントソースであるコントロール
- リスナー(イベントハンドラとも呼ばれる)は、ソースからイベント通知を受け取ります。
- イベントを通信するためのプロトコルを記述するインターフェース(用語の広義の意味) 。
さらに、このモデルでは次のことが求められます。
- すべてのリスナーは、リッスンしたいイベントのインターフェースを実装する必要がある
- すべてのリスナーは、イベントを聞きたいという希望を表明するためにソースに登録する必要がある。
- ソースがイベントを生成するたびに、インターフェースのプロトコルに従って、登録されたリスナーにそのイベントを伝達します。
C#では、イベントを特別なデリゲートとして使用し、それを宣言したクラスによってのみ起動できます。これにより、より良い抽象化が可能になります。例: [2]
デリゲートvoid Notifier ( string sender );
クラスModel {パブリックイベントNotifier通知ビュー;パブリックvoid Change () { ...通知ビュー( "モデル" ); } }
クラスView1 { public View1 ( Modelモデル) { model.notifyViews + = new Notifier ( this.Update1 ) ; }
void Update1 ( string sender ) { Console . WriteLine ( $"{sender} は更新中に変更されました" ); } }
クラスView2 { public View2 ( Modelモデル) { model.notifyViews + = new Notifier ( this.Update2 ) ; }
void Update2 ( string sender ) { Console . WriteLine ( $"{sender} が変更されました" ); } }
クラスTest { static void Main () { Model model = new Model ();
新しいView1 (モデル) ;新しいView2 (モデル);モデル.Change (); } }
イベントハンドラ
コンピュータプログラミングでは、イベントハンドラは、プログラムで受信した入力を処理するコールバック サブルーチン(JavaおよびJavaScript [3]ではリスナーと呼ばれる)を使用して実装される場合があります。各イベントは、基礎となるフレームワーク(通常はGUIツールキット)からのアプリケーションレベルの情報です。GUIイベントには、キーの押下、マウスの動き、アクションの選択、タイマーの期限切れなどがあります。より低いレベルでは、イベントはファイルまたはネットワークストリームを読み取るための新しいデータの可用性を表すことができます。イベントハンドラは、イベント駆動型プログラミングの中心的な概念です。
イベントは、下位レベルの入力を解釈してフレームワークによって作成されます。下位レベルの入力自体が下位レベルのイベントである場合もあります。たとえば、マウスの動きやクリックはメニューの選択として解釈されます。イベントは当初、ハードウェア デバイスによって生成された割り込み、ソフトウェア割り込み命令、ポーリングでの状態の変化など、オペレーティング システム レベルのアクションから発生します。このレベルでは、割り込み ハンドラーとシグナル ハンドラーがイベント ハンドラーに対応します。
作成されたイベントは、まずフレームワーク内のイベント ディスパッチャによって処理されます。通常、イベント ディスパッチャはイベントとイベント ハンドラ間の関連付けを管理し、イベント ハンドラまたはイベントをキューに入れて後で処理します。イベント ディスパッチャはイベント ハンドラを直接呼び出すか、実行するハンドラに関する情報とともにイベントがキューから取り出されるのを待機します。
イベント通知
イベント通知は、小さなメッセージ(「イベント」) を生成するアプリケーションを、関連する条件を監視し、イベントによってトリガーされるアクションを実行する可能性のあるアプリケーションにリンクするために、通信 ソフトウェアと組み合わせて使用される用語です。
イベント通知は、最新のデータベースシステム (監視対象の条件が発生したときにアプリケーションに通知するために使用される)、最新のオペレーティング システム (ウィンドウの更新など、何らかのアクションを実行する必要があるときにアプリケーションに通知するために使用される)、およびイベントのプロデューサーがコンシューマーとは異なるマシン上にある可能性がある最新の分散システムにおいて重要な機能です。イベント通知プラットフォームは通常、イベントを生成するアプリケーションが、どのアプリケーションがイベントを消費するか、またはイベント ストリームを監視するアプリケーションの数さえ知る必要がないように設計されています。
イベント通知は、ネットワーク設定でイベント通知をサポートする製品の 1 つのクラスに関連する用語であるパブリッシュ/サブスクライブの同義語として使用されることがあります。仮想同期モデルは、イベント通知システムとパブリッシュ/サブスクライブ システムに、より強力なフォールト トレランスと一貫性の保証を与えるために使用されることがあります。
参照
- コールバック(コンピュータプログラミング)
- データベーストリガー
- DOMイベント
- イベント駆動型プログラミング
- 例外処理
- 割り込みハンドラ
- 割り込み
- オブザーバーパターン(例:イベントリスナー)
- Reactor パターンとProactor パターン
- 信号プログラミング
- 仮想同期
参考文献
- ^ ab Windows フォームのマウス イベントとキーボード イベント。Microsoft。2008 年 2 月 12 日に取得。
- ^ メッセンベック、ハンスペーター (2002-03-25)。 「高度な C#: 可変数のパラメーター」(PDF)。システムソフトウェア研究所、リンツのヨハネス・ケプラー大学、Fachbereich Informatik。 p. 26.2011 年 8 月 5 日に取得。
- ^ 「EventTarget.addEventListener() - Web API | MDN」。developer.mozilla.org。2024年3月11日。
外部リンク
- 記事イベントハンドラとコールバック関数
- サブファームイベントハンドラの高レベル設計
- XML のイベント構文
- 分散イベントと通知
- イベントの順序
Java DOM Interface EventJavadocドキュメントjava.awt.eventJava パッケージ Javadoc API ドキュメントjavax.swing.eventJava パッケージJavadoc API ドキュメント- イベントハンドラを書く
