「イベント駆動型プログラミング」の版間の差分
m 曖昧さ回避ページブラックボックスへのリンクを解消、リンク先をブラックボックス (代表的なトピック)に変更(DisamAssist使用) |
編集の要約なし |
||
(同じ利用者による、間の1版が非表示) | |||
1行目: | 1行目: | ||
{{出典の明記|date=2015年12月}} |
{{出典の明記|date=2015年12月}} |
||
[[ファイル:Event driven programming Simply Explained.jpg|境界|右|フレームなし|265x265ピクセル]] |
|||
'''イベント駆動型プログラミング'''(イベントくどうがたプログラミング、{{lang-en-short|event-driven programming}})は、[[コンピュータプログラム]]が起動すると共に[[イベント (プログラミング)|イベント]]を待機し、発生したイベントに従って受動的に処理を行う[[プログラミングパラダイム]]のこと。従来の[[キャラクタユーザインタフェース]] (CUI) のプログラムに多く見られる、起動後に指定のタスクのみを実行して即座に終了するような、直線的な[[制御フロー]]を基本とするプログラミングパラダイムに対する概念。「イベント駆動」は「イベントドリブン ({{lang|en|event-driven}})」とカナ表記されることもある。 |
|||
⚫ | |||
'''イベント駆動プログラミング'''({{lang-en-short|''event-driven programming''}})は、イベントの発生によってプログラムフローが決定されるプログラミング手法である。イベントとは[[クリック (マウス)|マウスクリック]]や[[キーボード (コンピュータ)|キーボード]]押下によるユーザーアクション、センサーやシグナルなどによるハードウェアインプット、他の[[スレッド (コンピュータ)|スレッド]]や[[トランザクション]]からのメッセージレシーブなどを指す。プログラムフローとはスレッドの開始やプロセスの分岐を意味する。[[グラフィカルユーザーインターフェース]]上のシステムでよく用いられる手法であり、ユーザー入力へのレスポンス部分の実装に適合している。 |
|||
⚫ | |||
⚫ | |||
規則型(宣言型)のイベント駆動型プログラミングにおいては、規則の条件部が満たされ指定されたイベントが発生すると、その規則が実行される。このような規則を [[ECA]]規則 ({{lang|en|event-condition-action rule}}) という。 |
規則型(宣言型)のイベント駆動型プログラミングにおいては、規則の条件部が満たされ指定されたイベントが発生すると、その規則が実行される。このような規則を [[ECA]]規則 ({{lang|en|event-condition-action rule}}) という。 |
||
11行目: | 14行目: | ||
イベント駆動型プログラミングを行うメリットは、アプリケーションを作成する際に、必要なイベントハンドラーにのみ処理を書けばよい、ということである。イベントを待機するプログラム構造自体はどのアプリケーションもほぼ共通であり、結果として、アプリケーションフレームワークによるプログラム構造の[[ブラックボックス (代表的なトピック)|ブラックボックス]]化と再利用がしやすくなり、アプリケーションプログラマーが記述しなければならないコード量が減る。処理の記述をハンドラーごとに分けるので、プログラムの見通しも良くなる。 |
イベント駆動型プログラミングを行うメリットは、アプリケーションを作成する際に、必要なイベントハンドラーにのみ処理を書けばよい、ということである。イベントを待機するプログラム構造自体はどのアプリケーションもほぼ共通であり、結果として、アプリケーションフレームワークによるプログラム構造の[[ブラックボックス (代表的なトピック)|ブラックボックス]]化と再利用がしやすくなり、アプリケーションプログラマーが記述しなければならないコード量が減る。処理の記述をハンドラーごとに分けるので、プログラムの見通しも良くなる。 |
||
==用語と解説== |
|||
==イベント駆動型プログラミングの用語== |
|||
; イベント : 「キーボードのキーを押した」、「時計がある時刻になった」などの、プログラムの流れとは別に発生する事象。または、その事象に関する情報を含んだ[[メッセージ (コンピュータ)|メッセージ]]を指す。 →[[イベント (プログラミング)]] |
; イベント : 「キーボードのキーを押した」、「時計がある時刻になった」などの、プログラムの流れとは別に発生する事象。または、その事象に関する情報を含んだ[[メッセージ (コンピュータ)|メッセージ]]を指す。 →[[イベント (プログラミング)]] |
||
; イベントハンドラー : イベントが発生した際に実行すべき[[サブルーチン]]のこと。イベント[[フック (プログラミング)|フック]]、イベントリスナーなどの呼び方がある。 |
; イベントハンドラー : イベントが発生した際に実行すべき[[サブルーチン]]のこと。イベント[[フック (プログラミング)|フック]]、イベントリスナーなどの呼び方がある。 |
||
18行目: | 21行目: | ||
; イベントキュー : 複数のイベントが連続して発生した場合に、それらのイベントを[[キュー (コンピュータ)|待ち行列]]として保持するデータ構造。イベントの発生間隔が短く、次のイベントが発生するまでにイベントハンドラーの処理が間に合わない場合に[[バッファ]]として用いられる。→[[メッセージキュー]] |
; イベントキュー : 複数のイベントが連続して発生した場合に、それらのイベントを[[キュー (コンピュータ)|待ち行列]]として保持するデータ構造。イベントの発生間隔が短く、次のイベントが発生するまでにイベントハンドラーの処理が間に合わない場合に[[バッファ]]として用いられる。→[[メッセージキュー]] |
||
; [[イベントループ]] : イベントを待機する[[ループ (プログラミング)|ループ]]を持つ機構。イベントループ内にイベントディスパッチャーを持つ構造が一般的である。メッセージループ、メッセージポンプとも呼ばれる。 |
; [[イベントループ]] : イベントを待機する[[ループ (プログラミング)|ループ]]を持つ機構。イベントループ内にイベントディスパッチャーを持つ構造が一般的である。メッセージループ、メッセージポンプとも呼ばれる。 |
||
== 脚注 == |
|||
<div class="references-small"><references/></div> |
|||
==関連項目== |
==関連項目== |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
*[[イベント (プログラミング)]] |
*[[イベント (プログラミング)]] |
||
*[[イベントループ]] |
*[[イベントループ]] |
||
⚫ | |||
⚫ | |||
*[[出版-購読型モデル]] |
*[[出版-購読型モデル]] |
||
*[[メッセージ指向ミドルウェア]] |
*[[メッセージ指向ミドルウェア]] |
||
⚫ | |||
⚫ | |||
⚫ | |||
*{{仮リンク|フローベースプログラミング|en|Flow-based programming}} |
*{{仮リンク|フローベースプログラミング|en|Flow-based programming}} |
||
<!-- 以前の版に記載されてあった「フロー駆動型プログラミング」は出典がなく、独自研究により生み出された造語と思われるため、削除。なお、「命令型プログラミング」や「手続き型プログラミング」は、イベント駆動型プログラミングの対になる概念ではない。 --> |
<!-- 以前の版に記載されてあった「フロー駆動型プログラミング」は出典がなく、独自研究により生み出された造語と思われるため、削除。なお、「命令型プログラミング」や「手続き型プログラミング」は、イベント駆動型プログラミングの対になる概念ではない。 --> |
2021年2月15日 (月) 02:48時点における版
プログラミング・パラダイム |
---|
イベント駆動プログラミング(英: event-driven programming)は、イベントの発生によってプログラムフローが決定されるプログラミング手法である。イベントとはマウスクリックやキーボード押下によるユーザーアクション、センサーやシグナルなどによるハードウェアインプット、他のスレッドやトランザクションからのメッセージレシーブなどを指す。プログラムフローとはスレッドの開始やプロセスの分岐を意味する。グラフィカルユーザーインターフェース上のシステムでよく用いられる手法であり、ユーザー入力へのレスポンス部分の実装に適合している。
特徴
規則型(宣言型)のイベント駆動型プログラミングにおいては、規則の条件部が満たされ指定されたイベントが発生すると、その規則が実行される。このような規則を ECA規則 (event-condition-action rule) という。
手続き型のイベント駆動型プログラミングにおいては、まず各イベントに対応する処理を記述した手続き(サブルーチン、関数、あるいはメソッド)を、システムあるいはアプリケーションフレームワークに登録する。この手続きはイベントハンドラー (event handler) と呼ばれ、イベントが発生したときにシステムあるいはアプリケーションフレームワークによって呼び出される(コールバックされる)。イベントの待機中(アイドリング時)の処理はシステムに任せる。
一般的に、グラフィカルユーザインタフェース (GUI) を使用するオペレーティングシステムやアプリケーションソフトウェアでは、イベント駆動型プログラミングを利用している。マウス操作やキーボード操作といったユーザーからの入力や、システム状態の変化・変更といった各イベントに対する処理を統一的に記述することができる。
イベント駆動型プログラミングを行うメリットは、アプリケーションを作成する際に、必要なイベントハンドラーにのみ処理を書けばよい、ということである。イベントを待機するプログラム構造自体はどのアプリケーションもほぼ共通であり、結果として、アプリケーションフレームワークによるプログラム構造のブラックボックス化と再利用がしやすくなり、アプリケーションプログラマーが記述しなければならないコード量が減る。処理の記述をハンドラーごとに分けるので、プログラムの見通しも良くなる。
用語と解説
- イベント
- 「キーボードのキーを押した」、「時計がある時刻になった」などの、プログラムの流れとは別に発生する事象。または、その事象に関する情報を含んだメッセージを指す。 →イベント (プログラミング)
- イベントハンドラー
- イベントが発生した際に実行すべきサブルーチンのこと。イベントフック、イベントリスナーなどの呼び方がある。
- トリガー
- イベントを発生させるきっかけ。プログラム内部でイベントを起こすことを「イベントをトリガーする」と表現することもある。
- イベントディスパッチャー
- 発生したイベントをイベントハンドラーに振り分ける機能のこと。
- イベントキュー
- 複数のイベントが連続して発生した場合に、それらのイベントを待ち行列として保持するデータ構造。イベントの発生間隔が短く、次のイベントが発生するまでにイベントハンドラーの処理が間に合わない場合にバッファとして用いられる。→メッセージキュー
- イベントループ
- イベントを待機するループを持つ機構。イベントループ内にイベントディスパッチャーを持つ構造が一般的である。メッセージループ、メッセージポンプとも呼ばれる。
脚注
関連項目
- イベント (プログラミング)
- イベントループ
- コールバック関数
- 割り込み
- 出版-購読型モデル
- メッセージ指向ミドルウェア
- データフロープログラミング
- シグナルプログラミング
- フローベースプログラミング