首页 理论教育 面向对象的程序设计方法的介绍

面向对象的程序设计方法的介绍

时间:2022-11-13 理论教育 版权反馈
【摘要】:对象是面向对象程序设计的基本模块,为了充分发挥模块化开发的优点,希望模块的独立性好。但是,在面向对象的程序设计中提出了一种全新的封装方法:类和对象。继承是面向对象程序设计技术中的一个重要的技术,用来描述类之间的共同属性,减少了相似类之间的重复定义,它体现了一般化及特殊化的原则。在面向对象程序设计中,继承用以说明子类延用父类特征的能力。在面向对象程序设计中,继承的另一重大贡献是可以保持界面的一致性。

7.4.3 面向对象的程序设计方法

面向对象是一种程序设计方法学,它把软件开发过程中所处理的实体都视为对象。这些对象可组成不同类的集合,这些类刻划软件系统中所有作为基础的数据的行为。出自每一类的各对象用调用该类的各方法(Methed)来加以处理,也就是发送消息(Message)给这些对象。这些消息表示在该对象集合上所要采取的各种动作。对象通过消息传递与其它对象发生交互作用。有人把面向对象定义为:面向对象=数据抽象+对象类+类继承,有人更简明地把面向对象程序设计定义为:面向对象程序没计=抽象数据类型+继承。

1.对象(Object)

“对象”是面向对象方法学中最基本的概念。在应用领域中有意义的、与所要解决问题有关系的任何事物都可以称作对象。它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。例如,一名学生、一所学校、一个表单、一个按钮等都可以作为一个对象。总之,对象就是对问题领域中某个实体的抽象。

对象是一种实用的功能强大的表示知识的工具,也是一种能提供模块化和可扩展性的程序设计风格。建立一个数据库管理系统的主要目的是能够有效地存储知识,并重新找到与识别这些知识。在数据库中引入对象的概念,可以以更加自然的形式使存储的信息模型化并易于对它们进行操作。这样,就可以统一地对各种不同类型的数据进行存取,从而使传统数据库的功能得到最大的扩展。

由于客观世界中的实体通常都既具有静态的属性,又具有动态的行为,所以在面向对象程序设计中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起而构成的统一体。

对象一般有这样一些特点:

(1) 对象是主体。这主要是与传统的数据相比而言的。传统的数据被动地被处理。而对象则不同,它不是被动等待进行处理,而是进行处理的主体。

(2) 以数据为中心。这主要是讲对象进行的操作是围绕对象的数据来设置的,一般不设置与数据无关的操作。操作的结果往往同数据的值有关。

(3) 实现了数据的封装,这主要是说对象是一只黑盒子,它的私有数据完全被封装在盒子的内部,对外是隐藏的,不可见的。对私有数据的访问或处理只能通过公有的操作来进行。

(4) 模块的独立性好。对象是面向对象程序设计的基本模块,为了充分发挥模块化开发的优点,希望模块的独立性好。而如前所述,对象是以数据为中心,其操作是围绕着数据来展开的,没有无关的操作。因此,对象内部的各种元素之间彼此结合得很紧密,内聚性很好,也就是说对象的独立性很好。

(5) 本质上具有并行性。对象的并行性是指不同的对象在处理各自的数据时是通过发送消息、传递信息来进行通信的。

2.类(Class)

在现实世界中,人们习惯于把具有相似特征的事物归为一类。在面向对象的技术中,很难给类下一个确切的定义,但一般关于类有如下的说法:类就是定义为一组具有相同数据和相似操作的对象的集合;或者说对象按照实现的共性分组称为类。

也可以说,类是对具有相同属性和行为的一个或多个对象的描述。例如,在表单上有三个命令按钮,分别为command1、command2和command3。这三个按钮虽然完成不同的功能,但是它们有相似的属性(高度、颜色、式样)、事件和方法。因此,它们是同一类事物,可以用command类来定义。其实command类是Visual Foxpro的一个基类。

3.封装

封装是一种组织软件的方法。它的基本思想是把客观世界中联系紧密的元素及相关操作组织在一起,构造出具有独立含义的软件,把相互关系隐藏在内部,对外仅仅表现出与其它封装体之间的接口

封装的目的是信息隐藏,把对象的内部代码隐藏起来。用户只需知道该对象具有什么能力以及如何使用该对象,而不必了解这些功能是如何实现的。不过,信息隐藏是原则,而封装是针对这一原则的实现。

封装最吸引人的地方在于:在开发一个软件系统时,封装使得构造和组织系统更准确、方便,并且能减少重复的工作。封装能把相关的内容组织在一起,使程序的不同部分之间的通信减小到最少。把程序中易变的部分局部化,是基本的封装技术。例如,程序员把程序中最易变的部分封装起来,则需求的变化对程序整体结构的影响就会很小。

封装并不是一个全新的概念。但是,在面向对象的程序设计中提出了一种全新的封装方法:类和对象。后面将会看到类和对象是构成程序的很好模块,它满足模块的原则及标准并且满足代码复用的要求。

对象是按照封装的方法构造的、与客观世界具体成分相应的软件模块。对象中所封装的内容是描述这些客观世界具体成分的一组数据(称为属性)及这些数据上的一组操作(称为信息、方法)。类作为对象的抽象及描述,具有统一的属性和操作。在类中必须给出生成一个对象的具体方法。

4.继承(Inheritance)

在面向对象程序设计语言中,可以用继承来定义具有相似属性的类。在面向对象语言里都具有继承这个概念。数学上,继承被表示成一个集合和子集合间的包容关系。

继承是面向对象程序设计技术中的一个重要的技术,用来描述类之间的共同属性,减少了相似类之间的重复定义,它体现了一般化及特殊化的原则。继承提供了一种明确表达共性的方法,使程序员对共同的操作及属性只需说明一次,并且可以具体地扩展和细化这些属性及操作。

在面向对象程序设计中,继承用以说明子类延用父类特征的能力。如果父类特征发生改变,则子类将继承这些新特征。继承带来如下好处:

首先,是软件的重复使用,这表现在两个方面:其一,是通过实例化对所有事实对象的利用;其二,是通过继承进行软件的重复使用。如果一个操作是从另外一个类中继承来的,这个操作的所有源代码就可以不用重新写了。从这一点来看,其作用是深远的。在传统的程序开发过程中,要花费大量的时间来重复编写代码。而使用继承以后,就可以只写一次代码,然后重复使用。

第二,代码的复用。在面向对象的技术中存在多层次的代码复用。在一个层次上,许多不相干的程序及项目可以使用相同的类。

第三,界面的一致性。在面向对象程序设计中,继承的另一重大贡献是可以保持界面的一致性。读者在程序设计的过程中一定都有这样类似的经历,很多界面在形式上都要求一样。在以前传统的设计过程中,为了实现上述要求,可能是以某一界面为依托,通过拷贝的方式来产生很多的界面,然后在这些界面的基础上进行修改。这种方式虽然能相对保持程序设计过程中界面的一致性,但是方法太笨。在面向对象的程序设计过程中,利用继承就可以很好地解决这个问题。首先生成一个具有共性的界面对象,对于各具特色的界面对象,只要它继承了具有共性的对象后,再添加自己的特色属性、信息和方法即可。继承既可保持界面的一致性,又可以优化编程方式,真是一举两得,何乐而不为呢?

最后,快速的原形技术。当已经设计完一个应用系统后,因为某种原因出现了疏漏(当然应尽量在进行系统分析时考虑全面,但有时难以避免),或者因为用户又有另外的需求,需要新的功能,那该怎么办?是从头开始,还是用另外的方式进行修补?从头开始不管是从经济的角度,还是从技术的角度都不可取。这时,通过快速原形技术就可以依据前一次的设计经验及用户的评价,很快地完成新功能的系统设计。

5.方法

对象通过方法为接收到的消息作出反应,消息表达式的值由消息所调用的方法决定。方法定义类似于过程定义。方法定义包括三个部分:消息模式、临时变量和方法体。方法体由一组语句组成,它们定义了对消息作出反应的执行动作,类似于过程体。

各种语言虽然提供了大量的对象类,但要灵活的应用,往往还要定义新的类,还要用到类似于过程语言的结构。面向对象程序设计语言除了Smalltalk之外,其它很多语言都是在原过程语言基础上扩充而成,如C++语言,说明了面向过程的程序设计语言仍然是一种基础的不可完全替代的语言。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈