前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇程序设计基本结构范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
C语言 结构化程序设计 循环结构 效率
一、引言
学习和应用计算机高级程序设计语言的人都知道,在这些语言中为实现结构化程序设计,一般都会采用三种最基本的结构,即顺序结构、选择结构和循环结构。因此,掌握这三种基本结构的使用方法,是学习和掌握高级程序设计语言课的基础。这三种基本结构中,顺序结构和选择结构和我们平常的思维习惯相似。因此,最容易理解和掌握;而循环结构是这三种基本结构中最复杂的一种结构,与我们日常的思维习惯不尽相同,因此理解起来相对来说比较困难。但是,几乎所有的程序都离不开循环结构,利用它可以简化程序、提高工作效率。因此,学习和应用高级程序设计语言的人又必须要掌握循环结构。但是,通过本人近几年的教学发现,大多数学生在学到循环结构一段时间后,干脆将这门课给放弃了,原因是他们觉得循环结构太难理解了。用顺序结构和选择结构做一个小程序还可以,用循环结构实在难理解。鉴于这个原因,本人将日常授课中总结出来的一点心得从初学者的角度写出来,希望能对即将和正在学习高级程序设计语言课的人有所帮助。当然,我们在这里是以C语言为例来说的,其实这方面的知识对其他语言比如Visual Basic语言等同样适用。
在C语言中,循环结构主要是由For语句、While语句、Do-While语句三种结构来实现的。而在这三种循环结构语句中又以for语句的应用更为广泛。因为for语句在其开头语句中就已经包含了循环变量的初始值、循环变量的终止值、循环的判断条件以及循环变量的变化趋势等这些内容,因此在编写其循环体时,只用考虑其循环体应该包含的主要功能就行了,而不用在For语句之前对循环变量的初始值进行过多地考虑,同样也不用在循环内部考虑其循环变量如何变化。对大多数有程序设计经验的人来说,使用for语句实现循环结构是一件轻而易举的事情。但是,对于没有经验的初学者来说,要想将for语句的作用及使用方法掌握住也不是一件容易的事情,更不用说While语句、Do-While语句的使用了。因此,本文从初学者的角度,阐述了C语言中循环结构的几种典型应用。
二、用循环结构输出几何图形
在教学过程中,不管开设哪一种高级程序设计语言课,只要一讲到循环结构,大多数老师几乎不约而同地选择输出简单的几何图形来作为讲解循环结构的最好实例。
对于这种类型的题目,初学者往往最容易想到的方法就是采用多条输出语句来完成程序的设计。虽然这种方法很快能够实现所要效果,但其缺陷也是很明显的:缺乏灵活性、程序修改起来不方便,也不符合程序设计的思想。比如,我想让大家输出8行,每行36个“*”。这个时候,我们就不得不在输入“*”的时候特别仔细,因为一不小心可能个数就不对了。
但是,这样的问题如果用循环语句来实现的话,程序不但可以简化多,并且可以很灵活地将其修改成我们想要的效果。
因此,在讲解这一类图形时,授课教师最好引导学生按照正常的程序设计思想,先分析图形的组成结构,找出其中变化的规律,然后按照所找到的规律用循环结构来编写出相对应的程序代码,这样一旦要求有一点点变化不用大篇幅地修改程序,而只用找到关键的几个地方修改一下就可以了。教师在讲解的过程中,可以举一反三,多次修改、让学生反复练习,直到他们理解为止。
现在,我们来具体分析一下该图形,看看它有什么样的特点,然后我们利用For循环将它的程序代码编写出来。
三、结束语
以上关于循环结构的使用基本上都是在程序设计教学过程中的一些体会与总结,可能比较肤浅,但是对于初学者来说,掌握这些知识还是有必要的。在进行课程教学的过程中,将自己在学习过程中得到的一些好的方法传授给学生,让他们从中去实践、体会,从而引起他们更大的学习兴趣是必要的。如何让一名初学者尽快摆脱日常的思维定式,更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,是高级语言程序设计这门课程在讲授过程中,应该时刻注意的问题。更希望学生在学习的过程中不只是从老师这里拿一些现成的经验去使用,更重要的是让学生学会自己去发现问题、解决问题,总结出一些更好的程序设计方法,为以后进行软件开发与设计打下良好的基础。
参考文献:
[1]谭浩强.C程序设计(第三版)[M].清华大学出版社,2005.
[2]苏运霖.计算机程序设计艺术第1卷・基本算法[M].北京:国防工业出版社,2002.
[3]谭浩强.C语言程序设计(第二版)[M].北京:清华大学出版社,1999.
关键词: 循环结构 C语言 程序设计
引言
顺序、选择、循环是结构化程序设计的三种基本结构,所以在高级语言程序设计课程中,掌握这三种结构是学好程序设计的基础。循环结构是这三者中最复杂的一种,几乎所有的程序都离不开循环,因此,熟练掌握循环结构是程序设计的最基本的要求。在C语言中,循环结构主要是由for和while、do-while语句实现的,其中for语句的应用更为普遍一些。for语句的用法对于有程序设计经验的学生来说轻而易举,但是对于那些没有经验的初学者来说难度却不小。本文从初学者的角度,阐述了C语言中循环结构几种典型应用的实现方法。
一、用循环结构实现几何图形
输出简单的几何图形,是循环结构的典型应用之一。对于这一类型的题目,初学者往往直接采用一条或若干条输出语句printf完成,这样虽然可以完成题目要求,但是很显然缺乏灵活性,不符合程序设计的思想。按照正常的程序设计思想,应该先分析图形的构成,找出其中的规律:如图1中的实心三角形,每一行由若干个空格、星号和一个回车换行符构成,将行号、空格数和星号数分别设为i、m和n,则可形成表1:
*
***
*****
*******
*********
由表1可以得出,行号i与空格数m、星号数n有如下的数学关系:
m=5-i,n=2×i-1
则实心三角形的构成规律可以描述为:第i行由(5-i)个空格和(2×i-1)个星号和一个回车符构成。把行号i作为for语句的循环变量,则此程序中的循环部分如下:
for(i=1;i<=5;i++)
{
/*输出(5-i)个空格;*/
for(m=1;m<=5-i;m++)
printf(“”);
/*输出(2*i-1)个星号;*/
for(n=1;n<=2*i-1;n++)
printf(“*”);
/*输出回车符;*/
printf(“\n”);
}
采用上面的方法,可以使学生很容易编写出类似的程序,其中关键在于让学生找出图形中行号与每一行的空格数及星号数的关系。
二、循环结构在数组中的应用
在C语言中,for语句经常与数组相结合,用于实现数组元素的赋值、输入和输出。对于初学者来说,更习惯于用顺序结构的语句来实现(如图2左)。我们将图2左的几条语句作比较,可以看出在这5条语句中,不同的只有数组下标,那么就可以将这5条语句合并成一条for语句,将数组下标换成for语句的循环变量i,而i的值从0增加到4。按照for语句的基本语法规则可以很容易写出图2右的for语句。
同样,对于下面这个输出二维数组元素的例子,也可以用上述方法实现,不过转换过程比上例要复杂一些:经过对比图3左侧方框中顺序结构的12条语句,可以发现也是只有数组下标在变化,但是由于是二维数组,行下标和列下标同时都在变化,很显然不能直接用一条简单的for语句来实现。但是我们可以把这12条语句细分一下,3条语句为一组,而在同一组中的语句只有列下标在变化,这时可以采用上例中的方法,将列下标都用循环变量j来代替,得到图3右上的形式。再次对比图3右上的4条for语句,不同的是行下标,同样用新的循环变量i来代替,合并后得到图3右下最终二重for循环的语句。
三、循环结构中的效率问题
程序设计的初学者往往以完成题目要求的功能为目的,程序的执行效率是最容易忽略的一个问题。在循环结构中,具体表现为循环体的执行次数。例如,一个经典的素数判定问题。在数学中素数的定义为:素数即指那些大于1,且除了1和它本身外,不能被其它任何数整除的数。根据这一定义,初学者很容易编写出如下所示的程序段:
int isprime(int n)
{
int i;
for(i=2;i<n;i++)
if(n%i==0)return 0;
return 1;
}
上面的程序,完全可以实现题目要求的功能,初学者往往满足于此。但是当对for循环的执行次数进行分析时,我们发现:当n不是素数时,没有任何问题;而当n是素数时,循环体就要执行(n-2)次,而实际上是不需要这么多次的。根据数学的知识,可以将次数降为n/2或n的算术平方根,这样可以大大减少循环体的执行次数,提高程序的效率。
程序的执行效率是编程中时刻需要考虑的问题,也是程序设计中的基本要求。这需要许多算法方面的知识,对于初学者来说,要求可能过高,但是我们在讲授过程中要注意向学生灌输这种思想,从学习之初就要打下良好的基础,尤其是类似上面例子中这样显而易见的情况,可以提醒学生在编制完一道程序以后,检验一下,是否还有可优化的地方,这对以后进一步学习高级编程都是必要的。
如何让一名初学者尽快摆脱日常的思维定式,更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,是高级语言程序设计这门课程的讲授过程中应该时刻注意的问题。希望本文能在这方面起到一点作用。
参考文献:
2、线性表的定义:线性表的顺序存储结构及其插入与删除运算。栈和队列的定义;栈和队列的顺序存储结构及其基本运算。线性单链表、双向链表与循环链表的结构及其基本运算。
3、树的基本概念:二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。
4、程序设计基础:程序设计方法与风格。结构化程序设计。面向对象的程序设计方法,对象,方法,属性及继承与多态性。
5、软件工程基础:软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。结构化分析方法,数据流图,数据字典,软件需求规格说明书。结构化设计方法,总体设计与详细设计。
6、软件测试的方法:白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。程序的调试,静态调试与报考调试。
7、数据库设计基础:数据库的基本概念:数据库,数据库管理系统,数据库系统。数据模型,实体联系模型及 E-R 图,从 E-R 图导出关系数据模型。
[关键词] 程序设计; 精品课程; 课程体系结构
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2012 . 24. 066
[中图分类号] G64 [文献标识码] A [文章编号] 1673 - 0194(2012)24- 0114- 02
本课程从高技能人才的培养要求出发,以强化技术应用能力培养为主线,构建理论教学体系和实践教学体系。 VB(Visual Basic简称VB,以下同)程序设计是一门实践性很强的课程,只听、看、读是学不会程序设计的,只有让学生多动手、多实践,通过编写调试大量的程序,才能使学生从中理解程序设计的思想方法、积累程序调试的经验,体会成功的乐趣,从而激发学生的学习兴趣。我们坚持程序设计课程以培养学生的创新意识和动手能力为目的。我们的指导思想是:课堂精讲,上机多练,课程设计综合实训。 使学生初步具备设计、开发中小型应用程序的综合素质和技能。
我们在教学中,采用任务驱动与项目教学相结合的方式,以案例提出问题,教师示范解决方案为基本形式,充分调动学生学习积极性为核心,使学生在教师的示范过程中,掌握知识点,学习分析问题的方法,提高解决问题的能力。在教学内容方面,注意了紧密跟踪计算机技术的最新发展,不断增加反映 VB程序设计最新技术的内容,基本做到了与世界同步、与国际接轨。在教学中,坚决贯彻以实际应用为目的,以提高实际编程能力为核心的教学思想,精讲多练,不去纠缠过多的语法和算法,着重培养和训练解决实际问题的能力编程能力,让学生在编程中学编程,取得了较好的教学效果。
1 课程体系结构的研究与实践
VB程序设计是计算机信息管理专业的一门专业基础课程。“程序设计”是计算机的灵魂,由于VB简单易学、方便快捷,是近年来发展最为迅速的面向对象的程序设计语言。
传统的程序是由过程或函数组成,过程或函数由一系列的字符组成,岂不说编写程序,阅读起来就晦涩难懂,程序出错、查错、修改等都是十分困难的事情。从而,可视化的编程工具应运而生,VB就是其中之一。有了可视化的开发环境,编程工作变得越来越轻松、有趣味。便编程人员在编写应用程序时,既不需要通过反复调试运行调整它们,而只是把由开发工具提供的各个对象拖放到屏幕上并调整位置、大小、颜色、字体等即可。程序运行时所见的结果就是设计时调整的结果,也就是常说的“所见即所得” 。
鉴此情况,我们对VB程序设计课程进行了专题性的研究,经过不断的教学改革与研究,逐步完善,已建立了具有全新的课程体系结构。
2 就业为导向,规划课程结构
高等职业教育是就业教育,因此我们的课程定位为:培养学生具有良好的程序设计风格,面对程序设计具有设计、编译、调试、维护和重用能力。让学生学会并掌握运用VB程序设计解决实际问题,利用计算机和编程技术提高我们的生活效率和工作质量,做到事半功倍,也为今后的专业课打下坚实的基础。
3 从实用性出发,改革教学方法
为了实现以就业为导向,以能力为本位的应用性人才的培养目标,结合VB程序设计的基本知识和基本技能,我们对传统教学进行了改革,以项目为导向,对课程内容与时间进行了压缩调整,同时确保教学质量,对VB程序设计现有的教材进行大力度的改革与补充。
我们采用了“任务驱动式”的教学方法。以“任务”为目的,以语言理论教学为过程,最终用语言设计“任务”,实现任务的要求,培养学生分析问题的能力及统筹全局、协调关系的基本素质,使学生树立面向工程进行程序设计的思想,为其将来从事计算机程序设计打下良好的基础。
VB程序设计采用工学结合,以项目为导向的教学方法。将知识划分模块,项目分解。本门课程共分为三大部分:程序设计基础、程序设计技巧和程序设计应用。
VB程序设计课程设计的总体理念是第一部分程序设计基础讲述程序设计语言基础知识和设计规范;第二部分是对第一部分理论的简单应用,包括程序调试和程序设计技巧;第三部分是将第一部分和第二部分运用到实际的项目工程中去。
(1) 程序设计基础。在VB程序设计中非常重要,是程序设计的理论基石,通过基础部分的学习,让学生掌握程序设计的基本理论和基本方法,尤其是养成良好的程序设计规范,为后续课程的学习打下良好的基础,也为日后零距离上岗铺平道路。
(2) 程序设计技巧。这部分是整个课程的纽带,起着承前启后的作用。程序设计理论乏味枯燥,通过这一部分的趣味小程序,巩固学生的理论知识和语言规范,掌握数据的使用方法,掌握键盘、鼠标的使用技巧,掌握过程和函数的定义和调用方法,了解枚举及自定义数据类型等。
(3) 程序设计应用。通对文件管理系统、图形图像和多媒体系统、数据库应用系统、网络类应用系统、ActiveX简单应用,按照程序设计规范的要求,在教师的组织和协调下,独立上机完成项目。在学生自己动手的实践活动中,掌握职业技能和专用知识,从而构建属于自己的经验和知识体系,提高学生自己的综合职业能力。
本课程以讲授为主、辅以演示法、实验法及讨论法等多种灵活多样的教学方法,并结合现代教育技术手段,有效地调动学生的学习积极性,促进学生积极思考,激发学生潜能。在理论课教学过程中以讲授法为主,通过讲授使学生获得VB程序设计课程系统的理论知识。在讲授的过程中,课程小组注重讲述与讲解相结合。通过讲述,使学生理清VB程序设计开发各个环节基本内容的逻辑性;通过教师运用深入浅出的语言对教学内容进行说明、解释和论证,使学生理解和掌握VB程序设计开发的基本概念和基本原理。具体包括以下5个方面:实施师生互动式教学;实施研究性教学;实施案例分析法教学;实施师生协作式教学;实施专题讨论教学。
4 加强职教理论研究,深入职教理念改革
我们在VB程序设计课程的教学中,尽可能以真实的职业活动为情境主线,切合学生认知过程,用教材和多媒体为载体,让学生在实践中,掌握程序设计技能,懂得程序设计知识,从而构建属于自己的经验和知识技能体系,经过多年的实践,这种以学生为主,讲授和学生上机4 ∶ 6的教学过程设计取得了很好的效果,这为我们进一步深化其他职教课程的改革积累了经验,也为推动职教课的建构奠定了基础。
VB程序设计是一门实践性很强的课程,在有限的课时中,学生通过作品参观、理论学习、校内实践和参加技能竞赛,这种工学交替、理论和实践交融的学习,由感性认识上升到理性认识,最后升华到职业认识,以学生职业能力发展为目的,培养“零距离”或“近距离”上岗的程序设计人才。
5 探索实践性课程的考核方法
改变了考试的方法,应知应会的理论知识,采用常规的考试形式。而对于实践性较强的内容,采用答辩式、撰写报告等多种形式进行考试。学生结业的总成绩是本门课程各种形式考核的综合,今后我们将进一步探索以网络化学生自我评价为中心,以职业能力描述的学习目标为标准化的考核新模式。
6 教学模式的设计
VB程序设计课程以就业为导向,以能力为本位和计算机整合的课程,课程建设突出程序设计和工程项目开发。鉴于VB程序设计课程的特点,基于项目导向的教学范式,在教学过程中利用在不同阶段和不同目标采用了不同的教学方法:
(1) 以真实和模拟的职业活动为载体,选取典型真实的工程项目效果为实现目标,构建特定的学习情境。
(2) 用仿真模拟课件为载体,在教师的组织和协调下,让学生通过自己动手完成程序开发。
(3) 职业教育是一种“有目标的活动”,为此整个教学和学习过程依照职业的工作过程展开,使生获得完整的职业行动能力,最终实现“零距离上岗”的就业目标。
(4) 采用真实职业环境与工作要求的考核办法,全面检查与评价学习效果。在教学计划中,设置课程实训课,通过工程项目应用开发,全面考查学生的学习效果;通过答辩、口试与上机抽查测试,考查学生对知识的掌握程度和实际操作的熟练程度及分析问题与解决问题的能力。
7 特色与创新
(1) 本课程是计算机专业学生的基础课程,注重培养学生实际编程能力,用以培养学生分析问题的完备性及统筹全局、协调关系的基本素质,使学生树立面向工程进行程序设计的思想,为其将来从事相关专业打下良好的基础;
(2) 本课程采用项目驱动的教学方法,将软件开发和VB程序设计紧密结合;
(3) 用实际工程案例培养学生实践水平,为社会提供零距离上岗人才;
(4) 考试方式以笔试、答辩、上机考核等多种形式对学生进行考核。
主要参考文献
[1] 李勇帆. Visual Basic程序设计案例教程[M]. 北京:人民邮电出版社,2009.
[2] 李勇帆. Visual Basic程序设计上机指导与测试[M]. 北京:人民邮电出版社,2009.
关键词:面向对象;程序设计;思维方法
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)17-21493-03
1 引言
程序设计作为计算机科学与技术专业重要的学科基础课,在由基础训练到专业课教学阶段过渡过程中起到承上启下的作用。它不仅为今后学习专业课打下坚实的理论基础和技术基础,而且为软件开发提供必要的理论、方法和工具。由于面向对象程序设计是程序设计发展的趋势,越来越多的大学已经开设C++、Java、Delphi等面向对象编程语言,作为学生学习程序设计的重要课程。面向对象编程语言的教学过程中,要注重向学生传授面向对象的基本思想和方法,因为它们对编程实践具有普遍的指导意义。
2 面向对象思想的重要性
传统的程序设计是面向过程的,采用结构化程序设计思想。这种方法主要是围绕设计算法来进行的,即在程序设计过程中常常考虑的问题是采用什么样的解题方法和步骤。程序设计工作的本质是功能分解,采用“自顶向下、逐步求精”的方法,把所要开发的应用程序系统功能分解为若干子功能,针对每个子功能编写程序模块,所有功能都隐含在程序代码中。当程序较大和较复杂时,各类数据及实现不同功能的过程之间的联系变得复杂,以致于程序可靠性低,维护性较差。
面向对象是自结构化方法以来对系统开发过程的最重要的变革,在20世纪90年代,它代替了结构化方法而成为软件开发的主要方法。这种开发策略基于下面的概念,即系统可以由一系列称作对象的可重用组件来构建。对象是面向对象系统的基本思维单位,与结构化方法里分离数据和功能不同,对象包含了它们两者,具有一定的属性(数据)和行为(功能)。它的实质是从系统组成的角度对系统进行分析,利用类及对象作为基本构造单元,使设计出的软件模块化、可复用性、易于维护,降低开发维护费用,提高软件质量。
面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的。面向对象语言对程序设计的主要影响并不在于它的语法特征,而在于它所提供的自然的问题求解机制和结构。要理解面向对象语言的能力,应首先理解面向对象技术的基本原理和基本思想。使用面向对象编程工具,如果没有面向对象的编程思想,好比“不察其辞”,最终仍然是“近而不可见”,难以开发出优秀的系统。教学过程中要注意提醒学生面向对象是一种新的思维模式,不要只把注意力错误地放到语法规范的学习方面,而忽略了对于面向对象方法的学习和理解。
3 面向对象编程思想的培养
在面向对象程序设计中,有三个基本的原则思想,它们是封装、继承和多态性编程思想,只有掌握这些思想“利器”,才能把它们有效地用于指导实际编程。教学过程中要着重阐述这些思想方法。
3.1 引导学生认识封装性,学会使用对象构造程序
面向对象程序设计方法是以对象为核心,把程序看作是相互协作又彼此独立的对象的集合。因此,教学过程中训练学生的编程思维时,要摆脱传统的面向过程思维方式的束缚,首先要考虑使用什么对象来解决问题,如何设计对象以及如何让对象发生联系,即学会以对象为基本模块来构造程序。
在进行面向对象程序设计时,一一去描述同类对象既不可能也是极大的工作重复,例如,设计一个求圆面积的程序时,不可能一一描述每个圆对象。为了克服类似的复杂性,在程序设计时,采用了人们在处理复杂问题时常用的一种方法―抽象,它是将做什么和怎么做分开,从而隐藏了问题的复杂性。在面向对象程序设计中,抽象是最基本的原则之一,包括数据抽象和行为抽象。数据抽象是抽象出某类对象的公共属性,行为抽象是抽象出某类对象的公共行为。这样,用抽象的方法抓住了编程者所关心的重要信息,而忽略掉一些不重要的细节部分,从而找到了一类对象的抽象数据类型。然后,用面向对象编程工具的类机制把一类对象共有属性的数据结构和操作该数据结构的行为捆绑在一起,封装在一个程序实体内定义成一种类类型,这一过程就是数据封装,简称封装。
下面是对圆对象抽象封装后得到的C++类:
class Circle{
private:
int radius; //数据成员
public:
Circle(int r){radius=r;}//成员函数
double area(){return 3.14*radius*radius;}//成员函数
};
从上面的例子中看出,编程工具提供的类机制把对象的数据结构和使用数据结构的操作封装在一起,并且通常将数据结构部分声明为private访问属性而使其不能被外界直接访问,或者说对外界隐藏,而只能通过在这个数据结构上定义的public访问属性的操作接口间接地访问数据结构,使数据结构被隐藏在操作接口背后,操作的实现细节也一样被隐藏在操作接口的背后;达到了封装数据结构的目的,这种编程思想使得类的使用者只需知道操作的接口,而没有必要了解数据结构及在数据结构上的操作的实现细节,大大减轻了使用者的负担。另外,当类的数据结构或操作的实现被修改时,只要操作的接口不变,使用类的程序的其余部分则不必修改,有利于程序的维护。
在定义类之后,以类为模型生成所需的对象,不同对象之间通过发送消息向其他对象提出服务请求,接受消息的对象主动完成指定的功能,整个程序的功能由所有对象共同完成。例如,在C++程序中编写下面的代码,生成了两个圆对象,并向它们发消息要求计算自身的面积:
Circle c1(3),c2(5);
c1.area();c2.area();
3.2 领悟继承性,实现代码重用
继承可以说是面向对象程序设计的最重要特点,它不仅自然地体现了现实世界中对象的一般和特殊关系,而且很好地解决了软件的可重用性问题。在教学过程中可以通过实例,使学生领悟继承性的“真谛”,并通过它合理地实现代码重用。
所谓继承,是指子类自动拥有父类的属性和操作,并可以增加自己的新的属性和操作,这就为面向对象程序设计的代码重用提供了很好的方法支持。在继承关系中子类还可以被继承得到子类,如此下去,使得类与类间的继承关系形成多层次结构,从而能很好地刻画现实世界中存在的多层次关系。例如,针对某小型公司编写计算雇员工资的程序,首先,根据工资计算方法的不同,分析得出该公司存在经理、技术人员、销售员、销售经理四种类型的雇员。根据各类雇员之间的联系,抽取姓名、工号等共性形成顶层的雇员类,经理、技术人员、销售员三个类由雇员类派生而来,雇员类中增加级别属性,技术人员类中增加专业属性,销售员类中增加销售额属性;而销售经理又继承了经理和销售员两个类,形成软件系统的类的层次结构。下面是雇员类与经理类的C++定义:
class employee{
char name[10];//姓名
unsigned no; //工号
……
};
class manager: public employee{
int level; //级别
……
};
利用继承与派生机制,对于类似的问题或只有部分类似的问题都可以通过从已定义的类派生出新类来解决,避免了重复。即继承性使得用户在开发新的应用系统时不必完全从零开始,可以继承原有的相似系统的功能或者从类库中选取需要的类,再派生出新的类以实现所需要的功能。继承机制实现了代码的重用,加快和简化了程序设计,极大地提高了开发效率。
3.3 灵活运用多态性,简化程序处理逻辑
在面向对象程序设计领域,多态性通常特指如下机制:派生类对象可以象基类对象一样使用,同样的消息既可以发送给基类对象也可以发送给派生类对象。也就是说,在类等级的不同层次中可以共享一个行为的名字,但是不同层次中的类却各自按自己的需要来实现这个行为。当一个对象接收到发送给它的消息时,根据该对象所属于的类动态地选用该类中定义的实现算法。
例如,C++语言中是通过虚函数来实现多态性的,对于上面提到的计算雇员工资的问题,因为各种类型的雇员的工资计算方法不同,在雇员类、经理、技术人员、销售员类中分别定义如下虚函数:
virtual double salary()=0;
virtual double salary(){ return 5000+level*100; }
virtual double salary(){ return 3000+hour*50; }
virtual double salary(){ return sales*0.04; }
对上述几个类构成的简单的类层次结构, 可以用如下的代码计算工资:
void ShowSalry(const employee& r){cout
并且,可按下面的方式使用多态程序段:
void main(){
manager e1("Tom",1001,5);
technician e2("Sue",2023,30),
salesman e3("Liu",2012,30);
ShowSalry(e1);
ShowSalry(e2);
ShowSalry(e3);
可见,多态性为统一地处理一组接口相同但实现不同的操作提供了极好的方法支持, 是一种形而上学的方法, 它使程序逻辑简单明了、可读性强。此外, 多态性还能使程序扩充特别容易,例如,如果我们还希望求其它类型雇员的工资,只需要从employee类直接或间接派生出该类并为其定义不同版本的salary函数,而多态程序段保持不变。
多态性机制不仅增加了面向对象软件系统的灵活性,而且进一步减少了冗余信息,显著提高了软件的可重用性和可扩充性。
4 总结
正是由于封装、继承和多态性编程思想, 使面向对象的程序设计方法能自然、 准确地模拟现实世界的问题。面向对象程序的教学,要重视对学生进行面向对象思想的培养,只有掌握了面向对象这一优秀的理论工具,才能运用面向对象的思想分析、设计,并利用语言支持和实现面向对象理论的语法结构去编程解决问题,编程过程中可以方便地共享已有的软件资源和程序代码,从而大幅度提高软件的开发效率和减少今后的软件维护工作量。
参考文献:
[1] 杨芙清. 面向对象的系统分析[M]. 北京:清华大学出版社,1998.5.
[2] Ian Graham. 袁兆山 译. 面向对象方法原理与实践[M]. 北京:机械工业出版社,2003.1.
[3] 吕凤翥. C++语言基础教程[M]. 北京:清华大学出版社,1999.