面向对象程序设计概述
牛咏梅
(南阳理工学院 河南 南阳 473000)
摘要: 分析传统程序设计方法与面向对象程序设计方法之间的差别,重点分析了面向对象程序设计方法的特点,介绍了面向对象程序设计 方法的步骤及其优点。
关键词: 面向对象程序设计; 对象; 封装; 继承
Abstract: To analyse the difference of procedure - oriented programming and object - oriented programming. emphasize introduce the characteristics ,steps and advantages of OOP. key words: Object- Oriented Programming; Object; encapsulation; inheritance
面向对象技术引起了程序设计方法学的一场革命, 它已经替代面向过程的程序设计技术, 成为当今计算机应用开发领域的主流技术。
一、面向过程程序设计与面向对象程序设计的比较
传统的程序设计技术是面向数据过程的设计方法,注重算法的描述,回答的是“做什么、怎么做”的问题。这种方法把数据和过程作为相互独立的实体,数据代表问题空间中的客体,用于表达实际问题中的信息;程序代码则用于处理这些数据。
面向对象的设计方法与传统的面向数据过程的方法有本质不同。面向对象的程序设计方法注重需求分析和设计反复,回答的是“用何做、为何做”的问题,它使程序员摆脱了具体的数据格式和过程的束缚,可以集中精力研究和设计所要处理的对象。新的对象类可以通过继承已存在的对象类的性质而产生,因此,这样实现的可重用性是自然的和准确的。采用面向对象的方法表示知识,不仅表达的能力强,可以表示相当广泛的知识,能够描述非常复杂的客观事物,而且具有模块性强、结构化程度高、便于分层实现,有利于设计、复用、扩充、修改等一系列优点。因此,面向对象的程序设计方法在知识处理与专家系统等在人工智能领域中的应用前景是光明的、乐观的。
二、面向对象程序设计语言中的基本概念
1. 对象
对象是对象式系统中运行时刻的基本成分,它是属性和行为的封装体,其中还包括和其他对象进行通信的设施。对象有三种不同含义:实在对象、问题对象和计算机对象。实在对象是现实世界中存在的实体;问题对象是实在对象在问题域中的抽象,用以根据需要,完成某些行为;计算机对象是问题对象在计算机系统中的表示,它是数据和操作的封装通信单位。因此,对象式语言中的对象是指计算机对象。
2. 类
类是对一组具有相同数据和相同操作的对象的描述,也就是说类是一组对象的抽象概括。其作用有:一是作为对象的描述机制,刻划一组对象的公共属性和行为;二是作为程序的基本单位,它是支持模块化设计的设施,并且,类上的分类关系是模块划分的规范标准。类有三部分组成:数据、操作和接口。数据刻划对象的状态,操作刻划对象的行为,类中所有数据均为私有,接口使操作对外可见。
3. 消息
消息是对象与对象之间可以传递信息,所传递的信息即为消息。它要求某个对象执行类中所定义的某个操作的规格说明,由三部分组成:接受消息的对象、消息选择子(又称为消息名)、零个或多个变元(实参)。
三、面向对象程序设计语言的特性
1. 抽象
抽象就是忽略问题的细枝末节,以便更充分地注意与当前目标有关的方面。抽象并非是对问题全面的描述,而只是选择其中核心的、共性的、能说明其性质的关键性问题,而非共性及细节部分可留给低级的派生类来解决。比如, 我们要设计一个学生成绩管理系统,考察学生这个对象时, 我们只关心他的班级、学号、成绩等, 而不用去关心他的身高、体重这些信息。抽象包括两个方面, 一是过程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个实体看待,尽管这个操作实际上可能由一系列更低级的操作完成。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。
2. 封装性
封装是面向对象的特征之一, 是对象和类概念的主要特性。封装是把过程和数据包围起来, 对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念, 即现实世界可以被描绘成一系列完全自治、封装的对象, 这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性, 则有必要决定这些特性的可见性, 即哪些特性对外部世界是可见的, 哪些特性用于表示内部状态。在这个阶段定义对象的接口。通常, 应禁止直接访问一个对象的实际表示, 而应通过操作接口访问对象, 这称为信息隐藏。事实上, 信息隐藏是用户对封装性的认识, 封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性, 使得程序维护修改较为容易。对应用程序的修改仅限于类的内部, 因而可以将应用程序修改带来的影响减少到最低限度。封装、抽象和信息隐藏是用来降低软件复杂性的重要技术。
3. 继承性
继承是一种联结类的层次模型, 并且允许和鼓励类的重用, 它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生, 这个过程称为类继承。新类继承了原始类的特性, 新类称为原始类的派生类( 子类) , 而原始类称为新类的基类( 父类) 。派生类可以从它的基类那里继承方法和实例变量, 并且类可以修改或增加新的方法使之更适合特殊的需要。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说, 学生类, 所有的学生可以看作是从同一个学生类派生出来的, 但是每一种学生的具体表现行为各有不同, 这是由于派生了不同的子类, 各个子类添加了不同的特性。继承对软件开发有许多的好处:
(1)软件复用性:如果一个操作是从另一个类继承来的,这个操作的所有源代码不用重写。
(2)代码复用:面向对象程序设计中存在多层次的代码复用,在一个层次上,许多不相干的程序员及项目可以使用的相同的类。
(3)界面的一致性:当许多类都从同一类继承时,在所有情况下,这些类继承的操作都是相同的,这样就很容易保证相似的类的界面也相似。
(4)快速原型技术:如果一个软件系统的大部分都可以由可复用的成分(例如类库等)构成,那么开发中的大部分精力就可以花在理解系统中新的以及特殊的部分。这样软件系统开发变得快速简单,这种开发叫做快速原型技术。
4. 多态性
在程序设计语言中多态性指相同的语言结构可以代表不同类型的实体或者对不同类型的实体进行操作。在面向对象程序语言中,对于类和对象之间的继承关系有一种独特的多态现象;如果类P 是类 S 的父类, 则子类 S 的一个对象 s 可以用类 P 的一个对象 p 所使用的任何地方,这就意味着一个公共的消息集(即操作)可以送到类 p和类 s 的对象上,这正体现了多态性。多态性与语方的运行链接有关,运行时链接表示系统在运行期间根据接收对象的类型将一个选择器和实现它的特定方法链接在一起,这种链接方式比起编译时链接在实现多态性方面具有很大的方变性和灵活性。
多态性的优点在于:高层代码(算法)只写一次,而通过提供不同的低层服务来满足复用的要求。在面向对象程序设计中,各种多态性方法以及其它方法相组合使用可以大大提高代码复用及共享。面向对象程序设计方法克服传统程序设计方法的大部分缺点,目前出现了很多面向对象的程序设计语言,例如 VC++, Object Pascal Visual Basic 等。
四、面向对象的程序设计步骤及优点
面向对象软件开发的主要目的是用可重用软件分解基类和用子类加快问题求解,缩短开发时间和减少软件开发费用;通过改变一个或多个类的实现,使其影响局部化,从而降低软件维护费用。其步骤略述为:
1.选择主要数据对象;
2.定义每个对象能够接收和发送的消息;
3.说明为实现每个对象所必须的数据元素;
4.用小说明书说明每个对象的方法;
5.最终优化整个设计。
它的优点在于:
1.易于维护
2.可扩充性
3.代码重用
五、结语
从上面的概述我们可以看出, 面向对象程序设计成为现代编程技术的一个重要组成的原因。从面向过程到面向对象是程序设计的一个飞跃。人们之所以要采用面向对象的程序设计技术, 其目的是:
1.提高程序的运行效率
2.提高程序设计工作的效率
3.提高程序的可维护性
运用面向对象技术不是必须的, 但是对于一个大型复杂应用系统的开发, 如果采用了面向对象技术, 则开发效率会大大提高。
参考文献:
[1] 徐家福等.对象式程序设计语言[M].南京: 南京大学出版社.1992.
[2] 贾洞, 杨小锋.面向对象技术中若干问题的探讨[J].小型微型计算 机系统.1998.
[3] 全柄哲.面向对象软件规格语言的设计[J].软件学报.1995.
[4] [美] Setphen Prata. C++ PrimePlus 中文版(第 4 版)[M].孙建春译. 北京: 人民邮电出版社, 2002.