传统的MS-DOS程序主要采用顺序的、关联的、过程驱动的程序设计方法。一个程序是一系列预先定义好的 *** 作序列的组合,它具有一定的开头、中间过程和结束。程序直接控制程序事件和过程的顺序。这样的程序设计方法是面向程序而不是面向用户的,交互性差,用户界面不够友好,因为它强迫用户按照某种不可更改的模式进行工作。
2\事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。
对于需要用户交互的应用程序来说,事件驱动的程序设计有着过程驱动方法无法替代的优点。
它是一种面向用户的程序设计方法,它在程序设计过程中除了完成所需功能之外,更多的考虑了用户可能的各种输入,并针对性的设计相应的处理程序。
它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件
“事件驱动机制”里的事件和c#中的event不是一回事。就像java和c++里没有event这个关键字并且不用delegate。但是它们在处理GUI程序时却都是用事件驱动机制来完成。
从机制上讲,事件就是你干了什么,你点击了一个button,选择了一个下拉菜单,点击关闭按钮。那么这个时候程序该怎么反应呢?这就看你的事件(或者说动作)有谁关心和谁关联。
拿button为例,它有一个事件叫单击,当单击发生时,button会发布一个消息“我被单击了”;在这之前关心这个问题的类会跟这个事件注册一下,就是说我订阅你的消息,当你事件发生时,这个消息要给我知道。而当订阅者知道事情发生了它就会采取相应的处理也就是调用自己预先写好的事件处理方法。
拿现实为例,出版社会发行报纸,而一个事件发生(比方某煤矿瓦斯爆炸)它会出现在报纸上,这就是一个消息;而如果你想知道发生了什么,你就要订阅报纸,这样每有消息,都会把报纸送到你家的邮箱;不同的人收到报纸他就会有不同的反应做出不同的处理,比方家人在那个煤矿的人和投资了那个煤矿的人就会做不同反应。
在实现上,c#是用委托做的,事件是一个特殊的委托,不用事件也能完成,但是可能会出现问题,就是有人可以绕过你这个事件发生而使用委托即事件没发生却可以从后台调用你的事件处理方法,为了限制这个行为采用关键字event来修饰委托或者说创建了一个“事件”的概念。
而在java中,是用Listener来做的,你一个事件源负责发布消息,而关心它的类会有一个Listener并在内部编写事件处理方法,而在事件源中addActionListener就是把外部的一个关心者注册起来,表示别人关心你订阅了你的消息。
Visual Basic 概念
为了理解应用程序开发过程,先要理解 Visual Basic 赖以创建的一些关键概念。因为 Visual Basic 是 Windows 开发语言,所以有必要与 Windows 环境保持一定的相似性。如果不熟悉 Windows 编程,就需要明白在 Windows 环境下编程和在其它环境下编程的一些根本性的差别。
Windows 的工作方式:窗口、事件和消息
全面地讨论 Windows 的内部工作机制将需要整整一本书的容量。没有必要深入了解所有的技术细节。Windows 的工作机制,简单地说就是三个关键的概念:窗口、事件和消息。
不妨简单地将窗口看做带有边界的矩形区域。也许已经了解几种不同类型的窗口:如,Windows 95 的“资源管理器”窗口、文字处理程序中的文档窗口或者d出提示有约会信息的对话框。除了这些最普通的窗口外,实际上还有许多其它类型的窗口。命令按钮是一个窗口。图标、文本框、选项按钮和菜单条也都是窗口。
Microsoft Windows *** 作系统通过给每一个窗口指定一个唯一的标识号(窗口句柄或 hWnd)来管理所有的窗口。 *** 作系统连续地监视每一个窗口的活动或事件的信号。事件可以通过诸如单击鼠标或按下按键的 *** 作而产生,也可以通过程序的控制而产生,甚至可以由另一个窗口的 *** 作而产生。
每发生一次事件,将引发一条消息发送至 *** 作系统。 *** 作系统处理该消息并广播给其它窗口。然后,每一个窗口才能根据自身处理该条消息的指令而采取适当的 *** 作(例如,当窗口解除了其它窗口的覆盖时,重显自身窗口)。
可以想象,处理各种窗口、事件和消息的所有可能的组合将有惊人的工作量。幸运的是,Visual Basic 使您摆脱了所有的低层消息处理。许多消息由 Visual Basic 自动处理了,其它的作为事件过程由编程者自行处理。这样可以快速创建强大的应用程序而毋需涉及不必要的细节。
事件驱动模型
在传统的或“过程化”的应用程序中,应用程序自身控制了执行哪一部分代码和按何种顺序执行代码。从第一行代码执行程序并按应用程序中预定的路径执行,必要时调用过程。
在事件驱动的应用程序中,代码不是按照预定的路径执行-而是在响应不同的事件时执行不同的代码片段。事件可以由用户 *** 作触发、也可以由来自 *** 作系统或其它应用程序的消息触发、甚至由应用程序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此应用程序每次运行时所经过的代码的路径都是不同的。
因为事件的顺序是无法预测的,所以在代码中必须对执行时的“各种状态”作一定的假设。当作出某些假设时(例如,假设在运行来处理某一输入字段的过程之前,该输入字段必须包含确定的值),应该组织好应用程序的结构,以确保该假设始终有效(例如,在输入字段中有值之前禁止使用启动该处理过程的命令按钮)。
在执行中代码也可以触发事件。例如,在程序中改变文本框中的文本将引发文本框的 Change 事件。如果 Change 事件中包含有代码,则将导致该代码的执行。如果原来假设该事件仅能由用户的交互 *** 作所触发,则可能会产生意料之外的结果。正因为这一原因,所以在设计应用程序时理解事件驱动模型并牢记在心是非常重要的。
交互式开发
传统的应用程序开发过程可以分为三个明显的步骤:编码、编译和测试代码。但是 Visual Basic 与传统的语言不同,它使用交互式方法开发应用程序,使三个步骤之间不再有明显的界限。
在大多数语言里,如果编写代码时发生了错误,则在开始编译应用程序时该错误就会被编译器捕获。此时必须查找并改正该错误,然后再次进行编译,对每一个发现的错误都要重复这样的过程。Visual Basic 在编程者输入代码时便进行解释,即时捕获并突出显示大多数语法或拼写错误。看起来就象一位专家在监视代码的输入。
除即时捕获错误以外,Visual Basic 也在输入代码时部分地编译该代码。当准备运行和测试应用程序时,只需极短时间即可完成编译。如果编译器发现了错误,则将错误突出显示于代码中。这时可以更正错误并继续编译,而不需从头开始。
由于 Visual Basic 的交互特性,因此可以发现在开发应用程序时,您自己正频繁地运行着您的应用程序。通过这种方式,代码运行的效果可以在开发时进行测试,而不必等到编译完成以后
===============================================================
事件驱动应用程序的工作方式
事件是窗体或控件识别的动作。在响应事件时,事件驱动应用程序执行 Basic 代码。Visual Basic 的每一个窗体和控件都有一个预定义的事件集。如果其中有一个事件发生,而且,在关联的事件过程中存在代码,则 Visual Basic 调用该代码。
尽管 Visual Basic 中的对象自动识别预定义的事件集,但要判定它们是否响应具体事件以及如何响应具体事件则是编程的责任了。代码部分(即事件过程)与每个事件对应。 想让控件响应事件时,就把代码写入这个事件的事件过程之中。
对象所识别的事件类型多种多样,但多数类型为大多数控件所共有。例如,大多数对象都能识别 click 事件—如果单击窗体,则执行窗体的单击事件过程中的代码;如果单击命令按钮,则执行命令按钮的 click 事件过程中的代码。每个情况中的实际代码几乎完全不一样。
这里是事件驱动应用程序中的典型事件序列:
启动应用程序,装载和显示窗体。
窗体(或窗体上的控件)接收事件。事件可由用户引发(例如键盘 *** 作),可由系统引发(例如定时器事件),也可由代码间接引发(例如,当代码装载窗体时的 Load 事件)。
如果在相应的事件过程中存在代码,就执行代码。
应用程序等待下一次事件。
注意 许多事件伴随其它事件发生。例如,在 DblClick 事件发生时,MouseDown、MouseUp 和 Click 事件也会发生。
你问的是两个层面的事情,事件驱动编程机制既可以以面向过程的程序设计方式实现,比如Windows C,也可以以面向对象的方式实现,比如Java。
面向过程程序设计方式,原理是写代码不断检查事件队列,通常代码放在具有很多的switch语句的循环体内部。
面向对象的实现方式,有多种,以Java为例,它采用事件委托模型,把事件源、事件作为对象,事件监听器作为接口,事件源有一些向其注册事件监听器的方法。原理是,当某个事件源(例如按钮)产生事件时,事件源想为事件(如点击事件)注册的所有事件监听器对象发送一个通告。程序主要在事件监听器的代码里面写逻辑。
以上就是关于传统过程化的应用程序和事件驱动的应用程序有什么区别全部的内容,包括:传统过程化的应用程序和事件驱动的应用程序有什么区别、C#中的事件驱动机制如何理解!理解要透彻,乱贴着鄙视!、什么是VB的事件驱动机制(要1500字以上)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)