面向对象

出自新阅读实验室

跳转到: 导航, 搜索

参考:计算机和网络入门 | 返回:工作坊首页

目录

面向对象方法的策划本质

OO方法(Object-Oriented Method)

回答:策划为何要从“本体”研究开始?

面向对象的方法,是一种把面向对象的思想应用策划分析。可以用文本表达,也可以为懂得程序设计的工程师用于软件开发过程中。它是指导开发活动的系统方法,是建立在“对象”概念基础上的方法论。

对象是可数据化和容许的操作组成的“封装体”,与客观实体有直接对应关系。

一个对象“类”定义了具有相似性质的一组对象。而“继承性”是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是以对象为中心,以“类”和“继承”为构造机制,来认识、理解、刻画客观世界和设计、构建相应的文本方案或软件系统。

一、面向对象方法的由来与发展

OO方法起源于面向对象的编程语言(简称为OOPL)。50年代后期,在用FORTRAN语言编写大型程序时,常出现变量名在程序不同部分发生冲突的问题。鉴于此,ALGOL语言的设计者在ALGOL60中采用了以“Begin……End”为标识的程序块,使块内变量名是局部的,以避免它们与程序中块外的同名变量相冲突。这是编程语言中首次提供“封装”(保护)的尝试。此后程序块结构广泛用于高级语言如Pascal 、C之中。

60年代中后期,Simula语言在ALGOL基础上研制开发,它将ALGOL的块结构概念向前发展一步,提出了“对象”的概念,并使用了“类”,也支持类的“继承”。

70年代,Smalltalk语言诞生,它取Simula的类为核心概念,于1980年推出商品化的高级语言,它在系统设计中强调对象概念的统一,引入对象、对象类、方法、实例等概念和术语,采用动态联编和单继承机制。

从80年代起,由于客观需求的推动,技术界进行了大量的理论研究和实践探索,不同类型的面向对象语言(如:Object-c、c++、Java、Object-Pascal等)逐步地发展和建立起较完整的OO方法的概念理论体系和实用的软件系统。

面向对象源出于Simula,再由Smalltalk奠基。Smalltalk现在被认为是最纯的OOPL。

正是通过Smalltalk80的研制与推广应用,使人们注意到OO方法所具有的模块化、信息封装与隐蔽、抽象性、继承性、多样性等独特之处,这些优异特性为研制大型软件、提高软件可靠性、可重用性、可扩充性和可维护性提供了有效的手段和途径。同时信息技术的发展又反哺和丰富传统策划的观念与方法,在策划实践中数字建模、矩阵等的运用日益增多。

80年代以来,人们将“面向对象”的基本概念和运行机制运用到各个领域,获得了一系列相应领域的“面向对象”的技术。面向对象方法已被广泛应用于程序设计语言、形式定义、设计方法学、操作系统、分布式系统、人工智能、实时系统、数据库、人机接口、计算机体系结构以及并发工程、综合集成工程等,在许多领域的应用都得到了很大的发展。1986年在美国举行了首届"面向对象编程、系统、语言和应用(OOPSLA'86)"国际会议,使面向对象受到世人瞩目,其后每年都举行一次,标志着OO方法的研究已普及到全世界。

二、面向对象的基本概念与特征

用计算机解决问题需要用程序设计语言对问题求解加以描述(即编程),本质上,软件是问题求解的一种表述形式。显然,假如软件能直接表现人求解问题的思维路径(即求解问题的方法),那么非编程人员也能从中得到启示,“面向对象”的概念和机制恰好可以使得按照人们通常的思维方式来建立问题域的模型,设计出尽可能自然地表现求解方法的软件。


(一)面向对象的基本概念

1.对象:对象是需要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一个独立整体。

在策划人看来,对象是一个意义群;
在程序设计者看来,对象是一个程序模块;
在用户来看,对象为他们提供所希望的行为。

2.:类是对象的模板。即类是对一组有相同机制对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的“抽象”,对象则是类的具体,是类的实例。类可有其子类,也可有其它类,形成类层次结构。

3.消息:消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际“变元”。


(二)面向对象的主要特征:

1.封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于消除对象的设计者和对象的使用者之间的信息不对称(小石注:这个说法似乎有误,应该是简化双方的沟通,而并非消除信息的不对称),使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。

在非程序化的传统策划中,执行文本也是经策划人“封装”过的。

2.继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。

继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。

3.多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性,用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一份图表时调用的打印方法与将同样的Print消息发送给一份正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。

三、面向对象的新方法论、新范型、新技术

OO方法的作用和意义决不只局限于编程技术,是策划和信息系统开发的新方法论;是正在兴起的策划新技术-——面向对象技术。


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

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


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

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

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

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

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

当我们遵照面向对象方法学的思想进行软件系统开发时,首先要行面向对象的分析(OOA――Object Oriented Analysis),其任务是了解问题域所涉及的对象、对象间的关系和作用(即操作),然后构造问题的对象模型,力争该模型能真实地反映出所要解决的"实质问题"。在这一过程中,抽象是最本质、最重要的方法。针对不同的问题性质选择不同的抽象层次,过简或过繁都会影响到对问题的本质属性的了解和解决。因而,对“本体”的研究分析成为必由之路。

其次就是进行面向对象的设计(OOD――Object Oriented Design),即设计软件的对象模型。根据所应用的面向对象软件开发环境的功能强弱不等,在对问题的对象模型的分析基础上,可能要对它进行一定的改造,但应以最少改变原问题域的对象模型为原则。然后就在软件系统内设设计各个对象、对象间的关系(如层次关系、继承关系等)、对象间的通信方式(如消息模式)等。

最后阶段是面向对象的实现(OOI-- Object Oriented Zmplementation),即指软件功能的编码实现,它包括:每个对象的内部功能的实现;确立对象哪一些处理能力应在哪些类中进行描述;确定并实现系统的界面、输出的形式及其它控制机理等,总之是实现在OOD阶段所规定的各个对象所应完成的任务。


3.用OO方法进行面向对象程序设计,其基本步骤如下:

(1) 分析确定在问题空间和解空间出现的全部对象及其属性;

(2) 确定应施加于每个对象的操作,即对象固有的处理能力;

(3) 分析对象间的联系,确定对象彼此间传递的消息;

(4) 设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;

(5) 分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;

(6) 确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;

(7) 设计每个类关于对象外部特性的描述;

(8) 设计每个类的内部实现(数据结构和方法);

(9) 创建所需的对象(类的实例),实现对象间应有的联系(发消息)。


4.面向对象技术,技术"泛指根据生产实践经验和自然科学原理而发展起来的各种工艺操作方法与技能";"广义地讲,还包括相应的生产工具和其它物质设备,以及生产的工艺过程或作业程序、方法"。OO方法既是程序设计新范型、系统开发的新方法学,作为一门新技术它就有了基本的依据。

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

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

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

原文链接


>>

个人工具
名字空间
变换
动作
导航
工具箱