面向对象技术的概念与方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象技术的概念与方法
1 面向对象的基本概念
本节着重介绍面向对象的基本概念,也对相应的面向对象的技术方法的一些基本概念和方法做些说明和解释。
1.1 面向对象方法学的基本原则
面向对象方法学认为:客观世界是由各种“对象”所组成的,任何事物都是对象,每一个对象都有自己的运动规律和内部状态,每一个对象都属于某个对象“类”,都是该对象类的一个元素。复杂的对象可以是由相对比较简单的各种对象以某种方式组成的。不同对象的相互作用就构成了我们要研究、分析和构造的客观系统。
面向对象方法学认为:通过类比,发现对象间的相似性,即对象间的共同属性,这就是构成对象类的根据。
面向对象方法学认为:对于已分成类的各个对象,可以通过定义一组“方法”来说明该对象的功能,也即是:允许作用于该对象上的各种操作。对象间的相互联系是通过传递“消息”来完成的。
面向对象方法学比较自然地模拟了人类认识客观世界的方法。即应使描述问题的问题空间和解决问题的方法空间在结构上尽可能地一致。我们分析、设计和实现一个系统的方法尽可能接近我们认识一个系统的方法。
1.2 对象
面向对象技术是基于对象概念的。在现代汉语词典中,对象是行动或思考时作为目标的人或事物。
在思维科学中,对象是客观世界中具有可区分性的、能够唯一标识的逻辑单元。对象所代表的本体可能是一个物理存在,也可能是一个概念存在。
“面向对象”是计算机科学中的一个技术名词,具有其特定的技术含义。从面向对象的观点来看,现实世界是由各式各样独立的、异步的、并发的实体对象组成,每个对象都有各自的内部状态和运动规律,不同对象之间或某类对象之间的相互联系和作用,就构成了各式不同的系统。
面向对象方法是基于客观世界的对象模型化的软件开发方法。在面向对象程序设计中,所谓对象,就是一个属性集及其操作的封装体。作为计算机模拟真实
世界的抽象,一个对象就是一个实际问题论域,一个物理的实体或逻辑的实体。在计算机程序中,可视为一个“基本程序模块”,因为它包含了数据结构和所提供的相关操作功能。
我们把客观世界的实体称之为问题空间的对象,任何事物都是对象。我们用计算机解题是借助某种语言规定对计算机实体施加某种动作,以此动作的结果去映射解,我们把计算机实体称之解空间的对象。在面向对象的程序设计中,“对象”是系统中的基本运行实体。即对象是具有特殊属性(数据)和行为方式(方法)的实体。
从动态的观点看,对象的操作就是对象的行为。问题空间对象的行为是极其丰富的,而解空间对象的行为是极其死板的。因此,只有借助于极其复杂的算法才能操纵解空间对象而得到解。面向对象语言提供了“对象”概念,这样,程序员就可以定义解空间对象。从存储的角度来看,“对象”是一片私有存储,其中有数据也有方法。其它对象的方法不能直接操纵该对象的私有数据,只有对象私有的方法才可以操纵它。从对象的实现来看,“对象”是一台自动机,其中私有数据表示了对象的状态,该状态只能由私有的方法改变它。每当需要改变对象的状态时,只能由其它对象向该对象发送消息,对象响应消息后按照消息模式找出匹配的方法,并执行该方法。
对象的属性是指描述对象的数据,可以是系统或用户定义的数据类型,也可以是一个抽象的数据类型,对象属性值的集合称为对象的状态。
对象的行为是定义在对象属性上的一组操作方法的集合。方法是响应消息而完成的算法,表示对象内部实现的细节,对象的方法集合体现了对象的行为能力。
对象的属性和行为是对象定义的组成要素,有人把它们统称为对象的特性。一般具有以下特征:
(1)具有一个状态,由与相关联的属性值集合所表征。
(2)具有唯一标识名,可以区别于其他对象。
(3)有一组操作方法,每个操作决定对象的一种行为。
(4)对象的状态只能被自身的行为所改变。
(5)对象的操作包括自操作和它操作
(6)对象之间以消息传递的方式进行通信。
(7)一个对象的成员仍可以是一个对象。
其中,前 3 条是对象的基本特征,后4条是属于特征的进一步定义说明。
有的书上又这样写关于对象的特征:
(1)模块性:一个对象是一个可以独立存在的实体。从外部看这个模块,只了解这个模块具有哪些功能,模块的内部状态以及如何实现这些功能的细节都是“隐蔽”在模快的内部的。
(2)继承性和类比性:人们是通过对客观世界中的各种对象进行分类及合并等方法来认识世界的,每个具体的对象都是在它所属的某一类对象(类)的层次结构中占据一定的位置。下一层次的对象继承了上一层次对象的某些属性。另一方面,不同的对象具有某些相同的属性时,也常常把它们归并成一类。
(3)动态连接性:我们把对象和对象间所具有的统一、方便、动态地连接和传递消息的能力与机制称之为动态连接性。
(4)易维护性:在面向对象系统中,人们的注意力集中于具有相同特性的一类对象,抽象出这样一类对象共同的结构和行为,进行一般描述,从而避免数据的冗余。“物以类聚”,分类、类比、类型、同类,等等,是人们归纳客观事物的方法。
1.3 类
类是对象的抽象及描述,是具有共同属性和操作的多个对象的相似特性的统一描述体。类也是对象,是一种集合对象,称之为对象类,简称为类,以有别于基本的实例对象。
在类的描述中,每个类要有一个名字,要表示一组对象的共同特征,还必须给出一个生成对象实例的具体方法。类中的每个对象都是该类的对象实例,即系统运行时通过类定义属性初始化可以生成该类的对象实例。实例对象是描述数据结构,每个对象都保存其自己的内部状态,一个类的各个实例对象都能理解该所属类发来的消息。类提供了完整的解决特定问题的能力,因为类描述了数据结构(对象属性)、算法(方法)和外部接口(消息协议)。
类由方法和数据组成,它是关于对象性质的描述,包括外部特性和内部实现
两个方面。类通过描述消息模式及其相应的处理能力来定义对象的外部特性,通过描述内部状态的表现形式及固有处理能力的实现来定义对象的内部实现。一个类实际上定义的是一种对象类型,它描述了属于该类型的所有对象的性质。
对象是在执行过程中由其所属的类动态生成的,一个类可以生成多个不同的对象。同一个类的对象具有相同的性质。一个对象的内部状态只能由其自身来修改。因此,同一个类的对象虽然在内部状态的表现形式上相同,但可有不同的内部状态。从理论上讲,类是一个抽象数据类型的实现。
一个类的上层可以有超类,下层可以有子类,形成一种类层次结构。这种层次结构的一个重要特点是继承性,一个类继承其超类的全部描述。这种继承具有传递性。所以,一个类实际上继承了层次结构中在其上面的所有类的全部描述。因此,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上面所有类描述的全部特性。
抽象类是一种不能建立实例的类。抽象类将有关的类组织在一起,提供一个公共的根,其它的子类从这个根派生出来。抽象类刻画了公共行为的特性并将着些特征传给它的子类。通常一个抽象类只描述与这个类有关的操作接口,或是这些操作的部分实现,完整的实现被留给一个或几个子类。抽象类已为一个特定的选择器集合定义了方法,并且有些方法服从某种语义,所以,抽象类的用途是用来定义一些协议或概念。
综上所述,类是一组对象的抽象,它将该种对象所具有的共同特征集中起来,由该种对象所共享。在系统构成上,则形成了一个具有特定功能的模块和一种代码共享的手段。
在一个有效率的面向对象系统中,是没有完全孤立的对象的,对象的相互作用的模式是采用消息传送来进行的。
1.4 消息
消息是面向对象系统中实现对象间的通信和请求任务的操作。消息传递是系统构成的基本元素,是程序运行的基本处理活动。
一个对象所能接受的消息及其所带的参数,构成该对象的外部接口。对象接受它能识别的消息,并按照自己的方式来解释和执行。一个对象可以同时向多个对象发送消息,也可以接受多个对象发来的消息。消息只反映发送者的请求,由