作者项飞
发表日期 年 月 日
内容提要
文章正文
用过 进行过面向对象程序设计的用户都知道,程序中的对象很少单独存在。不考
虑对象间的相互作用几乎是不可能的。所以,标识对象间的关系或建立对象间的消息连接是
面向对象程序设计的一项重要任务。本文着重从 程序设计的角度,提出一种建立对象
间消息连接的实用方法。如果你想详细了解面向对象程序设计技术,请参阅有关专著。大家
都知道对象是数据和方法的封装体。在 中,它们分别表现为数据成员和成员函数。程
序设计者通过执行对象的各种方法,来改变对象的状态(即改变对象的属性数据)。从而使
该对象发生某些“事件”。当一对象发生某事件时,它通常需向其它相关对象发送“消息”,请
求它们作出一些处理。发生事件并向其它对象请求处理的对象被称为“事件对象”,而处理事
件的对象被称为“回调对象”。回调对象对事件的处理称为“回调函数”。在 中,这一过程
相当于:当事件对象发生事件时,调用回调对象的某些成员函数。通常的作法是回调对象向
事件对象传递对象指针。但这种方法不通用。为了减少程序设计的工作量,本文提出一种建
立对象间消息连接的系统方法。它的思路是:将“事件发生→请求处理→执行处理”这一过程
抽象成一个“回调”()类。通过继承,用户可以轻松获取建立对象间消息连接的机
制。
一、回调类的数据结构及其成员函数
本文提出的 类支持三种回调函数。它们是:回调对象中的成员函数,属于回调类
的静态成员函数和普通的 函数。 类中包含一回调函数表 。它用
于记录事件名称,指向回调函数及回调对象的指针。该表的每一个节点为一个事件记录
。每个事件记录包含三个域:事件名指针 ,指向回调对
象的指针 ,指向回调函数的指针 或 其中,
指向回调对象的成员函数, 指向回调类的静态成员函数或
普通函数。它们同处于一共用体内!。 类所提供的回调机制是这样的:在事件对象
上注册回调对象中的回调函数;当事件发生时,事件对象在其回调表中检索并执行回调函数。
从而使二者的消息连接得以建立。(关于该类的具体实现,请参阅文后所附的程序清单)
回调对象 事件对象
事件名 回调对象指针 回调函数指针
"# 或
$$$$$$
%注册事件名和指向回调函数,回调对象的指针
在回调表中,检索注册在指定事件上回调函数并调用它们事件发生时,调用
函数
对事件 进行处理的成员函数从 类继承的回调表 &成员函数
% 和 。
当回调函数为静态成员函数或普通 函数时, 为 '。事件名是回调表
中 的 检 索 关 键 字 。 回 调 对 象 中 其 它 成 员 函 数 类 的 成 员 函 数
% 用来将回调函数注册到事件对象的回调表中。它有两个重载版本: