首页 理论教育 面向对象方法概述

面向对象方法概述

时间:2022-03-04 理论教育 版权反馈
【摘要】:面向对象技术还渗入人工智能、操作系统、并行处理等各个研究领域。消息是对象之间进行通信的一种动态信息。在面向对象系统中程序的执行就是靠在对象间传递消息来完成的。发送消息的对象称为发送者,接受消息的对象称为接受者。继承是面向对象的系统的主要优点之一。封装并不是面向对象方法独有的,但是与传统方法中数据和行为的分离相比较,面向对象方法将数据与行为组合于一个实体中,这样使封装更清晰、更有效。

7.4.1 面向对象方法概述

1.面向对象的概念

面向对象(Object-Oriented,OO)的方法起源于面向对象的程序设计语言。从20世纪60年代中后期的Simula67到后来的Smalltalk系列,再到80年代中后期的C++语言,面向对象的程序设计渐趋成熟,其设计领域也非常广泛,包括软件开发时使用的方法学,软件开发实现阶段所使用的语言、数据库等。面向对象技术还渗入人工智能、操作系统、并行处理等各个研究领域。面向对象技术是一种围绕真实世界的概念来组织模型的一种全新的思维方式,其基本思想可以在下述4点中得到体现。

(1)面向对象方法认为世界由各种“对象”组成,任何事物都是对象;复杂的对象可由相对比较简单的对象以某种方式组成。

(2)对象由属性和方法组成。属性是对象所具有的性质。方法是允许作用于该对象上的各种操作。

(3)对象之间的通信方式主要通过灵活的消息传送来实现。

(4)对象可按其属性进行归类(分类),归纳抽象产生父类或超类,演绎、细化产生子类。所有对象和类(类对象)组成等级结构,其中上一层对象所具有的一切属性或特征可被其所有子孙对象继承,从而实现信息共享[11]

OO方法的核心是数据抽象,即用知识分类的方法描述客观世界,将客观事物抽象成若干相互联系的对象和类,组成系统。这种类属关系是事物之间最本质的联系。在OO方法学中,有一些基本概念和基本特征是每一种OO方法都具有的,它们是理解开发过程中各种对象和模型的基础,首先在此作简单的介绍。

(1)对象

对象是面向对象系统中的核心概念,指的是能够存储状态(属性),并能够组织一定数量的操作(方法)来检查或改变其状态的实体。在计算机中,对象就是由一组数据和施加于这些数据上的操作所构成的封装体。对象是一个自主的实体,它具有以下基本特征:

①有一个名字区别于其他对象,也成为对象表示号;

②有一个状态用来描述它的某些特征,且只能被自身的行为改变;

③有一组操作,每个操作决定对象的一种功能或行为;

④对象的操作可分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作;

⑤对象之间通过消息互相通信,当一个对象要求另一个对象做某个动作时,就向它发送一个消息。

由此可见,对象可以看作其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独立实体。

(2)类

在面向对象方法学中,类是具有相同属性和服务的一组对象的集合。它为属于该类的全部对象提供统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并且包括属性说明和服务说明两个主要部分。类的作用是定义对象。比如,程序中给出一个类的说明,然后以静态声明或动态创建等方式定义它的对象实例。

对象既有共同性,也有特殊性。运用抽象的原则舍弃对象的特殊性,抽取其共同性,则得到一个适应一批对象的类。如果在这个类的范围内考虑定义这个类时舍弃的某些特殊性,则在这个类中只有一部分对象具有这些特殊性,这些对象彼此是共同的,于是得到一个新的类。它是前一个类的子类,称为前一个类的特殊类,而前一个类称为这个新类的一般类,这是从一般类发现特殊类。也可以从特殊到一般,考虑若干类所具有的彼此共同的特征,舍弃其彼此不同的特殊性,则得到这些类的一般类。

一般类和特殊类是相对而言的。它们之间是一种真包含的关系,即特殊类是一般类的一个真子集。如果两个类之间没有这种关系,就谈不上一般和特殊。特殊类具有其一般类的全部特征,同时又具有一些只适应于本类对象的独有特征。

类与对象的关系如同一个模具铸造出来的铸件之间的关系。类给出了属于该类的全部对象的抽象定义,而对象则是符合这种定义的一个实体。所以,一个对象又称为一个类的实例,也有人把类称为对象的模板(Template)。所谓“实体”或“实例”意味着什么呢?最现实的一件事是,在程序中,每个对象都要有自己的存储空间,以保存其属性值。我们说同类对象具有相同的属性和服务,是指其定义形式相同,而不是说每个对象的属性值都相同。

对于同一个类的不同实例之间,必定具有如下特点:相同的操作集合;相同的属性集合;不同的对象名[12]

(3)消息

消息是对象之间进行通信的一种动态信息。当一个对象要求另一个对象执行某些处理或者回答某些信息时,称该对象发出了一个消息。在面向对象系统中程序的执行就是靠在对象间传递消息来完成的。

发送消息的对象称为发送者,接受消息的对象称为接受者。消息中只包含发送者的要求,它告诉接受者要完成哪些处理,但并不指示接受者应该怎样完成这些处理。消息完全由接受者解释,接受者独立决定怎样完成这些处理。一个对象能够接受不同形式、不同内容的多个消息;相同形式的消息可以送往不同的对象;不同的对象对于相同的消息可以有不同的解释,能够做出不同的反应。

(4)继承

继承是类结构独具的特征,据此可实现数据和方法的共享。继承使新类的定义可以在一个已有类的基础上进行。新类接受原有类的性质并且还具有自身独特的性质,这样就有效地处理了重用和改进的关系,使类的共性和特性均得到了很好的处理。子类的这种继承父类性质的能力可大大减少设计和编程的重复性。继承是面向对象的系统的主要优点之一。

继承可以分为单重继承和多重继承。后者主要是针对一个子类拥有多个父类的情况而言,此时该子类可以继承多个父类的性质。

(5)封装

封装(又称信息隐蔽)指的是对象的各种独立的外部性质与对象的内部实现细节的分离。外部性质指的是可以被其他对象访问的性质,内部细节则对其他对象隐蔽。封装防止了由于程序依赖而带来的变动影响。封装并不是面向对象方法独有的,但是与传统方法中数据和行为的分离相比较,面向对象方法将数据与行为组合于一个实体中,这样使封装更清晰、更有效。

(6)多态

多态性指的是同一操作可以是多个不同的类的行为。以“move”操作为例,可以作为窗口类的行为,也可以作为国际象棋子类的行为。在消息传递中,多态性的存在使不同的对象在接收到同一消息时将产生完全不同的结果。这样,发送者只需发出一个通用的消息,以何种方式执行该消息以及执行的结果则将取决于接受对象的类型。多态的实现受到继承性的支持,利用类的继承结构,把具有通用功能的消息放在较高层次上,而不同的实现行为则放在较低层次上,这样,在较低层次上生成的对象就能对通用消息做出不同的响应。

2.面向对象方法

面向对象方法的作用和意义决不只局限于编程技术,它是一种新的程序设计范型——面向对象程序设计范型,是信息系统开发的新方法论——面向对象方法学,是正在兴起的新技术——面向对象技术[13]

(1)面向对象程序设计范型

程序设计范型具体指的是程序设计的体裁,正如文学上有小说、诗歌、散文等体裁,程序设计体裁是用程序设计语言表达各种概念和各种结构的一套设施。

目前,程序设计范型分为:过程式程序设计范型、函数式程序设计范型,此外还有进程式程序设计范型、事件程序设计范型和类型系统程序设计范型。每一程序设计范型都有多种程序设计语言支持(如FORTRAN、PASCAL、C均体现过程式程序设计范型,用来进行面向过程的程序设计),而某些语言兼备多种范型(如:LISP属过程与函数混合范型,C++则是进程与面向对象混合范型的语言)。

过程式程序设计范型是流行最广泛的程序设计范型(人们平常所使用的程序设计语言大多属于此类型),这一程序设计范型的中心点是设计过程,所以程序设计首先要决定的是问题求解所需要的过程,然后设计过程的算法。这类范型的语言必须提供设施给过程(函数)传送变元和返回的值,如何区分不同种类的过程(函数)、如何传送变元是这类程序设计中关心的主要问题。

面向对象程序设计范型是在以上范型之上发展起来的,它的关键在于加入了类及其继承性,用类表示通用特性,子类继承父类的特性,并可加入新的特性。对象以类为样板被创建。所以在面向对象程序设计范型中,首要的任务是决定所需要的类,每个类应设置足够的操作,并利用继承机制共享共同的特性。

简而言之,面向对象程序设计范型具有其他范型所缺乏或不具备的特点,极富生命力,能够适应复杂的大型软件开发。可以肯定地说,这种新的程序设计范型必将有力地推动软件开发的新的进展。限于篇幅,其他程序设计范型在此不作细述。

(2)面向对象方法学

面向对象方法遵循一般的认知方法学的基本概念(即有关演绎——从一般到特殊和归纳,从特殊到一般的完整理论和方法体系)而建立面向对象方法等基础。面向对象方法学有三个要点:

一是认为客观世界是由各种“对象”所组成的,任何事物都是对象,每一个对象都有自己的运动规律和内部状态,每一个对象都属于某个对象“类”,都是该对象类的一个元素。复杂的对象可以是由相对比较简单的各种对象以某种方式而构成的。不同对象的组合及相互作用就构成了要研究、分析和构造的客观系统。

二是通过类比,发现对象间的相似性,即对象间的共同属性,这就是构成对象类的依据。在“类”、“父类”、“子类”的概念构成对象类的层次关系时,若不加特殊说明,则处在下一层次上的对象可自然地继承位于上一层次上的对象的属性。

三是认为对已分成类的各个对象,可以通过定义一组“方法”来说明该对象的功能,即允许作用于该对象上的各种操作。对象间的相互联系是通过传递“消息”来完成的,消息就是通知对象去完成一个允许作用于该对象的操作,至于该对象将如何完成这个操作的细节,则是封装在相应的对象类的定义中的,细节对于外界是隐蔽的。

可见,OO方法具有很强的类的概念,因此它就能很自然地直观地模拟人类认识客观世界的方式,亦即模拟人类在认知进程中的由一般到特殊的演绎功能或由特殊到一般的归纳功能,类的概念既反映出对象的本质属性,又提供了实现对象共享机制的理论根据。

(3)面向对象技术

技术泛指根据生产实践经验和自然科学原理而发展起来的各种工艺操作方法与技能;广义地讲,还包括相应的生产工具和其他物质设备,以及生产的工艺过程或作业程序、方法。OO方法既然是程序设计新范型、系统开发的新方法学,作为一门新技术它就有了基本的依据。事实上,OO方法可支持种类不同的系统开发,已经或正在许多方面得以应用,因此,可以说OO方法是一门新的技术——面向对象技术。

近十多年来,除了面向对象的程序设计以外,OO方法已发展应用到整个信息系统领域和一些新兴的工业领域,包括用户界面(特别是图形用户界面——GUI)、应用集成平台、面向对象数据库(OODB)、分布式系统、网络管理结构、人工智能领域,以及并发工程、综合集成工程等。人工智能是和计算机密切相关的新领域,在很多方面已经采用面向对象技术,如知识的表示、专家系统的建造、用户界面等。人工智能的软件通常规模较大,用面向对象技术有可能更好地设计并维护这类程序。

20世纪80年代后期形成的并发工程,其概念要点是在产品开发初期(即方案设计阶段)就把结构、工艺、加工、装配、测试、使用、市场等问题同期并行地启动运行,其实现必须有两个基本条件:一是专家群体,二是共享并管理产品信息(将CAD、CAE、CIN紧密结合在一起)。显然,这需要面向对象技术的支持。目前,一些公司采用并发工程组织产品的开发,已取得显著效益。波音公司用它开发巨型777运输机,比开发767节省了一年半时间。日本把并发工程用于新型号的汽车生产,和美国相比只用了一半的时间。产业界认为它们今后的生存要依靠并发工程,而面向对象技术是促进并发工程发展的重要支持。

综合集成工程是开发大型开放式复杂系统的新的工程概念。与并发工程相似,专家群体的组织和共享信息,是支持这一新工程概念的两大支柱。由于开放式大系统包含人的智能活动,建立数学模型非常困难,而OO方法能够比较自然地刻画现实世界,容易达到问题空间和程序空间的一致,能够在多种层次上支持复杂系统层次模型的建立,是研究综合集成工程的重要工具。

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

我要反馈