事件驅動程式設計(英語:Event-driven programming)是一種電腦編程範型。這種模型的程式執行流程是由使用者的動作(如滑鼠的按鍵,鍵盤的按鍵動作)或者是由其他程式的訊息來決定的。相對於批次程式設計(batch programming)而言,程式執行的流程是由程式設計師來決定。批处理(batch)的程式設計在初級程式設計教學課程上是一種方式。然而,事件驅動程式設計這種設計模型是在互動程序(Interactive program)的情況下孕育而生的。

事件驅動程序可以由任何程式語言來實作,然而使用某些語言來撰寫會比其他的語言來的簡單。有些整合開發環境(簡稱IDE)也會影響實作事件驅動程式設計的難易程度。有的 IDE 會使的開發工作變的很簡單,有的則否。

概觀

编辑

取代傳統上一次等待一個完整的指令然後再做執行的方式,事件驅動程式模型下的系統,基本上的架構是預先設計一個事件迴圈所形成的程序,這個事件迴圈程序不斷地檢查目前要處理的資訊,根據要處理的資訊執行一個觸發函式進行必要的處理。其中這個外部資訊可能來自一個目錄夾中的檔案,可能來自鍵盤或滑鼠的動作,或者是一個時間事件。

對一個事件驅動(event driven)系統進行程式設計,因此可以視為改寫系統預設觸發函式的行為,來符合自己需要的一種動作。輸入的事件可以放進事件迴圈或者是經由已經註冊的中斷處理器來與硬體事件互動;而許多的軟體系統使用了混和這兩種技術的處理。預先設計好的演算法確定了一件事,那就是當他們被需要的時候,就會在適當的時機被觸發。也因此提供了一個模擬中斷驅動環境(interrupt driven environment)的軟體抽象架構。事件驅動程式設計基本上包含了許多小程式片段,這些小程式片段被稱為事件處理器英语event handler並且被用來回應外部的事件與分發事件。通常尚未被事件處理器處理的事件,都會被系統放在一個稱為事件佇列的資料結構中,等待被處理。

許多情況下,事件處理器可以自己觸發事件,因此也可能形成一個事件串英语event cascade。 事件驅動程式設計的著重於彈性以及非同步化上面,並且企圖盡可能的modeless图形用户界面這類程式就是典型的事件驅動設計方式。

計算機作業系統是事件驅動程式的典型範例。在作業系統的最底層,中斷處理器的動作就像是硬體事件的直接處理器,搭配著 CPU 執行分配事件規則動作。對軟體處理程序而言,基本上作業系統可視為一個事件分配器,傳送資料和軟體中斷給使用者自己寫的軟體處理程序。

相對應於批次程式設計

编辑

下面是兩個數相加的範例,分別用批次版本與事件驅動版本來撰寫

批次版本

编辑
read a number (from the keyboard) and store it in variable A[0]
read a number (from the keyboard) and store it in variable A[1]
print A[0]+A[1]

事件驅動版本

编辑
set counter K to 0
repeat {
   if a number has been entered (from the keyboard) {
       store in A[K] and increment K
       if K equals 2 print A[0]+A[1] and reset K to 0
   }
}

事件驅動程式框架與程式庫

编辑

📚 Artikel Terkait di Wikipedia

数据驱动编程

Object-oriented design: a responsibility-driven approach. Conference Proceedings on Object-Oriented Programming Systems, Languages and Applications (New

事件 (计算)

前摄器模式(英语:Proactor pattern) 信号编程(英语:Signal programming) 虚拟同步(英语:Virtual synchrony) Stopford, Ben. Designing Event-Driven Systems. O'Reilly Media. May 2018. ISBN 9781492038245

面向对象程序设计

物件導向程式設計(英語:Object-oriented programming,缩写:OOP)是種具有物件概念的程式設計典範,同时也是一种程式开发的抽象方针。它可能包含資料、特性、程式碼與方法。对象則指的是類別(class)的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用

面向特性编程

Annotation-Driven Java Program Transformer XDoclet, a Javadoc-Driven Program Generator Don Schwarz. Peeking Inside the Box: Attribute-Oriented Programming with

快速應用程式開發

prototyping)技術的程序设计方法学。根據Jeffrey L. Whitten於2004年所下的定義,這是一種採用數種結構化分析與設計技術(特別是資料驅動(data-driven)型的資訊工程相關技術)與原型製作技術來加速軟體系統開發的整合技術。 在快速應用程式開發中,結構化與原型製作的技術被用來定義使用者的需求並

Clojure

To Functional Programming. CleanCoders.com. 2018-08 [2019-07-08]. (原始内容存档于2019-07-08).  Martin, Robert. Pragmatic Functional Programming. CleanCoder.com

面向切面的程序设计

categories (which allows the encapsulation of aspect code) and event-driven programming (which allows the definition of before and after event handlers).

契约式设计

by Contract”是属于Eiffel Software的注册商标,很多开发人员用契約式編程(Programming by Contract),契約編程(Contract Programming),或者契約優先式開發(Contract-First development)来指代这种方法。微軟也