当前位置:早雪网网络学院编程文档软件工程 → Palm OS代码重用思想

Palm OS代码重用思想

减小字体 增大字体 作者:未知  来源:从互联网收集整理并转载  发布时间:2005-6-3 0:56:07
一些快速简单的设计方法的使用,能使 Palm OS 应用程序的大部分代码可以应用到下一个 Palm OS 应用程序。本文中我要介绍的内容是有关 C 语言中的公共头文件、事件抽象、方法和接口的分离、数据封装、多态性,以及可重用的 UI 定制和类型抽象。

许多人(包括我在内)被 C++ 和 Java 所吸引,因为它们生成的代码支持重用和分组合作。但是,这些大型语言限制了 Palm 手持设备的资源扩展性,而且很难使 68k Palm 应用程序达到预期的性能。随着基于快速基于 ARM 的掌上电脑的出现,这一问题不再那么严重。但是,用户即使不再为性能担心,他们也会抱怨这些语言生成的应用程序过大。

由于这些原因,自版本 1.0 后,C 已经而且会继续成为大多数专业 Palm 开发人员的首选编程语言。C 提供了最小的代码尺寸,并且在所有高级语言中性能最好。而且,在使用 C 时,如果能遵循一些设计原则,那么你能从这一更加面向对象的语言中受益匪浅。最终达到面向对象这种理想状态。如果使用不正确的话,就不能从 C++ 和 Java 中获得这些益处。

数据封装
数据封装是一种面向对象的思想。它将数据封装在对象中,这个对象以外的代码无法直接访问这些数据。通常只能在某个范围内修改数据,这样就避免因为在此范围外修改数据而导致出现 bug(当然,可怕的指针除外)。数据封装也有利于代码重用。由于数据并不是乱糟糟地遍布整个代码,也不能随便访问、修改、编译,所以可以很容易就能把其中一部分代码重用到其它地方。如果没有数据封装,一些关键的错误代码就会散布到整个应用程序的范围内。这样,就要费时间记着(或提醒)以后再修正它。

我认为 C 语言中最好的数据封装形式是把代码组织到 *.c 模块中,并且没有全局变量,这样,数据就只能在指定的 *.c 模块中修改。明确定义的 Palm 代码角色通常只有很少的几个,因此即使对于大型的 Palm 项目,这种办法也非常容易管理。在我的 Palm 应用程序中,每种数据库的代码都被组织到不同的模块中。每个窗体的代码都被放在不同的模块中。每个菜单项通常也有它自己的模块。自定义控件和专门的标准 Palm 控件分别有自己的模块。在新应用程序中可以混合搭配着使用这些模块。

数据抽象
所有的变量都声明成函数内部变量或静态变量,您可能想知道,(例如)如果一个窗体需要为某个数据库设置记录属性,该怎么办呢?答案就是把变量在数据库模块内部声明成静态的(如果需要永久存在的话,甚至也可以声明成数据库的全局变量),并且编写一个访问函数来修改这些数据。访问函数仅仅用来修改数据,或者返回数据的一份拷贝。这些额外工作值得吗?绝对值得,因为:1)这个模块可以很干净地从一个应用程序移动到另外一个应用程序,2)可以具体控制其它模块如何访问这些数据,这一点也许是最重要的,3)当出现 bug 时可以知道该在何处设置断点。

举例来说,某个模块有一些用来使用控件创建自定义表格的代码。这个表格基于数据库中的条目,或者基于某个由其它模块(如,数据库模块)生成的静态数据。当第一个模块要访问第二个模块中的数据时,应该调用一个用于数据封装的自定义函数,例如 getTableEntryControlType(),而不是直接从第二个中读取数据结构。

函数 getTableEntryControlType() 可能会像下面这样简单:


UInt16 getTableEntryControlType( UInt16 u16Row )
{
return( u16aControlTypes[u16Row] );
}


刚才我们编写的程序还有一个重要的功能,只要这个函数按照指定格式返回一个双字节数据,我们就可以改变内部数据的表达格式。例如,我们可以把它储存到数据库里,而不是放在静态表格中。而外边的调用方法却不必改变。

这就是数据抽象的威力。如果编写了一个专门的控件,它的所有配置数据都是通过函数调用取得的,那么就不必关心那些数据是
[数据载入中...] [返回上一页] [打 印]