PALM开发教程-第十二章 专业编程技巧 |
| 作者:palmheart 来源:palmheart.net 发布时间:2005-12-21 3:39:54 |
|
码的破坏。如果你遵从了这个原则,当数据结构遭到破坏时,就可以确定问题一定出在对象的里面,除非存在所谓的“wild pointer”。 “wild pointer”是指指针并没有指到一个具体的位置上。例如,下面的代码就会造成“wild pointer”的问题。 Char * cpBuffer=2000; 在有“wild pointer”的情况下,或许就有不走运的对象被它指定了,所以就会引起一些问题。因此,最好要节俭的、小心的使用指针。 数据封装在C中很容易实现的。将各成对象的代码分成单独的文件保存,并把变量声明成静态变量(static)。这就可以防止它们被其它文件中的函数所调用。 如果对象想访问其它对象中的变量,你可以把变量声明为全局变量来实现,但不要把全局变量声明的太多。不要把数据结构的指针传递给对象外的函数,而是让函数传递一个数据结构供你填入或者创建一个原始数据的复件来代表函数。 数据抽象 数据抽象的原则是指一个对象中的数据结构不依赖于任何其它对象中的数据结构。因此,一个对象可以重写或完全改变它的基本变量,而不会影响代码或数据在其它对象中的有效性。 数据抽象的用处就是可以重建对象,使程序更易重用和维护而不影响系统的其他部分。 显然,不要对其他对象的数据结构中使用“内部消息”。要把它们看成黑箱。不要认为你知道了其他对象的数据结构的大小,而应使用sizeof();不要认为你知道了变量在数据的什么地方。 继承 继承的含义是指在一般的对象上添加具体的内容生成其子对象。这就避免了你花费大量的时间来产生和已有的对象很多地方都相同的对象。 在C中实现继承的一种方法是使用#define语句。假设你有一个简单的列表框,现在你想再产生一个列表框。在这个列表框中,除了增加了浏览功能外,其它的和简单的列表框完全相同。下面是简单列表框的函数原型: VoidHand slCreateList(void); Void slDestroy(VoidHand); Void slAddToList(VoidHand,lidtitem_t*); Void slSaveList(VoidHand,FILE*); Void slLoadList(VoidHand,FILE*); 在可浏览列表的头文件中,你可以这样定义: #define ilCreatList slCreatList; #define ilDestroyList slDestroyList #define ilAddtoList slAddToList #define ilSaveList slSaveList; #define ilLoadList slLoadList void ilGetFirst(VoidHand,listitem_t*); void ilGetNext(voidHand,listitem_t*); 多态性 多态性指可以统一的处理一组对象。例如,我们可以删除一个列表框条目,而不必管列表是简单列表框还是可浏览的列表框。 在C中可以通过使用指针来实现多态性。注意,在删除函数中保存在列表建立时代表对象的指针,当调用函数 DeleteListItem()时,使用这个变量将所指记录删除。 下一步做什么 在下面的两章中,我们将使用本章讲到的新的框架生成一个calculator程序。 在下一章中,我们将应用第十章中讲到的用户界面知识来设计计算器,我们还将用到公共库,特别是MathLib的应用。 |
| [] [返回上一页] [打 印] |
|
文章评论 |
