`
presses
  • 浏览: 116124 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

面向事件编程

    博客分类:
  • flex
阅读更多

    此信息同时发布在www.humanmonth.cn 上。

 

面向事件编程:钩子。

 

如果要用一句俗一点的话来解释什么是面向事件编程,那句话就是:面向钩子编程。

 

什么是钩子呢?写过 GUI 的人,一般都接触过面向事件编程。那在 GUI 中,钩子在哪里呢?说钩子之前,先说一下元素。界面编程中有各种各样的元素,有看得见的,例如按钮、输入框,也有看不见的,例如 Socket 、异常。而这些元素下挂满了各式各样的构子(事件)例如常见的“ click ”(有些平台下,用户可以自定义构子,例如 Flex )。这些钩子中,有些是由用户触发的,例如:键盘输入、鼠标点击,有些是由远程触发的,例如: Socket IO ,也有由系统触发的,例如:异常。

 

知道了什么是钩子之后,再了解一下面向钩子编程有哪些步骤。一般来说,要用某平台的 GUI 来编程有三个步骤,第一是了解各元素下有哪些钩子、第二步是编写需要被触发的代码、第三步就是把你写的代码正确地放在钩子上。

 

面向事件编程:新瓶旧酒。

 

我们中的很大一部份人都是写后台程序出身。作为一个后台程序员,刚接触 GUI 编程时可能会认为面向事件编程是个新东西。其实你早已认识它。

 

作来后台程序员,你或多或少听过多线程吧?还记得多线程模式中的 Future 模式吗? GUI 初始化后,主类就监听各元素。而各元素开始工作:向服务端请求、数据处理、计算、等待客户输入等。每当元素做完工作就会 notify 主类,也就是触发钓子。如果你在钓子上挂了段代码,那段代码就运行起来。

 

好了,多线程你用得不多。那 GoF Observer 模式你可能比较熟。元素的事件就是目标对像、而你写的代码就是观察者。元素的事件被触发后,观察者就被通知,而你注册在事件上的代码就被执行。

 

其实现在常见 GUI 的面向事件编程就是多线程下的观察者模式。像 IO 操作、向服务端请求、元素更新,更贴近于 Future 模式。而一般的用户触发的事件更贴近观察者模式。

 

面向事件编程:常见陷阱。

<!---->1、  <!---->异常。如果你习惯于后台编程,接触到的异常一般都是同步的。而 GUI 的面向事件编程是中有部份异常是异步的。也就是说如果你要处理异步错误,你需要通过添加事件监听器来处一是。

<!---->2、  <!---->隐蔽的异步构子。有些元素的外观更新是异步的。像近来在 HIM 中修复的一个 BUG 的情况。程序监听 XMLSocket DataEvent.DATA 事件,当检查到是消息协议时,向消息框 TextArea 添加信息。由于要向用户显视最新的信息,也就是 TextArea 最下边的信息,所以在添加完后,还要获取 TextArea 的最大垂直高度,然后设置 TextArea 的重直滚动高度为最大垂直高度。代码如下:

		override public function deal(str:String):void {
			this.face.getMsgArea().htmlText+=str.match(this.getPattern())[1]+"<br/>";
			face.getMsgArea().verticalScrollPosition=face.getMsgArea().maxVerticalScrollPosition;
		}
 

              这样处理的结果是当消息长度超过一行时,只显视到消息的第一行。后来找到的原因是 TextArea 的信息更新是异步的,我运行

this.face.getMsgArea().htmlText+=str.match(this.getPattern())[1]+"<br/>";
 

后, TextArea 只更新到一半,然后我就设置它的新高度了,所以得到的高度不是最后的调度。

最后向 TextArea 添加函数:

msgArea.addEventListener(FlexEvent.UPDATE_COMPLETE,textAreaUpdateEvent);
		public function textAreaUpdateEvent(event:FlexEvent):void{
				this.getMsgArea().verticalScrollPosition=this.getMsgArea().maxVerticalScrollPosition;
		}。
 

后,问题解决。

分享到:
评论
2 楼 流浪的面包树 2008-08-13  
VB也不是吗?JSF 也是事件驱动编程方式. 我觉得VB 做的很好!如果FLEX 还能更VB点就更好了!
1 楼 presses 2008-08-05  
刚毕业出来主要搞多线程和IO,然后又搞了一年Servlet。虽然以前也用过swing,平时写js也会遇到这种基于事件的编程。但比较全面地了解这类基于事件的编程还是flex。所以总结了一下。VB、Delphi这些,我们这一代是错过了。

相关推荐

    plc面向对象编程架构与实现

    面向对象编程是计算机语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程...

    java面向对象编程源码

    本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...

    漫画面向对象编程 Java

    借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、... 可以在轻松幽默的氛围中对面向对象编程产生浓厚的兴趣,从而为后续的编程进阶树立信心。

    Python 3面向对象编程

    《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则。, 《Python 3面向对象编程》不是Python 的入门书籍,适合...

    面向对象编程与非面向对象编程

    面向对象编程与非面向对象编程

    LabVIEW面向对象编程技术.pdf

    LabVIEW面向对象编程技术.pdf LabVIEW面向对象编程技术是 LabVIEW 软件开发工具中的一种编程技术,旨在解决大型 LabVIEW 程序的开发和维护问题。该技术基于面向对象编程思想,引入了类和对象的概念,通过类的定义...

    matlab面向对象编程.pdf

    matlab面向对象编程.pdf

    Spring AOP面向方面编程原理Spring AOP面向方面编程原理

    Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理

    c++面向对象编程实例大全

    《C++面向对象编程实例大全》是一本专为初级学习者设计的教程,旨在通过丰富的实例深入浅出地讲解C++的面向对象编程概念。面向对象编程(Object-Oriented Programming,简称OOP)是C++的核心特性,也是现代软件开发...

    第16章 LabVIEW中的面向对象编程,labview面向对象的框架,LabView

    在LabVIEW中实现面向对象编程(Object-Oriented Programming, OOP)可以提升代码的可重用性、可维护性和组织性。本章将深入探讨LabVIEW中的面向对象编程框架及其应用。 面向对象编程的核心概念包括类(Class)、...

    Labview面向对象编程

    5. **事件驱动编程**:Labview的面向对象特性与它的事件驱动模型相结合,使得程序能对用户交互或其他事件做出响应。事件结构是Labview中实现这一机制的关键,当特定事件发生时,对应的事件分支会被执行。 6. **接口...

    c#面向对象编程的小案例 c#经典案例.pdf

    "C#面向对象编程小案例:模拟彩票选号器" 本资源详细介绍了C#面向对象编程的小案例,模拟彩票选号器的实现。该案例主要使用C#语言,通过面向对象编程的思想,实现了一个彩票选号器的模拟。 知识点1:System.Random...

    (刘艺)《+Delphi面向对象编程思想》随书光盘下载+

    《Delphi面向对象编程思想》是一本专注于介绍如何在Delphi环境下运用面向对象编程技术的专业书籍。这本书由刘艺撰写,旨在帮助读者深入理解和熟练掌握面向对象编程的基本概念、原则和技巧,以及如何在实际的Delphi...

    面向对象编程(Java).pdf

    包含面向对象编程所有基础知识和实战代码

    用C语言实现面向对象编程.pdf

    用C语言实现面向对象编程.pdf

    Delphi面向对象编程思想刘艺(PDF)

    《Delphi面向对象编程思想刘艺》是一本深入讲解Delphi编程中面向对象技术的专业书籍。作者刘艺以其丰富的经验和深厚的理论功底,系统地阐述了面向对象编程的基本概念、原则以及在Delphi中的实际应用。这本书对于想要...

    java中的面向接口编程

    "java中的面向接口编程" 面向接口编程是java编程中的一种重要思想,它强调在系统设计中,各个对象之间的协作关系的重要性。这种思想认为,在系统设计之初,各个对象内部的实现细节不那么重要,而各个对象之间的协作...

    写给大家看的面向对象编程书(高清完整第三版)

    面向对象编程(Object-Oriented Programming,简称OOP)是一种广泛应用的编程范式,它将程序设计中的实体抽象为对象,通过对象之间的交互来实现功能。《写给大家看的面向对象编程书》作为一本面向初学者和进阶者的...

    JavaScript面向对象编程指南

    《JavaScript面向对象编程指南》内容包括:JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码...

    Python+3面向对象编程.

    《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则。, 《Python 3面向对象编程》不是Python 的入门书籍,适合...

Global site tag (gtag.js) - Google Analytics