事件驱动

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2011-1-6
6
事件驱动系统的特点: 事件驱动系统的特点:
系统是由若干子系统或元素所组成的一个整体。 系统是由若干子系统或元素所组成的一个整体。 系统有一定的目标,各子系统在某一种消息机制的控制下,为了这个 系统有一定的目标,各子系统在某一种消息机制的控制下, 目标而协调行动。 目标而协调行动。 在某一种消息机制的控制下, 在某一种消息机制的控制下,系统作为一个整体与环境相适应和协 调。 在一个系统的若干子系统中,必定有一个子系统起着主导作用,而其 在一个系统的若干子系统中,必定有一个子系统起着主导作用, 它子系统则处于从属地位。 它子系统则处于从属地位。 任一系统和系统内的任一元素,都有一个事件收集机制和一个事件处 任一系统和系统内的任一元素, 理机制,通过这种机制与周围环境发生作用和联系。 理机制,通过这种机制与周围环境发生作用和联系。
2011-1-6
11
事件驱动模式系统设计的基本原则
(5)在一个完整系统中,必须有这样一个子系统,它没有上级, (5)在一个完整系统中,必须有这样一个子系统,它没有上级,必须 在一个完整系统中 收集系统外的事件及下级发出的事件。 收集系统外的事件及下级发出的事件。 (6)管理类型的子系统一般不执行具体操作, (6)管理类型的子系统一般不执行具体操作,它的主要功能是按照自 管理类型的子系统一般不执行具体操作 己的职能指挥下级完成任务, 己的职能指挥下级完成任务,功能性操作一般由执行类型的子系统完 换言之,管理类型子系统一般在概念级操作。 成。换言之,管理类型子系统一般在概念级操作。 在一般情况下,除最高级管理子系统外,子系统一般是“ (7)在一般情况下,除最高级管理子系统外,子系统一般是“有问才 即使在必要的情况下需要积极寻找事件时, 答”,即使在必要的情况下需要积极寻找事件时,也必须征得上级系 统的许可,保证了系统的控制流不会分散。 统的许可,保证了系统的控制流不会分散。
2011-1-6 13
事件驱动系统的基本结构
1、EventSystem
o为事件驱动模式系统中的子系 统声明接口; 统声明接口; o在适当时清况下,实现所有子 在适当时清况下, 系统共有的接口的缺省行为; 系统共有的接口的缺省行为; o声明一个接口用于访问和管理 事件驱动模式系统的子系统; 事件驱动模式系统的子系统; o在递归结构中定义一个接口 , 在递归结构中定义一个接口, 用于访问一个父系统, 用于访问一个父系统 , 并在合 适的情况下实现它。 适的情况下实现它。
事件驱动模式系统的基本结构
2011-1-6
17
显式调用vs. 隐式调用
2011-1-6
18
显式调用
各个构件之间的互动是由显性调用函数或 程序完成的。 调用过程与次序是固定的、预先设定的。
2011-1-6
19
回顾:之前学过的几种风格
通过数据流实现交互 • Pipe and filter • Batch sequential 通过显式的函数调用实现交互 • Main program and subroutine •OO 共性: 共性:
2011-1-6
20
隐式调用
在很多情况下,软件更多的变成被动性系统,构件持续的 与其所处的环境打交道,但并不知道确切的 交互次序
2011-1-6
21
基于事件的隐式调用
构件不直接调用一个过程,而是触发或广播一个 构件不直接调用一个过程, 或多个事件。 或多个事件。 系统中的其它构件中的过程在一个或多个事件中 注册。 注册。 当一个事件被触发/发布 发布, 当一个事件被触发 发布,系统自动调用在这个事 件中注册的所有过程。 件中注册的所有过程。 这样, 这样,一个事件的触发就导致了另一模块中的过 程的调用。 程的调用。 这种系统,称为基于事件的系统(Event-based 这种系统,称为基于事件的系统 system),采用隐式调用 ,采用隐式调用(Implicit invocation)的 的 方式。 方式。
2011-1-6 22
为何称为“独立构件”风格?
这种风格的主要特点是:事件的触发者并 不知道哪些构件会被这些事件影响,相互 保持独立。
这样不能假定构件的处理顺序,甚至不知道哪 些过程会被调用; 各个构件之间彼此无直接的连接关系,各自独 立存在,通过对事件的发布和注册实现关联。
2011-1-6
23
事件系统的基本构成与工作原理
2011-1-6
26
事件系统的连接机制(2)
2011-1-6
7
一个例子:调试器
2011-1-6
8
推论: 推论:
1、作为系统中的任何一个子系统,必然有它自己的整体性和相对 作为系统中的任何一个子系统, 独立性,它与其他子系统的联系是通过某种消息机制完成的。 独立性,它与其他子系统的联系是通过某种消息机制完成的。 2、从这种观点来看,过去的结构化、模块化系统所划分的模块 从这种观点来看,过去的结构化、 不能称为子系统。 不能称为子系统。 3、面向对象的事件驱动系统设计方法把软件系统作为一个系统, 面向对象的事件驱动系统设计方法把软件系统作为一个系统, 将其分为一个个子系统来实现。 将其分为一个个子系统来实现。
2011-1-6
12
事件驱动系统的基本结构
从上述的概述不难看出,事件驱动系统具有某种意义上的递归性, 从上述的概述不难看出,事件驱动系统具有某种意义上的递归性,形成了 部分—整体”的层次结构,可以用属性结构加以表示。 “部分—整体”的层次结构,可以用属性结构加以表示。用户可以组合多个 简单子系统以形成一些较大的子系统, 简单子系统以形成一些较大的子系统,这些较大的子系统又可以组合成更大 的子系统。一个简单的表示方法是为执行系统定义一些类, 的子系统。一个简单的表示方法是为执行系统定义一些类,另外定义一些类 作为这些执行系统的容器类,也就是管理系统。 作为这些执行系统的容器类,也就是管理系统。 这种方法存在一个问题。 * 这种方法存在一个问题。使用这些类的代码必须区别对待执行系统与管理 系统,而实际情况下对用户而言,它们在很大程度上是一样的。 系统,而实际情况下对用户而言,它们在很大程度上是一样的。对这两种子 系统区别使用,使得整个系统的实现和使用更加复杂。为了简化事件驱动模 系统区别使用,使得整个系统的实现和使用更加复杂。 式系统的设计、实现和使用, (Composite)模 式系统的设计、实现和使用,可以借鉴设计模式中的结构型 (Composite)模 来定义、组织和管理事件驱动模式系统中的执行系统和管理系统。 式,来定义、组织和管理事件驱动模式系统中的执行系统和管理系统。简化 的关键就是定义一个接口(或抽象类) 它既可以代表执行系统, 的关键就是定义一个接口(或抽象类),它既可以代表执行系统,又可以代表 执行系统的容器(管理系统) 在事件驱动模式系统中, 执行系统的容器(管理系统)。在事件驱动模式系统中,我们定义这个接口的 名字为EventSystem 它声明了一些与事件驱动相关的操作, 名字为EventSystem,它声明了一些与事件驱动相关的操作,例如 EventSystem, EventProcess(事件处理器 事件处理器) EventProcess(事件处理器)。同时它也声明了所有的管理系统共享的一些操 例如EventDistribute(事件分发器) EventCollect(事件收集器 EventDistribute(事件分发器 事件收集器) 作,例如EventDistribute(事件分发器)和EventCollect(事件收集器)。其 结构图可以用UML类图描述如图: UML类图描述如图 结构图可以用UML类图描述如图:
事件驱动模式系统的基本结构
2011-1-6
Байду номын сангаас16
事件驱动系统的基本结构
4、Client
通过EventSystem 操作整个事件 通过 EventSystem操作整个事件 驱动模式系统, 驱动模式系统 , 与系统中的子 系统进行交互。 系统进行交互 。 如果消息接收 者是一个执行子系统, 者是一个执行子系统 , 则直接 处理请求; 处理请求 ; 如果接收者是管理 子系统, 子系统 , 它通常将请求以消息 的形式发送给它的子系统, 的形式发送给它的子系统 , 在 转发请求消息之间或之后, 转发请求消息之间或之后 , 可 能执行一些辅助操作。 能执行一些辅助操作。
2011-1-6
9
一个基于事件驱动的软件系统的示意图
2011-1-6
10
事件驱动模式系统设计的基本原则
(1)从系统论的角度来看待描述的对象,合理分解子系统, (1)从系统论的角度来看待描述的对象,合理分解子系统,保证各个 从系统论的角度来看待描述的对象 子系统的独立性和社会性。 子系统的独立性和社会性。 (2)无论系统多么复杂,子系统性质的差异多么大, (2)无论系统多么复杂,子系统性质的差异多么大,任何子系统都可 无论系统多么复杂 以按照有无子系统这一性质分为2 管理系统和执行系统。 以按照有无子系统这一性质分为2类:管理系统和执行系统。执行系 统是无子系统的系统,管理系统是有子系统的系统, 统是无子系统的系统,管理系统是有子系统的系统,其子系统可以是 管理系统也可以是执行系统。 管理系统也可以是执行系统。 (3)为了达到系统的目标, (3)为了达到系统的目标,系统内的各个子系统通过传递消息和执行 为了达到系统的目标 消息来协同操作。一般不在同级子系统间直接传递消息, 消息来协同操作。一般不在同级子系统间直接传递消息,而是通过上 级来协调操作。这样,既可以使子系统间的耦合性降低, 级来协调操作。这样,既可以使子系统间的耦合性降低,又能协调动 作。 (4)任何性质的子系统都必须有一个事件处理器, (4)任何性质的子系统都必须有一个事件处理器,用以处理上级交给 任何性质的子系统都必须有一个事件处理器 的事件。 的事件。管理性质的子系统还必须有一个事件分发机制和事件收集机 能对上级交给的事件作出判断后交给下级区之行, 制,能对上级交给的事件作出判断后交给下级区之行,也能收集下级 交上来的各种事件。 交上来的各种事件。
2011-1-6
24
事件系统的基本构件
基本构件:对象或过程, 基本构件:对象或过程,并分类为以下更 小的构件 --过程或函数,充当事件源或事件处理器的 过程或函数, 过程或函数 角色 --事件 事件
2011-1-6
25
事件系统的连接机制(1)
连接器:事件-过程绑定
过程<事件处理器,事件的接收和处理方>向特定的 事件进行注册); 构件<事件源>发布事件; 当某些事件被发布时,向其注册的过程被隐式调用; 调用的次序是不确定的;
事件驱动模式系统的基本结构
2011-1-6
14
事件驱动系统的基本结构
2、ExecSystem
o在事件驱动模式系统中表示执 行子系统, 行子系统 , 执行子系统是无子 系统的系统; 系统的系统; o定义执行子系统具体的行为。 定义执行子系统具体的行为。
事件驱动模式系统的基本结构
2011-1-6
15
事件驱动系统的基本结构
事件驱动系统的基本观点是一个系统对外部的表现可 以从它对事件的处理表征出来。我们要认识一个系统, 以从它对事件的处理表征出来。我们要认识一个系统, 可以给它一个输入事件,然后观察它的输出, 可以给它一个输入事件,然后观察它的输出,从而分 析和综合出一个系统。 析和综合出一个系统。概念上的事件驱动系统如图 :
3、ManageSystem
o定义管理子系统的基本行为 , 定义管理子系统的基本行为, 如事件分发机制和事件收集机 制等; 制等; o存储其子系统 ,也就是由它管 存储其子系统, 理的执行子系统或管理子系统; 理的执行子系统或管理子系统 ; o在 EventSystem 接 口 中 实 现 与 子系统有关的操作。 子系统有关的操作。
软件体系结构的风格 事件驱动体系结构 Event System
独立构件风格概述
2011-1-6
2
消息
2011-1-6
3
事件
能够激活对象功能的动作。当发生这种动作后将 给所涉及对象发送一个消息,对象便可执行相应 的功能
2011-1-6
4
2011-1-6
5
Event Systems(事件驱动系统 事件驱动系统) 事件驱动系统
相关文档
最新文档