赵学武
摘要:面向对象程序设计是继面向过程的结构化程序设计之后产生的一种新的设计方法,是目前开发大型软件的主流方法之一。多态性是该程序设计中的重要特性之一,具有一定的复杂性和灵活性,可以增强应用程序的灵活性和可维护性,在基于面向对象的程序设计中被广泛应用。该文首先讲述了面向对象和面向对象程序设计;然后详细阐述了面向对象程序设计中多态性的概念、分类和应用条件;最后举例分别说明了每种多态性的应用,并对其做出了分析。
关键词:面向对象;类;对象;多态性;重载;重写
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)21-5036-04
自从1946年第一台计算机诞生以来,计算机的发展呈现出惊人的速度。各种各样的计算机也越来越深和越来越广地影响着人类的发展。计算机由硬件和软件组成:近年来计算机硬件的发展有目共睹,而且性价比也越来越高;计算机软件的发展日益面向应用,也越来越精细化,灵活性和可维护性不断增强。计算机硬件是计算机运行的物理基础,计算机软件是计算机运行的逻辑基础。两者都是计算机运行的必备条件,但是计算机软件更加灵活,有更大范围的人可以参与进来做设计和开发工作。因此,计算机软件的研究是许多学者关注的一个焦点。应用软件是计算机软件的重要组成部分,以解决各种各样的应用为目的。计算机程序设计方法是编写应用软件的主要方法,并且可以在编写程序过程中融入设计者的设计思想,因此研究和使用计算机程序设计方法引起了许多计算机爱好者的兴趣。
在20世纪70年代之前,计算机语言仅仅建立在汇编语言和机器语言的基础之上,而程序编写员也必须对其使用的计算机硬件特征非常熟悉才能对开发软件的语言程序进行代码的编写工作[1]。20世纪70年代产生了C语言,它使人们在编写程序时不需要熟悉底层硬件,是面向过程程序设计的代表语言。面向对象程序设计在90年代作为程序设计的新方法,是目前开发大型复杂软件的主流技术,也是计算机编程人员和相关学者研究的一个热点。
1 面向对象程序设计
1.1面向对象
现实世界中的对象是现实世界中客观存在的实体,也是人们认识世界和改造世界的客体。面向对象程序设计中的对象是现实世界中对象的数字化抽象,是由描述对象的数据和容许的操作组成的封装体,与客观实体有直接的对应关系。对象是面向对象程序设计中的核心概念,面向对象应用程序功能的实现离不开若干个对象及其协作。
类是面向对象程序设计中的另一个核心概念,它是对一组具有相同属性和行为的实体的抽象描述,即它不与某一实体相对应,而是一组实体集的概念模型,是面向对象程序设计中的一种构造性的数据类型,其中相同属性数字化为属性(数据变量/成员变量),相同行为数字化为方法(函数)。
面向对象就是基于对象概念,以对象为中心和基本单位,通过类和继承等构造机制,以更符合人的思维的角度来认识、理解、刻画客观世界,然后去设计、建构相应的软件系统。面向对象方法的中心思想是将对象来模拟整个现实,而并非以前常用的传统设计将数据和方法分开来设计[2];面向对象是一种新的设计思路,它更加现代化,使编程人员感到程序设计更加容易。
1.2面向对象程序设计
面向过程的结构化程序设计产生于面向对象程序设计之前,是一种自顶向下、逐步细化的程序设计思想。它的特点是以功能为中心,函数是组成程序的基本单位,而数据在面向过程的程序设计过程中经常处于从属地位。这种设计思想的优点是比较容易理解和掌握,但缺点是不能够适应复杂问题和多变的现实需求。
为了适应软件发展的新需要,面向对象程序设计就应运而生了。面向对象程序设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学[3]。面向对象程序设计体现的是一种自下而上的设计思想,其特点是以数据为中心,类是组成程序的基本单位。面向对象程序设计自上而下特性,允许设计者从问题的局部开始,在开发过程中逐步加深对系统的理解[4]。这种程序设计方式开发出来的程序比较灵活,可维护性强,比较适合开发大型复杂软件,是目前较为重要的程序设计方法之一。
封装性、继承性和多态性是是面向对象程序设计的三大特征,其中多态性比较复杂,并具有一定的智能性;多态性使得面向对象程序对外呈现出强大的处理能力,可以用来产生精密、精美、可扩展性的代码[5],在应用面对程序设计语言编写应用程序时得到了广泛应用。因此对多态性做进一步的研究是有必要的。
2 面向对象程序设计中的多态性
2.1 多态性的概念
顾名思义,多态就是一种名称多种形态的意思[6]。在面向对象程序设计中,多态是指一个方法(函数)有相同的名字,有不同的参数形式或不同的实现过程,可以简单地描述为“一个接口,多个方法”。从广义上来说所谓多态性是指论域中的某种元素有多种解释[6],面向对象程序设计中的多态性是指同一个消息作用在不同对象或同一个对象上可以得到不同的结果。该特性的智能之处在于允许每个对象以适合自身的方式对相同的消息做出响应。多态性降低了代码的冗余性,提高了代码的可重用性和可扩充性。
2.2 多态性的分类
多态性是面向对象程序设计中最重要的特性之一,是实现代码重用的重要手段。根据消息指定执行哪个具体方法的时期的不同,分为静态多态性和动态多态性两类。
1) 静态多态性。一个方法(函数)的参数类型、参数个数和参数顺序统称为该方法(函数)的参数模式。在一个类中出现了若干个同名的方法(函数),它们的参数模式不同,这种现象称为方法重载(overload)。在一个使用了方法重载的应用程序中,编译系统在编译阶段会根据被调用方法的实际参数的情况找到与之相一致的重载方法执行,即根据参数模式的匹配来确定执行哪一个具体的重载方法,进而完成相应的功能。这种多态性即被称为静态多态性,即方法重载机制是实现静态多态性的一种途径。
2) 动态多态性。在具有继承关系的几个类间,出现了方法首部相同,方法体不同若干个方法,这种现象称为方法重写(overwrite), 也叫方法覆盖。在一个出现了方法重写的程序中,如果子类对象调用了重写的方法,这时在编译时就能够确定执行哪个重写方法了,即为调用该对象所属子类中的定义的重写方法;如果父类变量引用(指向)子类对象,这时具体执行哪个重写方法需要到程序运行时才能够确定,它更能体现同一个消息,有不同的执行过程和不同的执行结果。后者被称为动态多态性,这种多态性是通过方法重写的机制实现的。
2.3 多态性的应用条件
面向对象程序设计中引入多态性的目的是为了实现代码重用,但是应用多态性需要满足一定的条件。静态多态性有以下两个应用条件:1) 在一个类的内部写若干个重载的方法;2) 被重载的方法间要满足方法重载的要求。动态多态性的应用在满足以下几个条件:1) 被重写的方法应该分散在具有继承关系的类间;2) 被重写的方法要满足方法重写的要求;3) 父类变量引用(指向)子类对象;4) 通过父类变量调用重写方法。只有这些条件分别被满足,才能使用静态多态性和动态多态性,才能更好地发挥面向对象程序设计开发大型复杂软件的优势。
3 面向对象程序设计中的多态性应用举例
3.1 静态多态性应用举例
静态多态性是通过在一个类中方法重载实现的,在面向对象的应用程序设计中的应用也比较广泛。以Java程序设计语言为基础,静态多态性的应用实例如下所示:
3.2 动态多态性应用举例
4 总结
多态性是面向对象程序设计中的重要特性之一,在基于面向对象的应用程序中有着广泛的应用。该文着重阐述了面向对象程序设计中的多态性,并通过应用实例说明和分析了多态性的实际应用。多态性在面向对象程序设计中的占有举足轻重的地位,有必要对其做深入的研究。
参考文献:
[1] 李大鹏.关于计算机软件开发语言的研究[J].计算机光盘软件与应用,2012(6):195-196.
[2] 谭宇,杨华民,王鹏.面向对象软件度量技术的分析和综述[J].长春理工大学学报:自然科学版,2013,36(3-4):152-156.
[3] 赵凤芝,邢煜,王茱,等.Java程序设计案例教程[M].北京:清华大学出版社,2011:6-8.
[4] 杨学全. Java程序设计[M]. 2版.北京:中国铁道出版社,2011:31-36.
[5] 陈达丽,杨根兴.面向对象软件多态交互的测试[J].计算机工程,2008,34(14):29-31.
[6] 刘繁艳.Java多态性及其应用研究[J].软件导刊,2008,7(7):63-65.