当前位置:首页 > 专题范文 > 公文范文 > 正文

面向对象程序设计的教学探讨

发布时间: 2022-11-05 15:30:04 来源:网友投稿

摘 要 本文以提高计算机专业的程序设计水平为目的,主要探讨面向对象程序设计的教学模式、教学内容和教学方法,提出了如何充分认识面向对象程序设计的特点和怎样选择属于主流方向的程序设计语言,并以C++语言教学为实例,提出了如何提高面向对象的程序设计水平。最后,根据计算机技术的发展,提出了实施可视化程序设计方法的必要性,并总结了在讲授Visual C++.NET的过程中应该突出的重点内容。

关键词 程序设计教学 C语言 C++ Visual C++.NET

1 引言

笔者多年来一直在高校从事计算机科学技术的教学和研究工作,在长期的实践中深刻认识到,计算机程序设计是计算机专业的基础课,熟练掌握计算机程序设计也是学生将来从事计算机技术应用研究所应具备的基本素质。然而,程序设计技术水平的提高,仅仅靠一两门程序设计课程是不够的。只有经历了计算模型与算法理论、若干语言(含微程序设计和汇编语言程序设计)的程序设计、程序设计方法学、程序理论与软件开发方法学、软件工程以及其他相关课程的学习以后,并经过大量实践,才能真正大幅度、整体性地提高程序设计水平。我们在这里所讨论的面向对象程序设计,是在学习了某种高级语言(如:C语言或Pascal语言)之后所要学习的一门课程。为了提高面向对象程序设计的教学水平和培养学生的程序设计能力,既要考虑计算机软件设计发展的方向和需要,又要重视采用科学、合理和先进的教学模式,并实施相应的教学内容和教学方法。下面针对这些问题谈谈笔者的看法。

2 充分认识面向对象程序设计的特点

随着程序设计学科的发展,程序设计思想经历了从简单的顺序计算到结构化的程序设计,再到面向对象的程序设计的发展过程,形成了一整套的思想理论和设计方法。目前看来,面向对象程序设计方法比较接近人们表达事物和解决问题的思维方法,其特点如下。

(1)具有静态属性和动态行为的对象与客观世界的实体比较相象,面向对象的程序能够比较自然地模拟客观世界,从而使得解空间与问题空间在结构上尽可能一致。

(2)应用面向对象技术来分析、设计和实现软件系统的过程与人们认识客观世界、解决实际问题的过程比较一致。

(3)对象的封装性,降低了程序的复杂性;对象的继承性,增加了程序设计的可重复使用性;对象的多样性,增强了程序设计的灵活性。由此可以明显提高软件开发与维护的效率,降低软件的总成本。

应用这些特点,人们在程序设计时首先要考虑系统有哪些需要处理的“数据”或者“对象”,进一步分析这些对象包含了哪些信息,以及处理这些信息所需要的方法。也就是说,找出对象、正确地描述对象、分析对象与对象之间的关系以及采用计算机语言来构建系统等工作,这是面向对象程序的分析与设计的方法。

近年来,面向对象的技术越来越受到人们的重视,对它的应用和研究遍及计算机软件和硬件的各个领域,国内高校普遍开设了面向对象程序设计之类的课程。

3 明确选择属于主流方向的程序设计语言

面向对象程序设计语言很多,在IT行业中最为流行的如:C++、Java和Delphi等语言,而我们的教学中选择了C++,其理由如下。

(1)C语言成为程序设计入门的主导语言。由于C语言在当今系统软件和部分应用软件的开发中具有实用性强的特点,又与硬件和程序设计环境底层的联系紧密,所以当学生具备了一定的数学基础和计算机操作实验基础后,首先认可在某种计算模型(如随机存储计算模型)和软件技术(如编译技术)的支持下,通过C语言的各种基本成分及其功能的了解,学习如何组合各种语言成分来编制完成某项计算的程序,然后完成对某些计算方法和算法的具体实现,从中体会计算机在处理大量计算问题时如何从过程的角度完成具体计算,从而为学习其他计算机基础课程打好基础。

(2)C++与C语言有不可分割的亲情关系。C++是在C语言的基础上演变而来的一种程序设计语言,它不是简单地对C语言作了某些改进,而是在C语言成功的基础上进行了一场革命。C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译及连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点,因而它可以定义为不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。在C++教学中,重点介绍有关面向对象的基本概念、基本方法和基本技术,重点介绍两种语言之间的不同之处,从而实现了程序设计思想、方法和技术从面向过程平稳过渡到变为面向对象,减小了C++的学习难度。

(3)C++可以很容易延伸到其他语言。与C++接近的有Java语言和C#(C Sharp)语言,它们的基本语句大致相同,其功能主要是开发B/S结构的分布式系统。学习这些语言的时候,在C++语言的基础上,从语言理论(只引用结论而不展开论述)和语言比较学的角度出发,放弃语言的共性,重点学习对应语言的个性,这样达到事半功倍的效果。同时引出由于程序设计方法和技术的发展以及高级语言进一步发展带来的需要在程序设计语言中解决的问题,如组件、网页以及通信等应用方面的设计,向学生适当展示高级语言与程序设计广阔的天地,为后续相关课程埋下伏笔。

4 注重提高面向对象的程序设计水平

在引导学生从面向过程程序设计到面向对象程序设计的转变过程中,对于面向对象的一些基本概念(如类、对象、封装、继承和多态),通过同现实生活的事物相对比,学生还是很容易理解的。但是,如何将这些概念应用到面向对象程序设计中,刚开始对于学生来说还是有一定的难度。为了克服这个难题,我们在C++语言的教学中注重了以下几方面内容。

(1)从程序设计的角度理解面向对象的基本概念。例如对象的封装性,我们可以认为是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制。.封装可被理解为是一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问。对包装器内部代码与数据的访问通过一个明确定义的接口来控制。封装代码的好处是每个人都知道怎样访问代码,而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用。在面向对象的程序设计中,最基本的封装单元是类,一个类定义了由一组对象所共享的行为(数据和代码)。一个类的每个对象均包含它所定义的结构与行为,这些对象就好像是一个模子铸造出来的一样,所以对象也叫做类的实例。对于类的封装程度,也是有选择的。类提供关键字public、protected 和private,用于声明哪些数据和函数是公有的、受保护的或者是私有的,用以控制类的封装程度,公有的数据和函数公开必须要让外界知道的内容,而隐藏的是私有的一切内容。对于对象的继承性,是指一个对象从另一个对象中获得属性的过程,它支持按层次分类的概念。如果不使用层次的概念,每个对象需要明确定义各自的全部特征。通过层次分类方式,一个对象只需要在它的类中定义属于它的个性,然后从父类中继承它的共性。因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例。当然,类的继承方式,C++提供了公有和私有的两种选择。

(2)培养面向对象技术分析的抽象思维。抽象是程序设计的基本要素,程序设计者通过抽象描述来实现软件系统。抽象描述的有效方法是使用层次式的分类特性,这种方法允许用户根据物理含义分解一个复杂的系统,把它划分成更容易实现的块。例如,一个计算机系统是一个独立的对象,而在计算机系统内部由几个子系统组成:显示器、键盘、硬盘驱动器、DVD-ROM、软盘、音响等,这些子系统每个又由专门的部件组成。在程序设计中,其中抽象是自顶向下地逐步求精和模块化。自顶向下地逐步求精是指首先要对所设计的系统有一个全面的理解,其次从顶层开始连续地逐层向下分解,直到系统的所有模块都被分解为一条条的详细指令时为止。模块化是指把一个大的程序按照一定的原则划分为若干个相对独立但又相互关联的实体,这些实体就是我们所面向的对象,它们用类来描述定义。

(3)训练面向对象设计的逻辑思维。程序设计的过程也就是对学生的思维进行训练的过程。在许多常规学科的日常教学中我们不难发现这样一个现象,不少学生的思维常常处于混乱的状态。写起文章来前言不搭后语,令人不知所云;解起数学题来步骤混乱,搞不清因果关系。这些都是缺乏逻辑思维训练的结果。程序设计的训练不仅可以让学生养成良好的程序设计习惯,而且可以有效地培养学生思维的条理性和逻辑性。

(4)帮助学生树立系统工程观点。在计算机行业中,软件的设计已经用工程的观念来进行管理。软件设计不再被认为是手工作坊里的个体劳动,而是被当作一项系统工程。软件工程的复杂程度不低于甚至高于诸如建筑工程等其他行业的工程。随着社会信息化进程的不断加速,计算机应用走进各行各业是大势所趋,社会需要大量的计算机高等人才,从而对我们的计算机教育提出了更高要求。我们知道,程序设计是计算机专业的基础,应该从一开始使学生养成一个好习惯,树立正确的软件工程观点。这样做不仅可以为学生将来从事计算机应用打下良好的基础,而且有利于提高学生统筹全局、协调关系的基本能力。

5 大力强化面向对象的可视化程序设计方法

目前,程序设计的观念发生了显著变化,可视化(Visual)技术广泛用于各种程序设计过程,就拿C++来说,就有C++ Builder和Visual C++不同的可视化程序设计语言。这些可视化语言,它们以其图形化的编程方式将面向对象技术的特性完美地体现出来,使得开发软件这一原本枯燥、难以理解的工作变得轻松快捷。作为专业人员不懂得可视化编程技术将无法在竞争激烈的计算机行业中立足,作为计算机学科的教师不传授可视化编程技术将难以满足学生强烈的求知欲望。

从整个IT产业的软件市场来讲,如果要开发高性能的Windows或万维网(WWW)应用程序,Visual C++是一种效率较高的开发工具,几乎所有世界级的软件都是使用Visual C++开发系统完成的。在2002年初,微软公司又推出了Visual C++的最新版本——Visual C++.NET,它继承了以往Visual C++各版本的优点,增加了许多新的特性,使得开发的能力更强、开发的效率更高,深受业内人士青睐,所以我们选择了Visual C++.NET作为可视化程序设计语言。

在学习掌握C++语言的基础上,讲授Visual C++.NET需要重点突出以下内容。

(1)MFC(Microsoft Foundation Class,微软基本类库)。MFC是微软公司为Windows程序员提供的一个面向对象的Windows编程接口,使用它进行Windows应用程序开发具有很大的优越性。首先,MFC提供了一个标准化的结构,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是“站在巨人肩膀上”,充分利用Microsoft开发人员多年开发Windows程序的经验,并可以将这些经验融入到用户自己开发的应用程序中去。我们知道,虽然程序设计者要编写的程序在功能上是千差万别的,但从本质上来讲,都可以归纳为用户交互界面的设计、输入输出文件的操作、多媒体技术的应用以及数据库的访问等一些最常用的技术。这一点正是微软提供MFC类库的最重要原因,在这个类库中包含了一百多个程序开发过程中最常用到的类。在进行程序设计的时候,如果类库中的某个类具有我们所需要的功能,这时我们只要简单地引用该类产生对应对象,然后通过对象调用有关方法就可以了。我们还可以利用面向对象技术中很重要的“继承”方法从类库中的已有类派生出我们自己的类,该类继承了父类的特性和功能,实现了代码重用,并在此基础上还可以根据自己需要加上所需的特性和方法,从而可以快速设计出一个更专业的、功能更强大的类。

(2)消息处理机制。Windows操作系统环境下运行的交互式应用程序,不论采用那一种开发工具,它都具有以消息为基础、由事件驱动的运行机制。事件是外部强加于应用程序的操作动作,它们有可能来自系统,也有可能来自用户。操作系统将捕捉到的事件,按事件的类型和来源采用相应的数据结构描述事件,这种形式称为消息。操作系统将事件翻译成消息之后,接着将消息分发到消息队列中,等待应用程序索取并处理。在Visual C++.NET中,消息可分为窗口消息、命令消息、控件消息和交互对象更新消息,这些不同类型的消息各自都有对应的处理方式。熟悉消息的处理方式和灵活应用消息,对于学生设计交互式应用程序至关重要,因为设计的大多数时间是充分利用各种消息,编写它们对应的处理函数。如果忽视了消息处理机制内容,学生编程序或者无从下手,或者功能简单。

(3)主要应用程序类型的程序结构。Visual C++.NET提供了良好的开发应用程序向导,在向导的指引下,可以自动生成单文档、多文档、对话框和多顶级文档等四种标准类型的应用程序结构,对应结构都是由MFC中的基类派生的类组成的。在教学过程中,深入剖析这四种应用程序结构,有助于提高学生的软件开发能力。例如多文档应用程序结构目前使用越来越普遍,人们熟悉的Microsoft公司的Office系列产品以及Visual系列产品都是典型的多文档应用程序。这种多文档界面具有多窗口的特点,因而人们可以在一个程序中使用多个子窗口来实现不同数据的浏览查看。一般情况下,这四种结构可以满足绝大多数用户的要求,但有时用户也可以通过重载一些函数来修改其缺省的风格,从而在此结构基础上设计加工具有自己个性的应用程序。

(4)对话框的数据交换机制。对话框是应用程序的主要交互方式,它作为一种容器,包含了用于输入输出信息和控制操作的控件,并且大多数控件都有对应的内存变量。Visual C++.NET对于实现控件和变量之间的数据交换有自己的一套独特机制,熟悉这种机制有助于学生深刻理解输入输出数据的来龙去脉。

以上内容如果让学生自学是有一定的难度,所以希望老师重点讲解这些内容,以便学生自学绘图、数据库操作和网络编程等有关专题技术。

6 结束语

目前,计算机程序设计方法在不断地更新,当我们讲授面向对象的程序设计方法时,面向组件和面向服务的新方法就已经产生了。在这种情况下,是不是说面向对象的程序设计方法过时?我认为并不见得过时。就像我们应用面向对象的设计方法时还得应用面向过程的设计方法(如设计消息处理函数)一样,面向组件和面向服务的新方法是在面向对象的基础上发展产生的,服务是组件的容器,组件是对象的容器,最基本的内核还是对象,只不过从软件体系结构的角度来讲,服务和组件相对于对象来说,是形成体系结构的更大力度的结构元素。所以说,讲授好面向对象程序设计方法,是为将来学习面向组件和面向服务的程序设计方法打基础。

参考文献

[1] 谭浩强.C程序设计(第二版)[M].清华大学出版社,2001,8.

[2] 郑莉,董渊.C++语言程序设计(第二版)[M].清华大学出版社,2002,1.

[3] 张海藩,牟永敏.面向对象程序设计实用教程[M].清华大学出版社,2002,6

[4] 王恩德.Visual C++.NET程序设计教程 [M].清华大学出版社,2004,7.

最新文章

版权所有:博古范文网 2012-2024 未经授权禁止复制或建立镜像[博古范文网]所有资源完全免费共享

Powered by 博古范文网 © All Rights Reserved.。浙ICP备12018771号-1