基于BREW平台的多态机制实现

时间:2022-09-03 01:55:59

摘要:BREW技术是在移动数据增值应用开发领域中出现的一种新技术,开发主要是应用的C语言,但手机开发中的大量问题都与C++中实现的多态效果十分相似,如果可以利用C语言这种非面向对象的语言写出面向对象的程序,将有利于提高程序的重用性、模块化功能以及健壮性。本论文主要围绕着BREW平台应用开发中一个常见应用:页面迁移技术为例,给出了多态机制在BREW平台下的解决方案,该方案均是在BREW手机实际开发中总结出来,具有很大的可重用性。

关键词:BREW;多态机制;页面迁移

1引言

如今,手机已不仅是语音通信的工具,而且逐步成为数据业务开发与应用的平台,随着科学技术的不断更新和发展,如今手机已不仅仅是满足打电话的功能,而是更多地成为人们在工作、学习和生活中的助手。在这种情况下CDMA手机产生了一种新的应用平台,也就是由美国高通公司研发出的BREW平台。BREW技术的出现使手机犹如普通电脑一样能够运行更多的第三方软件,为用户提供更多的服务。

BREW的技术优势在于基于c语言进行的,平台开发对于许多程序员来讲均十分熟悉,移动设备制造商无需再开发专有的软件平台,可降低移动设备技术门槛及产品上市门槛,满足终端用户对最新数据应用的需求。本文主要围绕着在BREW平台下,如何利用C语言这种非面向对象的语言写出面向对象的程序展开论述,并以手机应用开发中一个常见的应用―页面迁移技术为例,对其解决方案进行了详细的介绍和对比,该方案均是在BREW手机实际开发中总结出来,具有很大的可重用性。

2 BREW平台简介及应用软件发展现状

2.1 BREW平台简介

BREW的全称是Binary Runtime Environment for Wireless,即无线二进制运行环境。从基本的层面而言,BREW平台就是手持设备上嵌入式芯片操作系统的接口或抽象层。即是PC环境下Microsoft Windows的Win32 API。BREW平台是一组用于本地执行、编译并链接的二进制库,优化后能使应用程序利用无线服务和资源。它控制流出或流入应用程序的事件流,能根据相应的事件启动、停止、中止或恢复应用程序,其执行环境在运行时可以发现应用程序和任何相关的扩展。

据联通博路通信技术有限公司2009年3月9日《BREW业务整体介绍》,到2008年底,国内支持BREW的手机机型已经超过251种,200多家中国BREW开发商提供了2479多种基于BREW的应用。

2.2 手机应用软件发展现状

据市场研究公司Strategy Analytics预测,尽管由于经济危机的影响,2009年全球手机销量虽会有所下降,但仍可达到10.8亿部,销售额会稳定在1900亿欧元,甚至会有微弱增长。可以预见,随着未来全球经济的复苏,全球手机市场的前景仍很乐观。而且随着嵌入式技术的快速发展及国内3G网络的建立,因此未来基于BREW的手机应用软件需求巨大。

2 BREW平台中的多态

随着手机业务的不断发展,手机的软件系统也成为一个非常庞大、复杂的软件系统,这样一个复杂的体系结构,应该保证能够及时响应用户和一些紧急事件。此时,要想使BREW平台开发的手机游戏具有更大的优势,选择一种好的实现机制至关重要。

BREW平台支持C和C++开发语言,但是一般的BREW应用程序都是用C写的,而对于C++的使用,BREW平台则需要做更多的事情,比如定义符重载等。而C语言是不支持面向对象的,只有C++支持面向对象的程序设计,因此BREW中必须使用C语言模拟实现C++语言面向对象机制。而面向对象技术中的关键技术多态是基于以上的内存模型和函数指针实现的,一般来说,如果使用类C语言描述多态,它相当于增加了一个间接层,在这个间接层拦截对于方法的调用,然后根据具体的指针指向实际对象调用相应的方法实现。

以下就以BREW中的页面迁移的方案为例进行详细的论述。

3 BREW平台中的页面迁移

对于一个手机的应用软件,要随时注意手机的按键变化,在每一个状态下的每一次乃至每一个手机按键的变化,都将会出现不同的界面和效果。这就是所说的BREW平台下的页面迁移,在该过程中手机画面不停变换,而手机的键盘只有一个,这时,应用程序如何判断该具体执行何种操作,就成为BREW平台上应用程序开发中一个重要的问题。

使用手机的经验告诉我们,手机页面需要频繁的进行迁移时,实现页面迁移的方案和其效率的高低对于内存很小的手机来说都是至关重要的。

3.1 基本BREW页面迁移方案

对于一个BREW开发的页面迁移的程序,基本的解决反感就是可以自行设置一组宏分别代表页面的不同状态,每个状态再对应一个BREW的事件处理过程,在每个事件处理中,通过对按键的判断来调用不同的应用函数,如页面的新建、打开、重画、删除、和键盘事件的相应函数,调用后再进行页面的迁移。BREW可以利用这种调用的机制,实现通过按键完成函数和函数之间不断的调用过程。

该类方案的具体处理过程在手机处理按键的caseEVT_KEY中:根据不同的页面的宏标识ID执行不同页面的handleevent事件函数。

例如:

//根据不同的窗口,调用不同文件中的事件处理程序

switch(pMe->activeView) {//判断当前的活动页面

case IDW_GAME://如果是游戏页面,则执行游戏页面对应的事件处理程序

return GameWnd_HandleEvent(&pMe->game, eCode, wParam, dwParam);

case IDW_MAINMENU: //如果是主页面,则执行主页面对应的事件处理程序

return MainMenuWnd_HandleEvent(&pMe->mainMenu, eCode, wParam, dwParam);

……

default:break ;

}

该种方案的特点是较为利于理解,但是使用时容易出错,不宜调试。

3.2 类多态的BREW页面迁移方案

经过上述分析可以看出,手机中的页面迁移问题与C++中实现的多态效果十分相似,也就是完成一个窗体接口类的实现, 该接口类能完成绘制屏幕和接收客户键盘输入的功能,对于客户的相同输入, 不同的窗体结构应该能体现出不同的行为。如果可以利用C语言这种非面向对象的语言写出面向对象的程序,将有利于提高程序的重用性、模块化功能以及健壮性。

BREW平台中的宏QINTERFACE,GET_PVTBL,DECLARE_VTBL可以用来完成这种效果。其本质就是在基类的层次上定义一个“空函数集”,通过该空函数集实现一个抽象的,虚拟的,通用的接口层,可以在运行时根据对象的实际类型动态地调用派生类的那些“具体”函数,简言之,就是同一个接口函数,根据具体的对象,调用具体的函数。

使用时首先通过Qinterface定义了一个包含VTBL(虚函数表)的接口,在运行时,根据具体传入的对象类型调用了具体派生接口的“具体”函数。如:#define IWINDOW_Enable(p)GET_PVTBL(p, IWindow)->Enable(p, TRUE)这里p是IWINDOW指针类型。用户调用IWINDOW_Enable(p)时,虽然此时传入的是IWINDOW类型指针,但是其实质是派生的具体接口类型,所以最终调用到的就是属于它(派生具体接口)的具体接口函数了。

以下代码用于完成一个满足上述要求的页面迁移过程。

typedef struct _IWindowIWindow;

QINTERFACE(IWindow)

{

void (*Enable)(IWindow * po, boolean bEnable);

void (*Redraw)(IWindow * po);

boolean(*HandleEvent)(IWindow * po, AEEEvent eCode, uint16 wParam, uint32 dwParam);

……

};

#define IWINDOW_Enable(p) GET_PVTBL(p, IWindow)->Enable(p, TRUE)

#define IWINDOW_Redraw(p) GET_PVTBL(p, IWindow)->Redraw(p)

#define IWINDOW_HandleEvent(p, e, w, dw) GET_PVTBL(p, IWindow)->HandleEvent(p, e, w, dw)

……

#define INHERIT_CWindow(iname)

DECLARE_VTBL(iname)

IShell * m_pIShell;

IDisplay * m_pIDisplay;

struct CWindow

{

INHERIT_CWindow(IWindow);

};

具体实现的功能如图1所示:

上述代码实现了一个结构体CWindow,其中包含三个成员,一个是指向函数表结构体类型的指针vtIWindow,另两个是普通成员指针。要通过指针vtIWindow访问函数的话,则只需要创建对应接口的函数表的实例,把接口实例的对应的函数表保存起来,然后用修改过的函数表结构体替换到接口之中,当调用对应的接口函数的时候, 就具有了特殊定义的行为。

通过上述工作,已经得到了一个窗体的基接口类,在其基础上可以派生自己的接口类来构造不同的窗体。并在派生接口类窗体中增加自己的数据成员,也可以增加接口行为,这样,就可以构造出负责各种功能的窗体来满足移动应用的需要。如图2所示。

4 结束语

文中针对手机开发的具体问题提出相应的解决方案,该方案均是在BREW手机实际开发中总结出来的。这些方法和框架代码具有很大的可重用性,很好的解决了在BREW手机开发中频繁出现的页面迁移问题,有一定现实意义。

参考文献

[1]唐际宇,杨永田,王骥.BREW平台内部接口机制的探讨[J].航空电子技术, 2006(3).

上一篇:BI应用:助力零售企业精确决策 下一篇:软件行业需要反垄断法吗?