隱式調用
隱式調用
隱式調用風格的思想是構件不直接調用一個過程,而是觸發或廣播一個或多個事件。
目錄
基於事件的系統中的其它構件中的過程在一個或多個事件中註冊,當一個事件被觸發,系統自動調用在這個事件中註冊的所有過程,這樣,一個事件的觸發就導致了另一模塊中的過程的調用。
從體系結構上說,這種風格的構件是一些模塊,這些模塊既可以是一些過程,又可以是一些事件的集合。過程可以用通用的方式調用,也可以在系統事件中註冊一些過程,當發生這些事件時,過程被調用。
基於事件的隱式調用風格的主要特點是事件的觸發者並不知道哪些構件會被這些事件影響。這樣不能假定構件的處理順序,甚至不知道哪些過程會被調用,因此,許多隱式調用的系統也包含顯式調用作為構件交互的補充形式。
支持基於事件的隱式調用的應用系統很多。例如,在編程環境中用於集成各種工具,在資料庫管理系統中確保數據的一致性約束,在用戶界面系統中管理數據,以及在編輯器中支持語法檢查。例如在某系統中,編輯器和變數監視器可以登記相應Debugger的斷點事件。當Debugger在斷點處停下時,它聲明該事件,由系統自動調用處理程序,如編輯程序可以卷屏到斷點,變數監視器刷新變數數值。而Debugger本身只聲明事件,並不關心哪些過程會啟動,也不關心這些過程做什麼處理。
隱式調用系統的主要優點有:
(1)為軟體重用提供了強大的支持。當需要將一個構件加入現存系統中時,只需將它註冊到系統的事件中。
(2)為改進系統帶來了方便。當用一個構件代替另一個構件時,不會影響到其它構件的介面。
隱式調用系統的主要缺點有:
(1)構件放棄了對系統計算的控制。一個構件觸發一個事件時,不能確定其它構件是否會響應它。而且即使它知道事件註冊了哪些構件的構成,它也不能保證這些過程被 調用的順序。
(2)數據交換的問題。有時數據可被一個事件傳遞,但另一些情況下,基於事件的系統必須依靠一個共享的倉庫進行交互。在這些情況下,全局性能和資源管理便成了問題。
(3)既然過程的語義必須依賴於被觸發事件的上下文約束,關於正確性的推理存在問題。