摘要:多态性是面向对象程序设计的四大特征之一,是课程教学的重点和难点。对多态性概念内涵进行深刻辨析,有助于更好地理解面向对象中功能多样化的实现机制。本文从多态性概念中消息的理解出发,通过实例说明了消息和函数参数、数据的不同,指出多态性描述中的消息是指函数调用、而非通常所理解的函数参数、返回值等信息载体,从而更为科学地理解多态性的内在含义和多态的实现原理,为教学质量和学习效果的提高奠定重要的基础。
1、引言
由于面向对象课程的方法论和抽象性特点,课程教学往往以阐述面向对象程序设计的基本思想和实现机制为中心,以培养和提高学生使用面向对象方法分析和求解问题的能力为目标,并未着重强调程序语法和编程技术的掌握,因而课程知识点的学习往往较为枯燥和难懂。其中,多态性是面向对象的四大特征之一,是面向对象课程教学的重点。由于多态性概念表述的多样化特点,因而往往也是课程教学的难点之一。
文献中已有大量关于多态性的研究。典型工作如刘变莲通过例子对抽象的静态和动态多态概念进行探讨[1];周建儒对单继承情况下C++和Java编程语言的动态绑定机制进行讨论[2];赵学武对多态性的概念、分类和应用条件进行阐述[3],并举例对多态性的应用进行分析;周佳明等对多态性在面向对象程序设计过程中的作用进行论述[4];李涛等将模板案例应用于多态性与虚函数的教学过程中[5],对学生深入理解面向对象多态性思想的模式进行探索。对多种形式描述的多态性概念进行对比学习与准确辨析,是深刻理解多态性相关知识点的必要基础。然而相关工作报道较少,因而本文通过概念理解和实例说明进行讨论。
2、多态性概念辨析
2.1 多态性定义
在不同程序语言、不同作者编著的书籍中,给出了很多多态性概念的描述,最常见的有两种:
第一种:多态是指“一个接口,多种形态(实现)”。
第二种:多态是指对象根据所接受的消息而做出动作,同样的消息为不同的对象接受时可导致完全不同的行为。该现象称为“多态性”。
2.2 多态的实现
多态的实现主要包括函数重载和函数重写(覆盖)两种方式,如图1所示。
函数重载通过形参列表区分程序所要调用的各个函数,从而实现编译时的多态,即静态多态。而函数重写(或覆盖)产生与继承结构,无法从形参列表区分程序所要调用的函数,只能在程序运行时通过判断对象的类型来确定所调用的函数,即运行时(动态)多态。
2.3 概念辨析
在第一种表述中,鉴于程序设计中的接口泛指函数,因而多态较为容易地可以理解为:用一个相同的函数名称定义许多不同的函数。这些函数可以有多种不同的形态(即不同的实现),具体表现为同名函数可以有不同的参数列表,也可以有相同的参数列表(需要通过继承结构实现),从而实现相同或相似的功能。
相对于多态性的第一种描述方式,第二种描述方式在概念理解上较为困难。其中,对于“消息”,很多教材中很少进行阐述或说明,更未讲深和讲透,从而加大了准确理解多态性概念的难度。
以图2所示的动物继承结构为例。每种动物(Animal)都有其运动的方式,表示在运动的函数run(…)中,参数time意味着让该动物运动多少时间。
当发送命令或消息给不同的动物时,例如:“运动30秒(time=30)”,不同的动物有不同的行为,鸟是飞翔、老虎是奔跑、青蛙是跳跃,这点不难理解。然而,以图3所示的青蛙为例,让青蛙跳跃30秒时,发送给青蛙的消息是为“30秒?”,而青蛙返回的信息是否非“跳跃?”
鉴于维基百科对计算机科学中“消息”的两种释义,一种是由电脑系统本身发送而属于其人类用户之间的消息;另一种是为特定目的在不同计算机程序之间或一支程序的不同组件之间互相发送的消息[6]。
而在通信领域,消息是指通信系统传输的对象,是信息的载体。它通过语言、文字、图像和数据等不同形式具体描述。
另一方面,人们常识中所理解的消息,往往就是程序设计中描述信息的函数参数,包括函数执行时的形\实参和函数返回值。
虽然,如此理解多态性概念中的“消息”没有本质的问题,也很符合常识。因为,不同的对象接受到相同的消息(形\实参相同),而不同对象的函数功能可能不同,因而可能导致完全不同的行为。然而,如若消息就是指函数参数(如图3例子中“30秒”、“跳跃”),则没有形参和返回值的函数,是不是就不发生消息的传递?是不是就实现不了多态呢?不同的函数参数(如time=30或time=100)被不同的对象接受,是不是就是指不同的消息、不是多态?答案显然是否定的。可见,多态性概念中的“消息”并非函数的形\实参和返回值。
2.4 消息的内涵
多态第二种描述中的消息,其实意指“函数的调用”,表述的是功能事件的发生。因而相同的消息即为“同名函数的调用”。那么,概念中所述的“根据所接受的消息而做出动作”,即为根据所接受的函数调用而接受动作;而“同样的消息为不同的对象接受时”,即为调用不同对象的同名函数。如此理解,则多态性的含义,就比较明了。
不管是静态多态,还是动态多态,都是要通过同名函数的调用。
静态多态是通过同名函数的不同形参列表区分所要调用的具体是哪个函数。
而动态多态是通过调用不同实体内的同名函数实现的。
消息是指函数调用,而同样的消息就是指同名函数的调用。以图2所示的动物继承结构为例,不同动物运动形式的多态性,并不在于函数参数传递的参数(time)值相同,而是指调用了相同的函数run(…)。
3、多态性的实现机制
在准确辨析多态性描述中“消息”的内涵后,有助于更好地理解面向对象中动态多态的思想和实现机制。
以图4为例,指针\引用p指向的是动物对象,在调用程序中调用函数run(…)时,多态的实现是因为p可指向父类动物Animal,或子类动物(Bird,Tiger,From),并调用其中的run(…)函数。同样的消息(同名函数调用)具体调用的是什么动物中的run(…),主要由指针\引用p实现的指向确定。当p指向谁,即调用谁的run(…)函数,因而实现了“同样的消息为不同的对象接受时可导致完全不同的行为”的多态性。
上述的消息内涵和多态实现机制,确保调用程序清晰明了地知道“可能具有的函数参数(如time=30),要发送到哪里”的同时,函数的返回值自然而然地返回给调用程序并保存在rs中,从而让程序的数据流转更加清晰明了。
4、结论
针对多态性概念的两种典型描述,通过实例的方式对概念中提及的术语“消息”进行研究,指出多态性描述中的消息是指函数调用、而非通常所理解的函数参数、返回值等信息载体,从而为人们更好地理解多态性的概念、思想和实现机制,为面向对象程序设计教学质量的提高和学习效果的提升,奠定了一定的理论基础。
参考文献:
[1]刘变莲.面向对象程序设计中多态性探讨.电脑知识与技术,2017,13(10):60-61,70
[2]周建儒.基于单继承的“动态多态性”的分析与应用.信息技术,2014(03):162-164
[3]赵学武.面向对象程序设计中的多态性.电脑知识与技术,2014,10(21):5036-5039
[4]周佳明,陈俊杰.面向对象程序设计中多态性探讨.数码世界,2020(01):63
[5]李涛,任廷艳,罗刚,等.模板方法模式在c++多态性教学中的运用.现代计算机,2019(33):69-72
[6]消息(维基百科).
文章出处:林甲祥,陈宏方,刘雄恩,王雪平.面向对象教学中多态性概念辨析[J].福建电脑,2021,37(05):75-77.
分享:
“凝固原理”课程是高校机械、材料、冶金类理工科的专业基础课,在整个知识体系中占有重要的地位。因此,新工科背景下相关理工科专业必须要把掌握凝固原理相关知识作为一项重要工作,为培养新时代应用型人才奠定基础。“凝固原理”所涉及的知识点较多,公式推导复杂,向来是理工科相关专业中“学生难学、教师难教”的一门代表性课程。
2024-03-07毕业设计是城乡规划本科教学体系中检验学生综合运用基础知识和设计能力的重要阶段,设计要求和成果均高于平时的设计题目。它要求学生运用所学知识,综合调研现状、客观全面地分析问题,并通过相似案例的学习借鉴,取长补短,为自己的设计方案找出解决问题的思路方法。在毕业设计过程中,学生不仅需要进行物质空间层面的设计,还需要综合社会、经济、产业等多方面的分析,探索问题形成的相关因素,并综合性地提出解决问题的方案,切实体现城乡规划的系统性和综合性。
2023-11-30虚拟现实技术(MR)是增强现实技术以及虚拟现实技术的一种延伸,可以在现实世界和虚拟世界中构建信息回路,从而增加使用者的现实体验和真实感。这项技术在工业生产、军事和文化领域都有着广泛的应用,在医药等方面用途也很多。
2023-11-04信息技术与语言学习的深度融合使基于智能手机、平板和电脑等移动终端的阅读教学成为大学英语课程的重要组成部分。移动阅读教学凭借其动态化的海量阅读资源、多元化的交互方式、智能化的阅读功能、个性化的阅读模式和阅读共同体等特征,为学生创设了接近语言使用真实情境的新型移动阅读环境。
2023-11-01随着高等教育的普及化、信息资源的共享化和网络技术的服务化,传统的“满堂灌”教学模式已经无法激发学生学习兴趣和提高内生动力,不利于国家5C核心素养的人才培养[1]。近年来,雨课堂、对分易、云课堂等教育技术的开发;中国大学MOOC、学堂在线、智慧树等专业课程平台的涌现。
2023-10-25结构力学课程学习的成效直接影响到学生毕业后走向专业岗位的工作能力,但因为一般在大二学年的第一学期就开设了这门专业课程,此时学生对于所学专业尚处于懵懂状态,对后续就业等思考甚少,因而对课程与工程实际的紧密联系可能难以理解,因而对课程的重视度并不高。
2023-10-25线上教学是指分布在不同地区的教师和学生,在同一时间登录网络教学平台,利用多媒体的优势和功能,教师线上授课、答疑、评价,学生线上学习、互动的教学形式。与其他教学形式相比,线上教学具有师生虽然不在同一空间,但时间同步;利用直播平台或社交软件交流,依托互联网授课;既可以小班教学,又可以面向大众教学的特点。
2023-08-09编程是人类与计算机沟通的工具,已经引起世界各国关注。最近几年,河北省大部分高中信息技术课程中都加入了编程教学内容,由于编程教学目前在基础教育中还处于起步阶段,存在的问题较多,尤其是乡镇高中教学还有许多方面有待提高。本文调研了河北省石家庄地区10所乡镇高中的编程教学现状。
2023-08-06新文科建设强调以人才培养需求为导向,专业满足国家发展战略需要和社会需求的功能定位,强调多学科交叉与深度融合,强调信息技术融入教学方法并推动传统文科更新升级。新文科背景下的课程思政是一种具有协同育人效应的教育形式,是高校构建全员、全程、全课程育人格局,落实立德树人根本任务的有效途径之一。
2023-07-25信息技术教学是初中阶段一门很重要的学科,其在学生未来的生活、学习、工作中扮演着不可或缺的角色,关系着学生信息技术技能的掌握程度和信息素养的高低。为此,初中信息技术教师应该积极探寻提升信息技术教学效率的方法,任务驱动法具有良好的教学效果,教师在信息技术教学过程中运用这一教学方法。
2023-07-09人气:5801
人气:4742
人气:4539
人气:4486
人气:4297
我要评论
期刊名称:学园
期刊人气:1074
主管单位:云南出版集团有限责任公司
主办单位:云南出版传媒(集团)有限责任公司
出版地方:云南
专业分类:教育
国际刊号:1674-4810
国内刊号:53-1203/C
邮发代号:64-53
创刊时间:2008年
发行周期:旬刊
期刊开本:大16开
见刊时间:4-6个月
影响因子:0.045
影响因子:0.077
影响因子:0.259
影响因子:0.356
影响因子:0.050
400-069-1609
您的论文已提交,我们会尽快联系您,请耐心等待!
你的密码已发送到您的邮箱,请查看!