对象与函数

摘自《UML+OOPC嵌入式C语言开发精讲

11.3  对象与函数

11.3.1  函数的角色

经济诺贝尔奖得主H.A.SimonH.A.Simon,计算机人工智能之父)在其1962年的文章《The Architecture of Complexity》中说道:“从小系统建造成庞大系统时,若有稳定的中间模块(Intermediate Module),则庞大的系统稳定且发展快速。”在日常生活中,高楼大厦之所以能够迅速建造起来,是因为使用了大量预制的中层模块(如帷窗等)。这些中层模块较平房常用的砖块大一些。

在计算机软件上,也适用同样的观念。程序的最小模块是一个指令,如果一个程序含有10 000行指令,但未加分组或分类,这样的程序将很复杂,难以驾驭。基于Simon的观念,人们将程序分而治之(Devide and Conque),分为几个中间模块(Module),就是通称的函数(Function)、程序(Procedure)、子程序(Subroutine)或段(Paragraph)。如图11-2所示。

此时,软件中的函数或子程序扮演着模块的角色,使得人们能快速建造出庞大的软件系统。函数如同砖块,是建造一般房子的中层模块。至于建造高楼大厦,则适宜采用更大的中层模块。因此计算机软件人员,必须将函数分门别类,并组成中上层的模块——对象(Object)。

11-2

传统程序直接由函数或子程序所组成,OOP软件则将函数纳入对象中,再由对象组成庞大程序。函数隶属于对象,与对象中的数据密切联系在一起。软件的建造理念和高楼大厦的建造观念是一致的。函数的角色为:

l  从对象本身观之,函数表达了对象的动态行为。

l  从整个系统观之,函数是支持中层模块(即对象)的支架。

在“泪眼问花花不语,乱红飞过秋千去”的例子中,女主角的行为有“流泪”(Cry)及“问”(Ask),花的行为有“语”(Say)和“飞”(Fly),秋千的行为有“摆荡”(Swing)。以对象来组织这些函数,如图11-3所示。

11-3

Cry() Ask() 是“女主角”对象内的函数,Say() Fly() 是“花”对象内的函数,而Swing() 为“秋千”对象内的函数。

11.3.2  对象与类

类是群体(或集合),而对象是类中的一份子。人们常用“是一个”(is a)来表达对象与类之间的关系。例如:

l  月亮是一个星球。

l  嫦娥是一位(个)美丽的神仙。

l  毕加索是一个艺术家。

l  毕加索是一个画家。

l  张大千是一个画家。

l  贝多芬是一个音乐家。

.....

所以“月球”是对象,属于“星球”类的一份子。毕加索是对象,艺术家是类,同样地,画家也是类,其中画家是艺术家群体中的小群体(部分集合)。毕加索和张大千同属于“画家”类,所以具有共同特点——精于美术绘画。

11.3.3  类的用途:描述对象的共同特点

软件中的对象为自然界对象的抽象表示,只表达了其重要特征与行为,而忽略了细节部分。至于哪些是重要特征和行为呢?程序中必须加以说明。同类的对象具有共同的重要特征与行为,因此可由类统一说明对象应表达的那些特征和行为。也就是说,类统一说明了对象应含哪些“数据”(Data)和哪些“函数”(Function)。例如:

        double a = 3.5 + 5;

        printf(a);

C语言已定义的doubleint等数据类型,其变量含有+-*/等基本运算(行为),凡double的变量皆能做这些运算。同理,如果我们创造了新的数据类型(即类)——花,且定义如下:

        CLASS()

        {

           char name[10];

           int color;

           void fly();

           void say();

        };

这就是花类的定义,它说明了,

花类内的对象(即“花”数据类型的变量)皆具两项共同特征:namecolor

l  花类的对象皆具两项共同行为:fly()say()

同类的对象特征和行为是一致的,所以只须在类定义中统一说明,不必对对象逐一说明。定义好以后,就能借花类来声明对象了,此时也可以将类视为数据类型,则花类的对象就是花数据类型的变量了。花类如图11-4所示。

11-4

更多样章试读请访问:http://www.china-pub.com/209254

posted @ 2008-12-08 19:38  博文视点  阅读(640)  评论(0)    收藏  举报