首页 优秀范文 程序设计的基本结构

程序设计的基本结构赏析八篇

时间:2023-08-04 17:18:31

程序设计的基本结构

程序设计的基本结构第1篇

关键词:程序设计基础;数据结构;计算思维;教学衔接

0、引言

程序设计基础与数据结构是计算机类专业的两门专业基础课,在计算机类专业教学中具有举足轻重的作用,都旨在培养学生的编程能力和计算思维能力,并为后续课程打下坚实的专业基础,但在这两门课程的教学过程中,存在一系列问题,严重影响课程的教学效果。笔者分析和研究产生这些实际问题的原因,对这两门课程的知识融合、内容衔接以及教学实践等进行探讨,提出切实可行的解决方案,更好地实现两门课程的教学目标。

1、课程教学内容和教学目标

程序设计基础课程是学生接触的第一门专业基础课,也是进行计算机编程的入门课程。课程的教学目标是使学生掌握程序设计的基本方法,培养其拥有良好的程序设计风格、较强的软件开发能力以及一定的计算思维能力,为后续课程打下良好的基础。

数据结构是继程序设计基础课程之后的一门综合专业基础课,是计算机类专业的核心课程之一,具有举足轻重的作用。它是程序设计基础课程所讲知识的自然延伸和具体应用。对数据结构的理解、掌握和应用拓展,将对学生解决具体实际问题时的数据分析、数据组织、数据处理和编程能力有着深远的影响。课程的教学目标是培养学生缜密的逻辑思维和数据抽象能力以及学生在软件设计领域中科学的计算思维能力,帮助学生将数据结构和算法与具体的编程实现相结合并灵活地应用到实践和工程实际中。

2、两门课程间的关系

从程序与数据结构本身的关系来说,一个好的程序离不开合适的数据结构,而数据结构中算法的实现离不开具体的程序设计。在计算机类专业的课程体系中,数据结构和程序设计基础课程虽然独立开设,但是它们之间的联系是紧密的。在课程设置上,程序设计基础是数据结构的前导课程,两门课程一脉相承,不可分割。

学生对程序设计基础课程的掌握程度、具备的计算思维和编程能力,直接关系到以程序设计语言实现算法的数据结构课程的教学效果。数据结构课程通过创造性思维的训练,重点突出数据抽象与程序抽象能力的培养,从而进一步提升学生的计算思维能力和编程能力,但两门课程在实际教学中存在一些问题,主要原因是课程设置、教学内容、教学方法和教学实践方式等多方面存在缺陷。经分析,对程序设计基础和数据结构课程进行知识整合和内容衔接,采用适当的教学方式,改进教学实践是探讨和研究的主要内容。

3、两门课程在实际教学中存在的衔接问题

3.1 两门课程教学内容的脱离

目前,在实际教学中,程序设计基础和数据结构课程虽然关系紧密,但是一直被设定为两门完全独立的课程,而且教师在制订教学大纲和教学目标时容易忽视两门课程问的联系,在教学过程中出现一些盲区,要么两门课程在教学内容上出现不同程度的交叉,要么出现知识衔接的断层,令学生对两门课程的内在联系没有整体概念和认识,从而导致不能深入系统地学习相关知识。尤其是先行课程序设计基础的教学内容和课程案例完全脱离了数据结构课程,使数据结构中最频繁使用的知识和内容在程序设计基础课程中甚少提及,不能为数据结构课程的讲解打下扎实的程序设计基础。

3.2 程序设计编程语言与数据结构实现语言不一致

程序设计基础课程所教授的编程语言与数据结构教材或实验所使用的实现语言不一致,如将C++语言作为程序设计基础的教授语言,而在数据结构的实现上选择c语言或Java语言,以至于数据结构的理论教学与具体上机编程实现脱节,严重影响了上机实验和课程设计环节。

3.3 程序设计方法与数据结构实现方法不一致

程序设计基础课程中或注重面向过程的程序设计方法,或注重面向对象的程序设计方法,但在数据结构课程中却很难利用前导课程中学到的程序设计方法实现相关的数据结构和算法,从而影响了学生对数据结构课程知识的应用与实现。另一方面,学生在学习过程中没有充分理解数据结构课程的作用和实际意义,以至于在实际项目和问题中不知使用什么方法(面向过程或面向对象)分析解决问题,不知如何运用数据结构知识解决实际问题。

3.4 前导课程对后续课程实践环节的影响

数据结构实验环节相对课堂理论环节较薄弱。此问题的存在多半是因为数据结构具体实现的关键技术在程序设计基础课中未被讲解或强调,在进行数据结构算法从理论到伪代码、再由伪代码到真代码转换的过程中难以真正编程实现,使学生对数据结构的理解和掌握仅停留在抽象层、概念层、理论层,难以上升到实现层,从而影响学生的学习兴趣和积极性。同时,课程中的实践项目过于单一且相对独立,使实践环节与实际项目的联系过于松散,学生运用所学知识解决实际问题的能力和实际工程能力很难得以锻炼。

3.5 缺少计算思维能力的培养,缺乏理论知识与实际应用的联系

提高学生计算思维能力是程序设计基础和数据结构课程共同的目标。计算思维是抽象的多个层次上的思维,而抽象是表达实际的方法。然而,现行教学方法过多关注程序设计和数据结构知识点的讲解,缺乏对学生思维能力的培养。

如果缺乏理论联系实际,那么将影响学生计算思维的培养。数据结构中的知识又太抽象,如果缺乏相应的实际案例对抽象知识加以应用,那么就会导致学生不知道怎样将所学的知识应用到实际中,缺乏具体问题具体分析和解决的能力。

3.6 教师本身知识结构欠缺,上机实践指导教师数量不足

授课教师知识结构的缺乏将导致一些现实问题:如果程序设计基础的教师不懂数据结构,那么其自然不会将相关知识引入课堂,同时也缺乏用所教授的语言具体实现数据结构中结构和算法的能力;如果数据结构的教师缺乏相关编程语言知识,那么就会给上机辅导带来困难。同时,两门课程具有很强的实践性,若上机实践辅导教师不足,将不利于学生编程能力的提升以及相关软件大赛学生的培养和辅导。

针对以上实际教学中存在的问题,可知为提高程序设计基础与数据结构课程的教学效果,根据计算机类专业这两门课程教学内容和目标,对两门课程进行知识整合和内容衔接的必要性,对课程衔接的方法和思路等进行探讨势在必行。同时,课程教学不仅要关注知识的传授,还要培养学生主动获取知识并综合已有知识创造新知识的能力。

4、程序设计基础和数据结构课程衔接的新方法和思路

4.1 做好两门课程教学内容的融合和衔接

教师需紧密结合计算机类专业的培养目标,精心设计程序设计基础和数据结构课程的教学内容,既要满足课程的专业基础性,又要满足后续课程学习的需要,严密制订教学大纲,做好程序设计基础与数据结构教学内容的衔接以及相关教材的选定。

在程序设计基础课程教学中,教师需要关注学生计算思维能力的培养,将重点放在讲解思路上,教学生如何对问题进行抽象,还要介绍一些简单的基础算法和数据结构。程序设计与数据结构的联系过程必须做到循序渐进,若引入的数据结构相关知识过难,会打击学生的学习积极性。例如,教师讲数组时可引入几种数据结构中简单的排序算法冒泡排序、选择排序等;讲完指针和结构体后可引入最基本的数据结构――链表;讲完嵌套函数调用后可引入“递归”,它是数据结构中解决问题的常见思想和算法,可以通过简单的递归函数帮助学生理解递归思想和递归调用过程,这些是理解数据结构中复杂递归函数的基础。在程序设计基础教学中,只讲递归函数的简单应用,而在数据结构教学中,需要介绍递归函数的复杂应用:栈、树、八皇后问题、N个数的全排列等。围绕“递归”这一重要知识点,从易到难并结合课程本身特点进行理论分析,将有益于整合课程教学内容,引导学生循序渐进地学习和思考。

针对在程序设计基础课程中不重要但在数据结构及算法中被广泛使用的知识点,教师需要在讲解程序设计课程时将其点出并告诉学生此知识在后续数据结构课中的重要性,引起学生对该知识点的兴趣和重视,如指针的灵活使用、结构体类型的复杂应用、类型重命名、类的拷贝构造函数(深拷贝)、函数模板、类模版等。

同时,教师要对程序设计基础课程内容进行适当补充和扩充,如增加c++函数模板、类模板的相关知识,为将泛型程序设计、c++的STL引人数据结构课程奠定知识基础,缩小教学知识与实际运用的距离,提高学生的动手编程能力和知识运用能力。

4.2 保证程序设计编程语言与数据结构实现语言的一致

程序设计基础课程所教授的编程语言要与数据结构教材或实验所使用的编程语言一致,这样不仅能大大提高学生的编程能力,还有利于数据结构课程的上机实现。

4.3 将面向对象思想引入程序设计与数据结构中

随着程序设计方法从传统的结构化程序设计演化到面向对象程序设计,数据结构在面向对象程序设计中也将成为面向对象的数据结构,且将随着程序设计理论和技术的发展而不断变化发展。在程序设计基础课程中讲授面向对象的编程语言如c++语言,既可以实现面向过程的数据结构,又能实现面向对象的数据结构。数据结构课程采用面向对象的观点讲授并以C++语言作为算法的描述工具,从而强化数据结构基本知识和面向对象高级程序设计基本能力的双基训练以及实际动手能力培养。在设计数据结构实践项目时,将面向对象的程序设计思想、面向对象的程序设计语言和数据结构课程教学内容恰当地融合,有效整合两门课程中的重叠部分,突出各自的侧重点,符合当前软件设计思想和软件开发趋势。

4.4 加强课程中计算思维能力的培养

在程序设计和数据结构的教学方法上,将面向语法为中心的教学逐渐转变为面向问题求解的教学,从问题出发采用适当的数据结构,将其抽象成解决问题的算法描述,用程序设计语言实现问题求解,使课程从过去的仅讲授孤立的知识点,转变为讲授计算思维和问题求解的过程,从而达到突出思维方法训练的目的。在程序设计基础和数据结构授课时尽量将理论联系实际,将知识点解释和应用为身边容易理解的真实案例。例如,讲“图”时,可以把现在流行的复杂网络、社交网络引入其中;讲解“队列”时,可将春节买票引入其中,让学生从身边的例子理解理论知识的具体应用。对有些案例可以提倡“一题多解”,不局限于一种数据结构、解题思路和实现方法,通过一题多问、一题多解带动学生探索、比较、寻求更好的解决途径,达到学生分析解决问题能力的提高和计算思维能力的培养。

4.5 提升教师能力,配备充足的上机辅导教师

学校要加强程序设计基础与数据结构课程相关授课教师整体能力的提升。教师不仅要掌握自己所教授课程的知识,还要对该课程的前续及后续课程内容有所了解,便于维护教学的整体秩序和融合学生的知识体系。同时,教师要积极参与各种软件大赛和企业培训,将教授的理论知识和实际项目相结合,达到应用知识解决复杂问题的目的。此外,两门课程的上机实践环节要配备足量的辅导教师,不让学生输在编程入门的起跑线上。

4.6 依托程序设计竞赛,提高学生的编程能力

依托全国软件大赛、ACM大赛等程序设计竞赛,将竞赛题目引入程序设计基础和数据结构课堂中。此类题目强调考查学生对各种算法的应用能力,综合性较强,非常适合辅助学生学习和体会数据结构的妙用,提升学生分析和解决实际问题的能力,引导学生将所学知识准确而灵活地运用到实际生活中,大大提高学生的实践动手和程序设计能力,促进其知识的融会贯通。另外,通过竞赛等多种活动可以为学生提供展现程序设计能力的舞台,激发学生学习的主动性,培养其计算思维能力。

例如,在教授程序设计基础时,讲完逻辑表达式和多重循环结构后,可以将大赛中的逻辑推理题目引入教学中并引出常见的解题方法和思路一枚举法,从而加深对枚举法的认识。通过采用数据结构中的双向链表和线性数组两种方式实现大赛中常见的约瑟夫环问题。

4.7 引入OJ平台。加强课程实践环节

引人在线判题(Online Judge,oJ)系统,提高学生的实践能力。能力需要以丰富的知识作为支撑,而实践是能力赖以生长的土壤。在OJ系统中,学生可以在线提交程序源代码,系统对源代码进行编译和执行并通过预先设计的测试数据检验程序源代码的正确性。引入0J系统不仅可以辅助教师批改作业,减轻教师工作压力,还可以促使学生加强平时上机编程练习,通过编程排名方式提高学生的学习兴趣。OJ系统中拥有大量题库,可以让学生进行上机实践,培养自身的计算思维能力,提高编程能力。0J系统不仅可以作为程序设计基础课程的实践平台,还可作为数据结构课程的实践平台。

程序设计的基本结构第2篇

关键词: 高级语言程序设计 流程图 控件 子程序 参数传递

一方面中职学生在初中阶段基础较差,另一方面对于高级语言程序设计的教学不同教材编写者有不同的思路,为了适应中职学生的学习,在教学中如何更便于学生掌握高级语言程序设计,我在长期从事高级语言程序设计教学的过程中摸索出一套针对中职学生教学的组织教材的思路,下面就以Visual Basic语言为教学背景谈谈教材组织,请同行予以批评指正。

首先,让学生熟悉所学的高级语言程序设计的程序结构。不同的高级语言的程序结构的描述过程是不同的,以Visual Basic语言为例,它的程序结构大至如下:

End Sub

因此,让学生熟悉上述的结构描述方法,让它像模板一样印在学生的脑袋中,对于学生对该语言的编写格式的直观认识及后续的学习会起到良好的作用,同时也会为后续学习数据类型、运算符、表达式和常用函数的上机调试扫除障碍。

其次,让学生熟悉所学的高级语言程序设计上机的调试环境和掌握基本的调试步骤。对于程序设计的最终结果是否正确,上机调试是必过的一关,不同的高级语言程序上机的调试环境是不同的,有的调试环境功能单一,有的调试环境功能很多,我认为首先掌握基本的调试功能,再根据需要逐步介绍和掌握调试环境所提供的其他功能,这样更有利于学生学习。以Visual Basic语言为例,我们要求学生首先掌握以下几个技能:建立一个新的工程,打开代码编写环境,保存一个工程,打开已有的工程,知道运行程序,自如查看运行的结果,并从运行结果中返回并重新修改程序。至于Visual Basic语言集成开发环境中所具有的其他功能,则根据具体调试演示时的需要零散分开,并个别介绍,这样学生将掌握得较好。

再次,让学生掌握程序的基本输入、输出语句或函数的功能及用法。程序要进行调试就要有各种各样测试的数据及根据测试数据运行后显示出的测试结果,以验证所编写程序是否正确,这就要求掌握基本的输入输出语句的用法。在Visual Basic语言中,inputbox()函数和print语句的用法就是必须掌握的。通过以上,学生掌握了程序设计的基本“骨架”,以及输入输出语句的用法,就可以进行最简单的顺序结构程序的设计了,从而在较短的时间里体验到成就感,为后继学习树立信心。

另外,在讲解顺序结构程序设计的过程中就要开始逐步地把流程图的识读及使用方法教授给学生。流程图能直观地表示整个程序设计的流程, 程序的编写只是对流程图的一种语句的细化过程,因此看懂流程图既方便程序设计的讲解,又便于学生在课后通过流程图了解程序设计的思路进行复习或思考,从而避免由于对识读程序的困难造成理解上的不便。我曾试图让学生没看流程图而直接通过程序语句来理解程序设计思路,与让学生通过流程图来理解程序设计的思路相比,显然前一种方式对学生来说要困难得多,而且时间长了就很难再理解,而通过流程图显然更容易,即使时间久了重新识读起来也相当容易。

不要把控件的功能及属性单独介绍。以Visual Basic语言为例,很多教材都是以顺序结构、选择结构、循环结构、常用控件的顺序来组织教学,我认为这样让学生感到很枯燥。因为很多实例在内容上涉及许多数学的知识,而学生本来数学基础就很差,这样学生厌学的情绪会增加,既不利于教学,又不利于学生学习。因此在教学中应把后面要掌握的控件分别有意识地穿插在顺序结构、选择结构、循环结构课堂的实例中,让学生生动地用各种控件结合顺序结构、选择结构、循环结构程序实例来学习程序设计。一方面,学生不仅有浓厚的兴趣而且很容易体验到成功的喜悦,另一方面又联系紧密、节省课时。当然这样穿插教学,程序样例的选择就非常关键,每个样例都要精挑细选,每节新课牵涉到的控件以1~2个为宜,否则控件太多的话就会造成课堂时间不足,学生掌握得也不好。

最后就是子程序与参数的传递要放在该门课程快结束时再介绍。这部分内容对学生来说相对较难,特别是参数传递,若在学生还未掌握好程序设计或程序设计还不熟练时就介绍,学生就会思路混乱,从而增加学习难度。若学生都已经能熟练地进行程序设计,在此基础上再进一步地增加子程序与参数的传递的知识,就会锦上添花,学生和老师都会有事半功倍的体验。

当然,对于教材中的其他内容,则基本上根据教材编写的既定内容进行讲授。以上是我在高级语言程序设计教学中的体会,至于是否适应其他老师的课堂教学要求,还要在实际教学中进一步探讨。

参考文献:

程序设计的基本结构第3篇

关键词:C++;面向对象;程序设计;类;教学方法

中图分类号: TP311 文献标识码:A 文章编号:1009-3044(2015)34-0118-03

Abstract: There are lots of knowledge points included in the course, C++ Object-Oriented programming, which makes it hard for students to grasp the key ideas of it. This paper introduces the teaching methods in the course to elaborates the key points like classes and their inheritance mechanism, and explains the difficult points like constructors, operators, etc step by step by focusing on examples, which facilitates the comprehension of students. This teaching method has been successfully applied in the course, and a good result has been obtained.

Key words: C++; object-oriented; programming; classes; teaching methods

1 概述

“C++面向对象程序设计”是计算机专业学生一门重要的专业基础课,学生在掌握C++结构化程序设计的基础上,通过这门课程的学习,进一步掌握C++面向对象程序设计的基础知识。

由于“C++面向对象程序设计”涉及的知识点非常多,初学者很难在短时间内领会面向对象程序设计的核心思想,在面对实际问题时,难以用面向对象程序设计的方法构建出合理的程序框架。

因此在“C++面向对象程序设计”课程的教学中,需要抓住重点,理清难点。对类的概念、继承的机制等关键知识点着重阐述,使学生掌握面向对象程序的基本结构;针对难点问题,如构造函数与运算符重载等,结合具体实例,由浅入深进行分析,使学生掌握面向对象程序设计的基本方法。

2 建立类的概念

类的概念是面向对象程序设计的基础,体现了面向对象程序设计的两大特性,即抽象性与封装性。

在进行结构化程序设计时,根据题目要求,先设计函数,再在主函数中定义变量,存放原始数据,之后调用函数进行处理操作,最后输出结果。

在进行面向对象程序设计时,要先根据题目要求设计类,再在主函数中定义类对象,存放待处理数据,接着调用类的成员函数实现处理操作并输出结果。

因此类的设计是进行面向对象程序设计的关键步骤。在介绍类的设计时,先从一个简单的类――学生类入手,使学生对类的概念有一个初步的了解。在此基础上,再将一些C++结构化程序设计的经典例题,如求给定范围素数、一维数组应用、二维数组应用等,改用面向对象程序设计的方法去实现,使学生进一步了解类的设计过程,能够根据题目要求,确定类中的数据成员及成员函数,从而掌握类设计的基本方法。

在完成类设计的基础上,进一步掌握类的应用,即定义类对象和调用类的成员函数,从而掌握面对象程序设计的基本步骤。

3 理解类的继承机制

类的继承性是面向对象程序设计的重要特性。通过类的继承机制,实现了软件代码的重用。

在讲述单继承时,先通过简单的例题,例如学生类,介绍单继承的概念,继承的方式,派生类从基类继承成员的访问属性,以及在派生类中如何新增成员和改写基类已有的成员,派生类构造函数及析构函数的执行过程。

再通过较复杂的例题,例如图形类,进一步介绍如何根据题目要求,设计基类及派生类,如何确定基类及派生类的数据成员及成员函数,如何定义基类及派生类的构造函数等。

在讲述多重继承时,通过简单的例题,例如家具类,介绍多重继承的概念,继承的方式,派生类构造函数及析构函数的执行过程,多重继承的二义性问题以及二义性问题的解决方法――虚拟继承等。

由于给出具体实例,使学生对复杂的继承机制有了直观的了解,在解决实际问题时,能够根据要求,建立基类,并由基类派生子类,实现软件代码的复用。

4 难点问题的分析

C++面向对象程序设计的基础知识中有一些概念比较复杂,难以理解。可以通过一些简单的例题,分步骤说明概念的含义,提高学生对复杂概念的理解能力。

4.1 类对象的初始化

定义类对象时,会自动调用类的构造函数实现类对象的初始化。构造函数的概念中,复制构造函数、类继承中构造函数的执行过程,是构造函数概念的难点。

4.1.1复制构造函数

复制构造函数可以将一个已有对象的值赋给一个新对象。如不定义复制构造函数,系统提供默认的复制构造函数,而默认复制构造函数只能实现浅复制,如要实现深复制,就需要自定义复制构造函数。

在讲述复制构造函数时,先通过学生类例题,分析复制构造函数的特点,以及调用复制构造函数的各种情况,再修改类中的普通构造函数,在该函数中申请一定的内存资源。通过查看运行结果中的错误,分析出现错误的原因及解决的办法,之后修改已有的复制构造函数,增加代码,实现深复制,最终程序能够正常运行。通过一系列的分析,学生知道了在什么情况下需要实现深复制,以及实现深复制的方法,加深了对概念的理解和记忆。

学生类例题的主要代码如下。

class Student

{public:

Student(long nu=0,char na[]="noname"):num(nu)

{ name=new char[20]; strcpy(name,na); }

Student(const Student& s):num(s.num) //复制构造函数定义

{ name=new char[20]; strcpy(name,s.name);} //实现深复制

void show()

{ cout

private:

long num;

char *name;

};

void func(Student st3) //按值传递参数时调用复制构造函数

{ st3.show();}

int main()

{ Student st1(1001,"Zhang"),st2(st1); //定义对象时调用复制构造函数

st2.show(); func(st2); return 0;}

4.1.2 类继承时构造函数的执行过程

定义派生类对象时,自动调用派生类的构造函数。由于存在单继承、多重继承、虚拟继承以及对象数据成员等多种情况,分析类继承时构造函数的执行过程,需要分以下5种情况,通过例题分别加以讨论。

⑴ 单继承时派生类构造函数的执行过程

在学生类例题中,使学生类派生出大学生类,再定义大学生类对象,通过查看运行结果,使学生看到基类构造函数及派生类构造函数的执行顺序,进而介绍当基类构造函数带有参数时,派生类构造函数如何向它传递实际参数。

⑵ 单继承时派生类中有对象数据成员时构造函数的执行过程

在大学生类中,增加对象数据成员,即教师类对象,通过该例题,使学生看到定义派生类对象时,基类构造函数、对象成员构造函数、派生类构造函数的执行顺序,进而介绍派生类构造函数如何向对象数据成员的构造函数传递实际参数。

⑶ 多重继承时派生类构造函数的执行过程

通过家具类例题,使学生看到定义派生类对象时,多个基类构造函数以及派生类构造函数的执行顺序。

⑷ 虚拟继承时派生类构造函数的执行过程

通过家具类例题,使学生看到定义派生类对象时,虚基类及直接基类构造函数、派生类构造函数的执行顺序,进而介绍派生类构造函数如何向虚基类构造函数传递实际参数。

⑸ 多重继承时既有虚拟继承也有非虚拟继承时派生类构造函数的执行过程

通过例题,使学生看到定义派生类对象时,虚基类、非虚基类构造函数以及派生类构造函数的执行顺序。

通过以上分步骤讲解,使学生对比较复杂的构造函数的执行过程有直观、清晰的认识。

4.2 类对象的运算

运算符重载是面向对象程序设计中比较重要的概念。通过重载运算符,可以使C++已有的运算符能够用于类对象的运算。

重载双目运算符时,由于存在对象与对象的运算、对象与基本类型数据的运算,以及基本类型数据与对象的运算3种情况,若要定义3个运算符重载函数实现这3种运算,则比较繁琐。对后2种情况,可以通过定义转换构造函数或重载类型转换运算符,将两种不同类型的操作数转换为同一类型数据再进行运算。

⑴ 将基本类型数据转换为对象

利用转换构造函数,可以将基本类型数据转换为类对象。介绍转换构造函数时,通过复数类例题,讲清楚在类中定义转换构造函数的方法,以及转换构造函数与运算符重载函数配合使用,实现基本类型数据与类对象运算的过程。主要代码如下。

class Complex

{public:

Complex(double r=0,double i=0):real(r),imag(i)

{ }

Complex(double r):real(r),imag(0){} //转换构造函数

void show()

{ cout

friend Complex operator+(Complex rr1,Complex rr2);

private:

double real,imag;

};

Complex operator+(Complex rr1,Complex rr2) //运算符重载函数,参数应为对象

{ return Complex(rr1.real+rr2.real,rr1.imag+rr2.imag);}

int main()

{ Complex c1(3,5),c2(4.1,10),c3;

c3=10+c2; c3.show(); return 0; //将基本类型数据转换为对象

}

⑵ 将对象转换为基本类型数据

将上面的例题进行改写,在复数类中增加类型转换运算符重载函数,并将加法运算符重载函数去掉,则可将类对象转换为基本类型数据,再通过基本类型数据之间的运算得到结果。主要代码如下。

class Complex

{public:

Complex(double r=0,double i=0):real(r),imag(i)

{ }

Complex(double r):real(r),imag(0){}

operator double() //重载类型转换运算符

{ return real; }

void show()

{ cout

private:

double real,imag;

};

int main()

{ Complex c1(3,5),c2(4.1,10);

double d=10+c2; cout

4.3 类的多态性

类的多态性即动态多态性,是面向对象程序设计的重要特性。类的多态性是通过虚函数来实现的。

通过简单的图形类,介绍如何定义虚函数,及如何通过虚函数实现动态多态性。通过查看运行结果,比较未实现多态以及实现多态后的效果,使学生对虚函数实现多态有一个直观认识。在此基础上,进而介绍纯虚函数及抽象类。

5 结束语

在“C++面向对象程序设计”课程的教学中,通过对类的抽象性、封装性、继承性等重要知识点详细阐述,以及对难点问题,合理使用例题分步骤进行讲解,由浅入深,提高了学生学习的积极性和学习效率,使学生能在短时间内掌握面向对象程序设计的基本概念和基础知识,取得了较好的教学效果。

参考文献:

[1] 谭浩强. C++面向对象程序设计(第2版)[M].北京:清华大学出版社,2014.

[2] 钱能. C++程序设计教程[M].北京:清华大学出版社,2005.

[3] 郭小燕.论“面向对象程序设计(C++)”课程的教学设计[J].现代计算机,2011(8):21-24.

[4] 陈丛.高级语言程序设计教学方法探讨[J].电脑知识与技术,2012(12):8192-8193.

[5] 柳宏川,宋伟.以“类”为中心进行C++程序设计教学[J].福建电脑,2011(1):189-190.

[6] 邢翠芳,张燕红,杜晶.《面向对象程序设计》课程教学思路探讨[J].现代计算机,2013(5):44-46.

程序设计的基本结构第4篇

关键词:认知教学;组织;粒化;因果;计算机程序设计

作者简介:彭珍(1981-),女,山东东明人,华北科技学院计算机学院,讲师。(北京 101601)吴立锋(1978-),男,河北隆尧人,首都师范大学信息工程学院,讲师。(北京100048)

基金项目:本文系华北科技学院教育科学研究2011年指导类课题“计算机程序设计课程教学方法的研究”、华北科技学院试题库项目“《C++与面向对象程序设计》试题库建设”、首都师范大学青年教师教学研究项目“以培养能力为核心的《ACCESS 数据库》课程教学方法的研究与探索”的研究成果。

中图分类号:G642     文献标识码:A     文章编号:1007-0079(2012)11-0059-02

目前已有的问题教学、[1]任务驱动教学、[2]案例教学、[3]引导教学等都侧重于教学形式与手段的变新与改革,[4]很少从教授内容的本质出发,研究教学内容的认知规律。为此,本文基于教学赖以存在和发展的认知机理,提出一种新的认知教学方法,条理地、逻辑地、系统地组织教学内容,符合学生学习思维的逻辑认知过程。

“程序设计”是计算机领域中一门重要的软件技术,是其他软件技术的基础。“程序设计”课程是伴随着计算机应用和程序设计语言的发展而发展起来的一门重要学科,已发展成为计算机专业中重要的专业必修课程,在高等教育中确立了不可缺少的公共基础课的地位。作为使用和开发计算机的重要工具,程序设计课程具备统一的抽象与规律。

本文将这种认知教学应用于“计算机程序设计”课程的教学过程中,有组织、有规律地将该课程的教学内容贯穿始终,为学生掌握程序设计方法、提高学生程序设计能力与逻辑思维能力打下坚实基础。

一、认知教学的概述

本文提出的认知教学是基于Zadeh的认知原理,Zadeh将人类的认知概括为:[5]组织(organization)、粒化(granulation)和因果(causation)。“组织”指从部分合并为整体,“粒化”指将整体分解为部分,“因果”指原因和结果的关联。前两者可看作互拟的过程,因果结构是一切知识的共性,它是对知识的一种本质抽象,因果有直接因果关系和间接因果关系,也有潜在因果关系和真实因果关系。所谓潜在因果关系是指一个具有普遍适应范围的概括性的因果规律,表示给定一定的条件,原因X的满足将引起结果Y的满足;而真实的因果关系则是在一个特定情形下实际发生的事实,即X和Y事实上发生了,而且是因果相关的。在知识表示的层次上,教师所研究的是潜在因果关系,真实因果关系可以看作是潜在因果关系在某一特定情形下的一个实例。人类认知事物是从事物的不同侧面、不同层次上认知事物的本质,将复杂的信息结构化(粒化),然后研究在不同结构层次上新事物具有的特性和不同侧面或层次上新事物特征之间的关系,进而从本质上全面认知事物。

认知教学,就是按照人类认知事物的规律进行教授知识,即将教学知识组织、粒化、因果化,从而使得学生抓住知识的本质、全面地掌握知识。这里,组织可以理解为对知识宏观的掌控,粒化是对知识微观的演化,因果则是知识之间的关联。因此,认知教学能够条理地、逻辑地、系统地组织教学内容,是一种符合学生学习逻辑认知过程的科学方法。

二、计算机程序设计课程

几乎所有高等学校的每个专业的学生都要学习诸如C、VB或VF语言这样的程序设计课程(必修课程),而且随着各具特色的高级程序设计语言(C++、Java等)及网页程序设计语言(JSP、等)的不断涌现,程序设计课程是高等教育中不可缺少的公共基础课,而且已成为计算机专业的一门独立必修专业课程。程序设计是大学生必备的一种计算机技能,更重要的是对其思维的特殊训练和对其智慧的重大挑战。

“计算机程序设计”课程主要是学习如何用某种计算机语言编写程序来解决问题。程序=数据结构+算法,所以程序设计的本质就是设计出合理的数据结构与算法。

根据软件工程理论,[6]程序设计大致可以分为结构化程序设计(Structured Programming,SP)、面向对象程序设计(Object-Oriented Programming,OOP)、面向数据结构的程序设计(Jackson System Development,JSP),国内主要用的是前两种程序设计方法。

同一类型的计算机程序设计有若干不同程序设计语言,同一类型的语言采用的数据结构大致相同,比如结构化程序设计语言采用的数据结构绝大多数是基本数据类型,还有其他构造类型如结构体等;面向对象程序设计语言主要采用的数据结构则是类,其中还涉及继承机制等。因此,程序设计课程首先介绍的都是数据结构,在程序中体现在数据的定义上。

算法的设计与具体问题有着密切的关系,但无外乎是对数据结构的操作,比如输入、计算与输出。其中计算最为复杂,可能是函数,或标准的表达式语句,或带有顺序、选择、循环结构的混合。因此,程序设计课程中的重点和难点都在算法部分。

三、认知教学在计算机程序设计课程中的应用

根据计算机程序设计课程的抽象特征,拟从以下几个方面将认知教学应用于计算机程序设计课程中。

按照数据结构+算法的思路将计算机程序设计教学知识合理组织在一起,形成程序设计知识的宏观体系结构;对宏观架构中的每一个知识点进行细化,即构建出每一知识点的微观结构;搭建宏观知识点之间、微观知识点之间以及相互的关联。

以“C程序设计”课程为例,[7]图1概括了C程序设计的所有知识点,形成了一个多层次、逐层深入的组织结构。每一层次可以看作其上层的粒化,每一层次与其上层和下层都有直接或间接的因果关系,同层次知识点之间也存在因果关系。比如定义数据、输入数据、计算数据和输出数据构成了程序的基本步骤,前一步是后一步的基础和条件;比如定义数据中的基本数组类型是所有定义的基础,为了存储多个有序数据(同一类型)形成了构造性数据即数组;为了存储不同类型的数据才有了构造型数据即结构体和共用体;为了便于表达更为复杂的数据结构及方便有效地使用数据提出了指针,所以在定义数据中各部分之间存在着关联。

最底层中的知识点还可以进一步深入细化。“C程序设计”课程中,有关数组的认知体系以包含10个整型数据的一维(10*10二维)数组、字符数组为例,如图2所示。数组认知按照数组的组成和编程的思路分别从纵向和横向展开。纵向坐标:一维数组、二维数组和字符数组,一维数组是二维与字符数组的基础,二维数组又是二维字符数组的基础;横向坐标:定义、输入、计算和输出数组。特别地,(一维)字符数组的输入/输出的因果关系来看,它采用类似于一维数组的输入/输出方法,将输入/输出格式中的%d改为%c,进一步可以简单地采用%s格式输入/输出(去除了循环结构),更进一步采用函数gets/puts调用来完成。

四、结束语

科学的教学方法应该遵循教学赖以存在和发展的认知机理和学生学习思维的逻辑认知过程,认知教学即从牢牢抓住教学本质出发,深化知识的组织、粒化与因果关系,将所有知识融为一体,尤其对于程序设计,这类逻辑性强的课程,该方法更适合。本文以“C程序设计”课程为例,阐述了认知的应用,并通过实际教学,验证了该方法的有效性。

参考文献:

[1]罗祖兵.教育学问题教学:涵义、价值与操作[J].高等教育研究,2010,31(3):71-75.

[2]王春婷.浅谈任务驱动教学法在计算机教学中的应用[J].太原大学教育学院学报,2011,(2):103-105.

[3]赵月坤,高常.案例教学法在数学教学实践中的应用[J].中国成人教育,2011,(15):162-163.

[4]陈越,何钦铭.计算机专业研究型课程教学模式与创新能力培养的探索[J].计算机教育,2009,(24):99-101.

[5]Zadeh L.Some reflections on soft computing,granular computing and their roles in the conception,design and utilization of information/intelligent systems[J].Soft Computing,1998,(2):23-25.

程序设计的基本结构第5篇

毕业设计开题报告1.课题名称:

钢筋混凝土多层、多跨框架软件开发

2.项目研究背景:

所要编写的结构程序是混凝土的框架结构的设计,建筑指各种房屋及其附属的构筑物。建筑结构是在建筑中,由若干构件,即组成结构的单元如梁、板、柱等,连接而构成的能承受作用(或称荷载)的平面或空间体系。

编写算例使用建设部最新出台的《混凝土结构设计规范》gb50010-2002,该规范与原混凝土结构设计规范gbj10-89相比,新增内容约占15%,有重大修订的内容约占35%,保持和基本保持原规范内容的部分约占50%,规范全面总结了原规范实施以来的实践经验,借鉴了国外先进标准技术。

3.项目研究意义:

建筑中,结构是为建筑物提供安全可靠、经久耐用、节能节材、满足建筑功能的一个重要组成部分,它与建筑材料、制品、施工的工业化水平密切相关,对发展新技术。新材料,提高机械化、自动化水平有着重要的促进作用。

由于结构计算牵扯的数学公式较多,并且所涉及的规范和标准很零碎。并且计算量非常之大,近年来,随着经济进一步发展,城市人口集中、用地紧张以及商业竞争的激烈化,更加剧了房屋设计的复杂性,许多多高层建筑不断的被建造。这些建筑无论从时间上还是从劳动量上,都客观的需要计算机程序的辅助设计。这样,结构软件开发就显得尤为重要。

一栋建筑的结构设计是否合理,主要取决于结构体系、结构布置、构件的截面尺寸、材料强度等级以及主要机构构造是否合理。这些问题已经正确解决,结构计算、施工图的绘制、则是另令人辛苦的具体程序设计工作了,因此原来在学校使用的手算方法,将被运用到具体的程序代码中去,精力就不仅集中在怎样利用所学的结构知识来设计出做法,还要想到如何把这些做法用代码来实现,

第一diyifanwen.com整理该文章……

4.文献研究概况

在不同类型的结构设计中有些内容是一样的,做框架结构设计时关键是要减少漏项、减少差错,计算机也是如此的。

建筑结构设计统一标准(gbj68-84)该标准是为了合理地统一各类材料的建筑结构设计的基本原则,是制定工业与民用建筑结构荷载规范、钢结构、薄壁型钢结构、混凝土结构、砌体结构、木结构等设计规范以及地基基础和建筑抗震等设计规范应遵守的准则,这些规范均应按本标准的要求制定相应的具体规定。制定其它土木工程结构设计规范时,可参照此标准规定的原则。本标准适用于建筑物(包括一般构筑物)的整个结构,以及组成结构的构件和基础;适用于结构的使用阶段,以及结构构件的制作、运输与安装等施工阶段。本标准引进了现代结构可靠性设计理论,采用以概率理论为基础的极限状态设计方法分析确定,即将各种影响结构可靠性的因素都视为随机变量,使设计的概念和方法都建立在统计数学的基础上,并以主要根据统计分析确定的失效概率来度量结构的可靠性,属于“概率设计法”,这是设计思想上的重要演进。这也是当代国际上工程结构设计方法发展的总趋势,而我国在设计规范(或标准)中采用概率极限状态设计法是迄今为止采用最广泛的国家。

结构的作用效应常见的作用效应有:

1.内力。

轴向力,即作用引起的结构或构件某一正截面上的法向拉力或压力;

剪力,即作用引起的结构或构件某一截面上的切向力;

弯矩,即作用引起的结构或构件某一截面上的内力矩;

扭矩,即作用引起的结构或构件某一截面上的剪力构成的力偶矩。

2.应力。如正应力、剪应力、主应力等。

3.位移。作用引起的结构或构件中某点位变(线位移)或某线段方向的改变(角位移)。

4.挠度。构件轴线或中面上某点在弯短作用平面内垂直于轴线或中面的线位移。

5.变形。作用引起的结构或构件中各点间的相对位移。变形分为弹性变形和塑性变形。

6.应变:如线应变、剪应变和主应变等。

极限状态整个结构或结构的一部分超过某一特定状态就不能满足设计规定的某一功能要求,此特定状态称为该功能的极限状态。极限状态可分为两类:

1.承载能力极限状态。结构或结构构件达到最大承载能力或达到不适于继续承载的变形的极限状态:

(1)整个结构或结构的一部分作为刚体失去平衡(如倾覆等);

(2)结构构件或连接因材料强度被超过而破坏(包括疲劳破坏),或因过度的塑性变形而不适于继续承载;(3)结构转变为机动体系;

(4)结构或结构构件丧失稳定(如压屈等)。

2.正常使用极限状态。结构或结构构件达到使用功能上允许的某一限值的极限状态。出现下列状态之一时,即认为超过了正常使用极限状态:

(1)影响正常使用或外观的变形;

(2)影响正常使用或耐久性能的局部损坏(包括裂缝);

(3)影响正常使用的振动;(4)影响正常使用的其它特定状态。

结构设计的基本任务,是在结构的可靠与经济之间选择一种合理的平衡,力求以最低的代价,使所建造的结构在规定的条件下和规定的使用期限内,能满足预定的安全性、适用性和耐久性等功能要求。为达到这个目的,人们采用过多种设计方法。以现代观点看,可划分为定值设计法和概率设计法两大类。

1.定值设计法。将影响结构可靠度的主要因素(如荷载、材料强度、几何参数、计算公式精度等)看作非随机变量,而且采用以经验为主确定的安全系数来度量结构可靠性的设计方法,即确定性方法。此方法要求任何情况下结构的荷载效应s(内力、变形、裂缝宽度等)不应大于结构抗力r(强度、刚度、抗裂度等),即s≤r。在20世纪70年代中期前,我国和国外主要都采用这种方法。

2.概率设计法:将影响结构可靠度的主要因素看作随机变量,而且采用以统计为主确定的失效概率或可靠指标来度量结构可靠性的设计方法,即非确定性方法。此方法要求按概率观念来设计结构,也就是出现结构荷载效应3大于结构抗力r(s>r)的概率应小于某个可以接受的规定值。这种方法是20世纪40年代提出来的,至70年代后期在国际上已进入实用阶段。我国自80年代中期,结构设计方法开始由定值法向概率法过渡。

面向对象编程

使创建windows程序较为容易的关键技术是面向对象编程,或oop。这种技术可以创建可重用组建,它是程序的组成模块。

几个定义

控件提供程序可见界面的可重用对象。控件的示例有文本框、标签和命令按钮。

事件由用户或操作系统引发的动作。事件的示例有击键、单击鼠标、一段时间的限制,或从端口接收数据。

方法嵌入在对象定义中的程序代码,它定义对象怎样处理信息并响应某事件。例如,数据库对象有打开纪录集并从一个记录移动到另一个记录的方法。

对象程序的基本元素,它含有定义其特征的属性,定义其任务和识别它可以响应的事件的方法。控件和窗体是visualbasic中所有对象的示例。

过程为完成任务而编写的代码段。过程通常用于响应特定的事件。

属性对象的特征,如尺寸、位置、颜色或文本。属性决定对象的外观,有时也决定对象的行为。属性也用于为对象提供数据和从对象取回信息。

5.设计主要内容

本软件适用于现浇钢筋混凝土多层、多跨的框架的设计。毕业设计要完成的工作包括:

1.平面钢架分析程序的改造

对结构力学教研室版平面钢架分析程序进行修改和补充。要求:

(1)编写自动生成节点坐标和单元节点编号的程序,或以图形方式输入计算简图。

(2)修改程序,使之适合多工况内力计算;(3)根据输入、输出数据的特点,设计适当的人机界面。输出应可选的显示各构件端力和内力图。

2.编写钢筋混凝土多层多跨框架机构的构件设计程序

(1)根据有关的规范,应明确计算的各种荷载(恒载、楼屋面活载、风荷载和地震作用等)的计算方法,在次基础上编写自动生成各种荷载作用下的结点荷载和单元荷载的程序。

地震作用按底部剪力法确定。自振周期用经验公式确定。

(2)计算各种荷载单独作用时框架各杆件的内力。计算结构存放在各自的杆端力(随机)文件中。

对竖向荷载下的梁端弯距进行塑性调幅。

(3)在(2)中产生的杆端力文件基础上,分别计算各种可能的荷载组合下,梁、柱控制截面的内力。计算结果存放在适当的文件中。

(4)从(3)生成的文件中选出最不利组合,同时给出截面配筋。

梁、柱截面配筋的确定应考虑抗震设计的要求。

(5)部分编程较熟练的同学可根据计算结果和构造规定,用auto-cadvba绘制梁、柱配筋图。

5.成果形式

本毕业设计的成果应包括:

1.可运行的、并能给出正确计算结果的源程序

在存放源程序的软盘中,应至少有一个算例的数据文件,可在基本不需另外键入数据的前提下,显示正确地运行结果。

2.软件使用手册

这是为用户准备的关于软件使用方法、操作步骤和其他必要的文字材料。

3.软件说明书

这是软件作者的工作档案,是软件维护的基本资料。其中应包括:

(1)软件所依据的工作档案、力学和工程结构模型的较为详细的描述,主要的计算公式及其使用的符号的含义,重要算法的文字说明:

(2)程序的结构:模块的划分的情况、各模块相互之间的关系及各模块的功能;

(3)带有较为详细的注释的源程序文本。其中应注明各标识符的含义(尽可能的采用通用公式中的符号)。各程序段的功能、相应的数学公式和特殊算法的说明;(4)为使他人根据软件说明书读懂你的程序所必需的其他资料。

(5)部分编程较熟练的同学可递交梁、柱配筋图纸一张。

4.对自己所编程序的评价

(1)对算例计算结果的合理性进行必要的分析;

(2)总结软件设计过程中的经验和及教训,提出设计改进意见。

以上各项资料处源程序文本以软盘形式提交外,其余均用计算机打印。

6.进度计划

第一周毕业实习,参观工程,收集资料。

第二周需求分析:描述计算机模型,编些初步的软件说明书。

第三周软件设计:选择模块划分的方案

第四周模块设计:数据输入界面设计(梁柱截面数据)

或数据输入界面设计(可视化图形输入)

第五周数据输入界面设计(框架数据、附加荷载)

第六周模块设计:荷载计算(恒载、活载),相应的内力计算

第七周荷载计算(风荷载、地震作用),相应的内力计算

第八周模块设计:梁配筋计算

第九周梁荷载组合,确定梁配筋

第十周梁荷载组合,确定梁配筋

第十一周模块设计:柱配筋计算

第十二周柱荷载组合,确定柱配筋

第十三周柱荷载组合,确定柱配筋

第十四周软件测试或用autocadvba绘制梁、柱配筋图;

第十五周软件测试

第十六周整理源程序,编写软件说明数和用户手册

程序设计的基本结构第6篇

关键词:Java语言;面向对象程序设计;教学难点

中图分类号:G642 文献标识码:B

1引言

由于Java语言本身所具备的跨平台、多线程、垃圾收集等优点,以及基于J2EE的企业级应用的大规模开发,Java语言已成为主流的计算机程序设计语言之一[1-3]。目前,基于Java语言的网络资源急剧增加,大量的开源软件通过Java语言开发,因此,掌握Java语言已经成为计算机专业学生的必然要求。

计算机专业开设Java程序设计课程基本上分为两种情况:(1)将Java语言作为学生学习的第一种程序设计语言;(2)将Java语言作为C语言等程序设计语言之后的后续语言。我们学校计算机专业本科生首先在一年级学习C程序设计以及数据结构,然后在二年级学习Java程序设计。因此,我们的教学实践活动主要针对第二种情况。本文根据作者近五年的Java程序设计教学实践所积累的经验,阐述如何引导学生完成从面向过程到面向对象程序设计的重大转变。

2学生技能背景与授课重点难点

由于经过一年多的C语言编程训练,这些学生已经具备一定的面向过程的程序设计能力。由于Java语言在基本语法上与C语言非常类似。因此,讲授Java程序设计的侧重点不在于基本语法,而是在于面向对象程序设计能力的培养上。

对于具有一定C程序设计能力的学生,虽然已经掌握了一定的编程方法,但是学习Java程序设计仍然需要克服许多困难。由于以前的程序设计一般侧重于通过C语言设计一个算法,并以此来解决某个简单的问题。由于这些问题规模很小,程序一般仅需要1个或者少数几个函数,因此他们往往将计算机程序设计理解为编写几个函数,并不能深刻理解程序设计方法中的许多思想(比如模块化、代码重用等)。

由于在讲授Java语言时,采用的例子程序往往也非常简单,一般采用面向过程的C程序也可以解决,因此,他们往往质疑Java程序设计是将简单问题复杂化。由于在教学时一般不能过多采用复杂的案例,因此必须在教学过程中充分说明每个例子所体现的程序设计思想,而不是仅仅通过算法解决某个简单问题。

我们认为,讲授Java程序设计的重点与难点都在于如何将学生的程序设计思维从面向过程转变为面向对象。通过合理组织Java程序设计教学内容,将学生从面向过程的编程思维逐步转变为面向对象编程思维,并理解和掌握面向对象编程的继承、多态、封装等技术特点;在教学进度安排上,将从学生最熟悉的C程序面向过程编程方式开始,逐步引导过渡到Java面向对象程序设计,按照先后次序包括Java程序设计入门、类的设计、继承与多态等步骤。

3Java程序设计入门

对于具备C语言程序设计经验的学生而言,Java程序设计入门并不困难。由于Java语言的基本语法与C语言非常相似,因此这一部分教学内容的侧重于说明Java语言基本语法、数据类型、程序结构等方面与C语言的不同之处。这部分内容的教学目标包括:(1)使学生能够编写简单的Java程序;(2)使学生能够使用Java类库中的类进行编程,掌握如何创建类的对象,如何使用类中的方法,以及如何导入包中的类等。

事实上,许多人在讲授Java程序设计入门时,往往强调上述教学目标的第一点,即让学生了解Java程序结构特点,能够编写简单的Java程序即可,然后直接介绍Java类的设计。然而根据我们近五年的Java程序设计教学经验,上述教学组织方式知识跨度较大,不适合于基础较差的学生。相反,让学生多使用Java类库中的类进行编程,能够在一定程度上了解Java类的特点以及常用术语,从而为Java类的设计提供良好基础,避免学生在开始阶段就过多纠缠于类设计的细节。学生在使用Java类进行编程时,还未涉及面向对象的程序设计思想,他们可以使用熟悉的面向过程程序设计思想进行编程。只不过在C语言中他们需要写多个函数,而在Java语言中需要将这些函数(即Java语言的方法)放入到某个类中。

这部分教学的主要内容如下:

(1)Java应用程序结构

大部分教材都通过一个类似于输出“HelloWorld”的例子,说明如何编写一个可以独立运行的类。教学经验告诉我们,这种方式效果很好。通过比较Java应用程序结构与C语言主函数的异同之处,学生能够理解Java类的静态主方法,很快就可以学会编写一个简单的Java程序。

(2) 基本语法与数据类型

由于Java语言的基本语法与数据类型与C语言非常类似,所以教学的重点是突出两个语言的数据类型的不同之处,包括以下几点:

 boolean类型:Java语言提供8种基本数据类型,其中boolean类型是Java所特有的数据类型,它拥有两种取值true或false。在C语言中,往往通过0或者1来表示true还是false,但是对于Java语言将不再允许通过数字来表示true或者false。比如,在C语言中,可以使用if(1){},而在Java语言中,必须使用if(true){}

 char类型:Java语言的char类型不同于C语言中的char类型。由于Java语言使用Unicode编码,所以char类型是两个字节长度。而对于标准C语言,char是1个字节长度。

 数组类型: Java中的数组是对象类型,必须先创建对象才能使用。声明一个长度为10的int类型数组,对于C语言用int a[10],而在Java中必须用int[] a = new int[10]。

教学经验表明,上述三种数据类型是具备C语言编程经验的Java初学者最容易犯错误的地方,尤其是boolean与数组类型。由于Java语言与C语言的语法与数据类型过于相似,两者容易混淆,必须通过大量的例子和训练强化它们的不同之处。

(3) 使用Java类库编程

学生掌握了Java语言基本语法之后,可以开始讲授Java基础类库所提供的类。这样做主要达到如下目的:一方面,让学生了解Java基础类库所提供的强大功能;另一方面,在讲解这些常用类时,逐步介绍Java类所涉及的一些概念(比如构造方法,成员方法,成员变量、方法重载等),以及如何使用它们(比如导入包),从而为Java类的设计提供良好的铺垫。

由于Java基础类库中的类很多,必须挑选一些简单的、最好是熟悉或者感兴趣的类。比如以下几个类:

 Math类:学生在学习C语言时都接触过数学函数,所以非常容易理解Math这个类。由于Math这个类使用了大量的静态成员以及静态方法重载,因此在讲授这个类时,重点说明如何使用静态方法与静态常量,并了解Java静态方法的重载特点。

 String类:学生在编程过程中经常用到字符串,因此有必要介绍String类的使用。通过这个类让学生了解如何创建对象,如何使用对象的实例方法,并了解构造方法以及实例方法的重载(因为String类中存在构造方法及实例方法的重载现象)。

4类的设计

通过前面内容的教学,学生初步掌握了如何使用Java类,并了解了类的一些基本概念。这时就可以开始讲解如何设计一个类,包括成员变量、构造方法以及成员方法的设计。这部分内容的教学过程中需要逐步传授面向对象的一些概念与思想。

由于C语言的结构体与Java的类有点相似,因此,从一个普通的类似于结构体的Java类开始,逐步添加构造方法,实例方法,并说明它们的作用,然后再如何使用访问控制符来对类成员进行封装,以及如何通过包来组织类。在教学过程中,不仅仅说明编写一个类所涉及的知识点,而且还说明这些内容的用途和意义所在。

这部分教学的主要内容如下:

(1) 从C结构到Java类

对于C程序员,他们对Java类的最初认识,往往是觉得类是一个添加了方法的C结构。这种认识虽然不太准确,但是却是可以理解(至少形式上存在某种相似性)。可以通过一个矩形类来说明类似于C结构的Java类,其中length,width分别是矩形对象的长与宽, id代表矩形对象的编号(从0开始编号),而静态变量nextId用于指明下一个矩形对象的编号(即每创建一个对象后nextId自增1)。

通过这个简单的类,可以介绍类成员变量(包括实例变量与类变量)的特点,以及如何使用它们(由于前面讲解Java程序设计入门时,学生已经了解如何使用它们,所以容易接受这一部分内容的知识点)。

(2) 设计构造方法

Java类的构造方法的作用是创建对象,并对其进行初始化。然而,许多学生一开始并不理解构造方法,认为即使没有构造方法,也可以对对象进行初始化。比如,可以通过Rectangle a = new Rectangle()创建对象,然后通过a.length = 10.0; a.width = 5.0; a.id = 0; a.nextId ++; 等语句对对象进行初始化。因此,需要通过一些简单的例子向学生说明构造方法的用途。比如,如果不定义Rectangle类的构造方法,那么若干创建许多个Rectangle对象,需要类似于前面的大量的初始化代码(每个对象需要4个语句初始化),并且需要保证初始化语句逻辑的正确性。相反,如果提供构造方法,并将对象的初始化代码移入到构造方法,那么每个对象创建仅需要调用构造方法,从而避免了功能相似代码的重复,并且在使用Rectangle类时,不需要考虑初始化代码间的逻辑关系(在构造方法中考虑这些逻辑关系)。教学经验表明,学生能够理解构造方法的作用,并主动去写构造方法。

(3) 设计成员方法

学生开始阶段很难主动地编写类的成员方法。许多学生仍然把java的类当作C语言的结构体来用。比如,对于某个矩形对象a,那么a的面积可以通过a.length*a.width获得,a的周长可以通过(a.length+a.width)*2来计算。这时需要向学生说明实例方法的好处:(1)将这些针对对象的具体功能代码移入实例方法,可以减少代码重复;(2)封装具体功能的实现算法。比如,在Rectangle类中提供area()方法,那么每次调用这个方法就可以得到具体的矩形面积,并且不需要知道是如何计算出面积。更进一步,可以举出一个较为复杂的多边形类,那时计算面积就复杂多了,这时提供实例方法就显得非常有意义了。当然,在这一部分教学内容中,还需要强调实例方法与类方法的区别,同时说明如何设计重载的成员方法。教学经验表明,学生理解了成员方法的用途之后,会主动将经常用到的功能代码移入成员方法之中。

(4) 访问控制与封装

不同于C语言结构体,Java类中的成员可以被访问控制符所修饰,从而对类成员进行封装。访问控制符包括public,private,protect等。对于初学者而言,非常不理解为何通过访问控制进行封装。他们往往喜欢用public访问控制(而不喜欢使用private访问控制),因为这样使用方式类似于C语言。这时,向学生说明访问控制与封装的作用就显得非常重要。就以前面的Rectangle类为例,如果它的成员变量length,width的访问控制为public,那么这些变量的值就可以任意修改,比如修改为负数,导致出错,因此,可以将这些变量的访问类型设置为private以防止非法修改,同时提供非private类型的实例方法以保证对这些private类型的成员变量的间接访问。

学生理解了private访问控制后,讲解其他几种访问控制类型就容易多了。然后,再说明可以将类设置为public或者非public,前者将对其他包中的类开放访问权限,而后者仅仅对同一个包中的类开放访问权限。

5继承与多态

这部分教学内容主要讲解子类与接口设计,以及它们所带来的继承与多态的特性。学生掌握如何设计一个简单的类之后,就可以开始讲授子类与接口的设计。子类设计与前面一部分内容可以很好地衔接,因为设计一个类时经常可以在一个类的基础上扩展,而不需要从零开始。在讲授子类设计的技术细节之后,需要讲解如何设计类的继承体系结构,以及接口的作用与意义。

这部分教学的主要内容如下:

(1) 子类设计

讲解子类设计的重点是继承。子类通过继承超类的成员,能够很大程度上增加代码的重用。这个意义必须要向学生说明。子类设计的授课重点包括:

 子类构造方法设计

子类构造方法必须隐含或者显式调用超类的构造方法,而且这种调用过程构成一条构造方法调用链。虽然这仅仅是Java语言的一个规定,然而必须要向学生说明这个规定内在的含义。由于构造方法的主要作用是对象初始化,那么规定超类构造方法必须先被调用的主要目的就是保证继承而来的成员能够在使用之前被正确初始化。

 成员覆盖与对象上转型

在设计子类时,可以重新定义超类继承下来的成员变量或方法,从而出现覆盖(overriding)或隐藏(hiding)两种情况。据我们几年来的教学经验,这部分内容学生比较难以掌握。事实上,重定义超类的实例方法将出现覆盖现象,而该现象的特点类似于替换。除了实例方法之外,重定义超类其它类型成员所导致的现象是隐藏。虽然学生可以较好地掌握覆盖或者隐藏的语言特性,但是他们在开始阶段往往无法掌握如何使用覆盖或隐藏。这时需要通过对象的上转型来加以说明。对象的上转型现象说明实例方法的调用是与对象相关,而与对象的引用类型无关,而其它类型的成员则是与引用类型直接相关。对象的上转型现象表明当一个类的实例方法在子类中重新定义之后,而所有对该方法的默认调用是子类所定义的版本,这使得编写程序时即可以修改某一实例方法的功能,同时又不影响其它调用约定。教学过程中,需要通过较多的例子反复强调这些特点。这也是学生所必须掌握的Java程序设计不同于C程序设计的关键点之一。

(2) 类的继承体系结构设计

学生掌握子类设计技术之后,教学的重点转向类的继承体系结构设计,这是面向对象程序设计的核心部分。授课内容包括抽象类与接口设计,而授课重点在于强调面向对象的程序设计思想。对于抽象类与接口的语言语法特点,可以安排少量课时。重点是通过设计实例来说明如何设计使用接口、抽象类,以及如何组织定义整个继承框架结构。我们讲解的实例是Java语言所内置的集合框架。通过这个实例说明面向对象程序设计中的关键思想与技术,包括接口回调、对象上转型以及代码重构等设计思想[4-5]。

6结束语

本文讨论了作者讲授Java程序设计的一些体会。我们所针对的教学对象是具有C程序设计技能背景的学生,所以教学重点是传授面向对象程序设计的技术、思想与方法,而面临的最大问题是如何将学生的程序设计思维从面向过程向面向对象转变,这需要一个循序渐进的逐步转变的过程。另外,我们认为应该将Java等面向对象程序设计语言作为计算机专业学生学习的第一门程序设计语言,而不是后续语言。因为先学习C语言等面向过程的语言,会增加程序设计思维转换的难度。当然,这将涉及到整个课程体系结构的调整,需要慎重考虑。

参考文献

[1] Bloch Joshua. Effective Java [M]. Addison-Wesley, 2001.

[2] Sharon Zakhour, Scott Hommel, Jacob Royal, Isaac Rabinovitch, Tom Risser, Mark Hoeber. The Java Tutorial: A Short Course on the Basics (4th Edition)[M], Prentice Hall PTR, 2006.

[3] Bruce Eckel. Thinking in Java (4th Edition) [M]. Prentice Hall PTR, 2006.

程序设计的基本结构第7篇

关键词:钢骨混凝土;钢管混凝土;面向对象编程;封装;继承

中图分类号:TU37;TP311.132.4文献标志码:A

SRC/CFT calculation program based on object-oriented programming

WANG Zhaobo, LUO Yongfeng

(College of Civil Eng., Tongji Univ., Shanghai 200092, China)

Abstract:Most of the current analysis software lacks of module on calculation of Steel Reinforced Concrete (SRC) and Concrete-Filled Tube (CFT) components. So an engineering calculation software based on Object-Oriented Programming (OOP) is developed considering the calculation of SRC/CFT components. The SRC/CFT component classes and special file input/output classes are constructed by inheriting basic class. The inherited relationship, encapsulating description and implementation methods are presented. The application in a high-rise SRC/CFT building proves its practical value and the advantages of OOP idea in engineering software development. It provides the valuable references to problem solving and program development in actual projects.

Key words:steel reinforced concrete; concrete-filled tube; object-oriented programming; encapsulation; inheritance

0引言

如何在程序设计中自然地表示客观世界即对象模型,一直是计算机软件开发中广受关注的难题.面向对象编程(Object-Oriented Programming,OOP)设计思想是软件开发方法的一场革命,代表全新的计算机程序设计的思维方法.该方法[1]旨在使程序设计中不同对象之间的关系更接近在自然界中的客观存在,从而也使开发者对它们的理解更接近人们认识事物的过程.这种思想带来的好处是显而易见的,它通过增加代码的可扩充性和可重用性改善并提高程序编制者的开发能力,并能控制维护软件的复杂性和软件维护的开销.

结构工程中各种实际问题的解决,离不开相应的数值分析方法,而各种数值方法的实现则紧密依赖于程序的编制.以往结构计算程序的实现多是面向过程的,各程序段对给定的算法进行描述并依次对数据进行处理,大量的各种类型的数据与其相应的处理过程混杂在一起,任何数据的添加或形式的改变都会导致一系列相关过程的变化.对于试图利用已有代码的程序编制人员,不得不重新阅读并理顺大量的代码.近年来,已有不少学者[2-7]将面向对象方法应用于结构分析程序的编制,说明面向对象的程序设计在结构计算及设计方面同样具有优势.根据工程需要,应用OOP设计中继承和重用的思想,本文在文献[8-10]程序的基础上开发钢骨混凝土(Steel Reinforced Concrete,SRC)和钢管混凝土(Concrete-Filled Tube,CFT)构件计算程序,快速有效地解决工程设计中迫切需要解决的问题.

基于OOP思想,对其在工程计算设计软件开发中的快速开发应用进行分析和探讨,并给出开发思想的具体应用和实现,满足大型结构工程的高效设计需要,为同类问题的解决和程序编制提供参考.

1程序设计思路

1.1开发背景

SRC结构和CFT结构是高层建筑中近期发展起来的具有广阔前景的新型结构,与钢筋混凝土相比的优点是由钢和混凝土形成的组合构件可整体工作、截面尺寸小、构件延性好;与钢结构相比其优点是能够节约钢材、耐火性更好、钢骨可兼做模板,施工速度高.它融合钢结构和钢筋混凝土结构的优点,承载力高、延性好、变形能力强,从而具有较强的抗风和抗震能力.但是由于结构形式较新,结构分析软件中大都缺少SRC和CFT构件的计算模块,使得结构工程师在进行此类结构设计时无程序可用,只能采取一些近似如等效化为单一材质的构件方法进行计算.

笔者所在团队承担“中国平安金融大厦结构优化设计”项目,所优化的主楼结构采用CFT柱、钢梁及钢支撑构成的中央框架――支撑内筒,以及由SRC柱和SRC梁组成的外框筒,分析软件主要采用国际通用分析设计软件ETABS.然而,ETABS虽然支持SRC/CFT构件的建模分析,但并没有实现相应的设计计算功能,这就要求在项目规定的完成时间内自行编制程序进行构件截面设计和校核.

1.2程序设计思路

经过分析,程序编制的工作量主要包括几大部分:接口ETABS软件,使用其中已形成的数据,主要包括几何信息和内力信息等;根据现行规范进行SRC/CFT构件设计计算;对同一类型的构件设计结果进行归并,以符合工程需要;进行设计信息的输出.程序的整体结构及流程管理见图1.

由于程序中需要描述节点、杆件和内力等大量的数据结构以及相关的计算方法,需要实现的代码量很大,鉴于任务有严格的时间限制,必须尽可能利用已有成果,高效快速地进行程序编制工作.

2 OOP抽象及相关实现

2.1OOP的基本概念

OOP设计方法就是运用面向对象的观点描述现实问题,然后运用计算机语言描述并处理该问题.这种描述和处理是通过类与对象实现的,类是逻辑上相关函数与数据的封装,是对现实问题的高度概括、分类和抽象.一些面向对象编程的基本概念[1]如下.

封装和数据隐藏:通过建立用户定义类型(类)支持封装性和数据隐藏.完好定义的类一旦建立,就可看成是完全封装的实体作为一个整体使用.封装的单位是对象,该对象的特性由它自己的类说明来描述.这些特性为相同类的其他对象所共享,对象的封装比一个类的封装更加具体化.

继承和重用:在扩展现有类型的基础上声明新类型,利用“继承”来支持代码重用.新子类是从现有类型派生出来的,称为派生类.派生类不仅具有基类的一切特征,而且还可以定义自己独有的特征,以实现各种各样的功能.

多态性:通过继承的方法来构造类,采用多态性为每个类指定表现行为.利用继承性和多态性的组合,可以轻易地生成一系列虽类似但独一无二的对象:由于继承性,这些对象可共享许多相似的特征;由于多态性,一个对象可以有独特的表现方式,以区别于其他对象.

面对对象设计,鼓励人们从问题最基本、简单的方面入手,用对象来考虑如何描述问题的主要方面.这正是自底向上方法的本质.但面向对象的设计也要求人们面向目标,考虑为了达到这一目标该如何建立基本对象,这也体现自顶向下的设计思想.

2.2代码的继承和新类的抽象提出

由前述的程序设计思想,程序编制者可以通过继承和重用来利用已有的类,同时只需对新类中反映特殊问题的表现行为予以描述即可.

文献[8]中的有限元程序已经由MFC类库抽象出有限元基类,包括从有限元核心概念抽象出的单元类、节点类和载荷类等,而由单元类又继承了体单元、面单元和线单元等类.同时,为了描述线单元的属性,也抽象出截面类及其子类:钢筋混凝土截面类和型钢截面类.结合本文所要解决的工程问题,对上述已有的类进行继承.由于ETABS软件本身是以有限元分析为基础的设计软件,它输出的模型几何文件中信息的描述格式可以直接利用单元类和节点类封装.在线单元的基础上加以发展,抽象出一般构件类以及SRC/CFT构件类,利用载荷类中的点载荷子类继承构件内力类.程序中SRC/CFT构件类的继承关系见图2.

由于尽可能多地利用已有的计算结果,有很多读取ETABS文件的操作,程序对特定的文件格式抽象相应的文件输入输出类.文献[9]中的设计程序,已经抽象出通用文件类、输入文件类、输出文件类、带有标志符的文件类、分段数据文件类和SATWE文件类;通过继承其中具有共性的类,生成适合于解决本工程的新类:ETABS模型文件类、内力文件类和文件类的继承关系见图3.

由于已有类封装了所要解决问题中描述共性的代码,本文新类的建立充分继承已有的类,形成基类―子类关系,基类中的特征被保留下来,在子类中只需对其特性进行代码描述.除此之外,程序中还封装了流程管理类,进行多个文件以及计算工作的管理,限于篇幅,其继承关系不作详述.

从上述类的抽象过程和继承关系可以看出,对于专业性很强的结构工程问题,其组成和性质在很多方面都有相似之处,面向对象程序设计通过层层继承的抽象,方便恰当地表示工程对象.

2.3封装与相关算法的实现

图4说明SRC构件类的封装,其数据成员中大部分均由基类继承过来,SRC构件类中需要再添加的数据成员已经很少,则程序编制的重点可以放在相关配筋算法的实现上,以减少与核心计算工作无关的内容.SRC/CFR构件的配筋计算[11],采用对构件截面进行单元划分,而后进行数值积分的方法进行.由于不同内力组合的截面中性轴位置不同,实际上求取中性轴和确定配筋量过程是一个迭代的过程,其中圆形SRC柱压弯构件的算法流程描述见图5.

3应用实例

如第1节所述,根据中国平安金融大厦结构优化设计的需要,开发计算SRC/CFT设计计算程序,并应用于该项目的设计.中国平安金融大厦位于上海浦东新区陆家嘴国际金融中心,与中银大厦和交银大厦相邻,大厦整体为欧式风格.作为商办楼的主图 4SRC构件类的成员变量和成员函数

楼共38层,结构平面为左右对称,长73.5 m,宽45.0 m;第38层处屋面高度为164 m;38层以上设有塔楼2层和球形穹顶,穹顶顶部高为210 m,穹顶结构为单层钢网壳结构.结构主体标准层见图6.

主楼结构采用框架―支撑体系.围绕中央电梯井道及共享空间设置CFT柱,在X和Y方向设竖向钢支撑,与楼层钢梁一同构成具有一定刚度的中央框支结构.配合建筑设计风格,周边设内置十字钢骨、间距3 m的圆形截面SRC柱(见图7)和内置H型钢的矩形断面SRC框架梁.除底部及避难层,外框架SRC梁隔层设置,SRC柱和SRC梁形成周边框架结构.SRC/CFT柱及SRC梁是整个结构中的主要承力构件,其分布见图8.

SRC/CFT柱及SRC梁构件数量巨大:CFT柱1 574根,SRC柱2 416根,SRC梁1 996根,对于每根构件,输出点为3个.实际考虑9种载荷工况,载荷组合(本文程序中进行组合)共107种,其中非抗震组合27种,抗震组合80种.可知SRC/CFT截面设计计算量的庞大.

在VC++ 6.0应用开发环境中,编制用于计算SRC/CFT构件的程序,运行界面见图9.

向对象开发手段,最大限度地利用已有基类,大大缩短编制时间,仅用两周即完成开发工作;同时由于抽象过程很好地封装底层数据,数据对象十分接近人们的认知,也方便了调试过程.程序设计采取合理的数据结构和算法,对此复杂高层结构中的大量SRC/CFT截面,计算1次运行时间控制在20 min之内,甚至低于ETABS对单一构件设计所需时间.

4结论

运用OOP设计思想开发大型软件具有明显的优点,其思想已被广大专业程序设计人员所接受.但非专业程序开发者采用结构化程序设计思想所开发的软件,尤其是一些专业性软件存在许多固有缺陷,很难对其进行扩展利用.

针对现有结构分析设计软件功能上的不足,采用OOP设计思想对已有代码进行继承和重用,对程序功能进行扩展,开发出SRC/CFT构件计算软件,应用对象和类的概念使得程序的建模更接近实际情况.同时将其应用于一超高层组合结构设计中,在解决实际工程计算问题的同时验证了该方法在程序设计中的优势.实践表明,与传统设计方法相比,OOP的扩展能力大为增强,程序开发和调试周期明显缩短,容易增加前后处理功能或建立与其他前后处理程序的接口.

参考文献:

[1]COHOON J P, DAVIDSON J W. C++ Program Design: an introduction to programming and object-oriented design[M]. USA:The McGraw-Hill Companies, Inc, 1997.

[2]谭也平. 工程结构电算与OOP编程[M]. 北京: 中国建材工业出版社, 1999.

[3]俞铭华, 吴剑国, 曹骥, 等.有限元法与面向对象编程[M]. 北京: 科学出版社, 2004.

[4]谭也平. 有限元前处理系统的图形集成实现[J]. 计算机辅助工程, 2000, 9 (1): 53-58.

[5]丁啸宇, 王书庆, 石洞. 面向图形对象技术在桥梁CAD系统开发中的应用[J]. 计算机辅助工程, 1999, 8 (3): 53-58.

[6]林建, 秦浦雄. 面向对象数据库原理在工程CAD中的应用[J]. 计算机辅助工程, 2001, 10 (2): 36-41.

[7]谭也平, 王书庆, 石洞, 等. 工程CAD系统中的有限元对象的实现[J]. 计算机辅助工程, 1996, 5 (3): 25-29.

[8]姜峰, 李博宁, 丁丽娜. 面向对象的钢筋混凝土有限元非线性分析程序设计[J]. 计算力学学报, 2003, 20 (5): 592-596.

[9]王朝波, 姜峰. 异形柱计算机辅助设计系统LSCCAD的研制[J]. 建筑结构, 2004 (3): 52-55.

[10]WANG Zhaobo, JIANG Feng, LUO Yongfeng, et al. Stochastic crack simulation for reinforced concrete based on the nonlinear finite element method analysis[J]. Harbin Gongye Daxue Xuebao, 2005, 37(S): 215-219.

程序设计的基本结构第8篇

【关键词】程序设计;以赛促教;启发式教学;趣味教学

一、课程定位

程序设计基础这门课程是在学院第一个学期开设,共有56个学时,这门课是学校计算机应用技术专业的一门基础课程。学院对此专业的培养方案的初次岗位定位中有软件开发技术员岗位。根据计算机程序员岗位的职业要求,具体工作流程总共分为五部分:需求分析、系统设计、程序设计、程序调试、交付与维护。不难看出程序设计在其中占有至关重要的地位。程序设计基础课正是来源于此,该门课程是培养程序设计员基本程序设计能力的一门基础课程,在计算机应用技术专业人才培养方案的课程体系中属于专业技术课程中的基础课。

《程序设计基础》是直接面向程序员职业岗位的一门课程,课程的学习目的是使学生掌握结构化程序设计的基本方法,培养程序设计的思维能力,为后续课程《C#程序设计》、《数据结构》、《WEB程序设计》、《面向对象程序设计》等课程的学习奠定基础。

二、课程设计

为了符合学院提出的“走进校门的是大学生,培养出来的是职业人”的育人理念,和计算机应用技术专业要培养具有优势职业品质与技能,面向现代服务业培养管理、服务第一线岗位的高素质技能性职业人的专业目标,《程序设计基础》的课程设计思路是以培养程序设计能力为目标,以实战项目为载体,实现教、学、做一体化。

在教学过程中以案例为先导,学生完成演练为手段。这门课程要达到的品质目标是以能力与知识相结合、以培养全面发展的具有优势品质与技能的高素质应用性职业人为培养目标,培养学生严谨细致、求真务实的工作作风和良好的团队协作精神。技能目标是掌握结构化、模块化程序设计方法与技能、培养自主学习独立思考能力。知识目标是学会C语言的基本语法,掌握基本的算法、能够编写基本的C语言程序。

课程内容的选取依据计算机程序员岗位需求、典型工作任务、行业技术动态发展趋势、高职学生特点,分为理论教学和实践教学,课时分配是1比1,其中实践教学每一个模块都以项目案例为导向,案例大多选自杭电的ACM平台,同时也配备了为了激发学生学习兴趣老师自己创作的案例,比如剪刀石头布游戏,猜数字游戏等。

高职学生属于高考最后批次,文化基础知识相当欠缺,体现在C语言上,英语出错提示看不懂,甚至有学生反映在C语言中的英语语句关键词都不认识,在数学上同样存在基础相当差的问题,成为学习C语言的极大障碍。学生从小接触计算机就在Windows下运行,习惯了用鼠标,而C语言运行在用键盘的命令行界面上,一个字都不能输错,对初学者有一定难度。这门课程的重点是:三大基本语句程序的设计、数组的定义与引用、函数的定义与参数传递;课程的难点:选择与循环的嵌套、函数嵌套与递归调用、指针等。针对学院高职学生的特点,对于重难点的解决方法是从提高学生学习主动性方面突破首先,要激发学生的兴趣,包括两方面的内容:第一兴趣教学,尽量选取学生感兴趣的题目或项目进行教学,如猜数游戏,石头剪刀布游戏等。第二实用教学,解决学生学了有什么用的困惑,尽量选取贴近生活实际的题目,如百元钱兑换方案、谁是骗子等,让学生感受到学后能解决问题的小小成就感。

三、教学实施

教学实施流程分为三个阶段:准备阶段,实施阶段和总结阶段。在准备阶段中,根据课程标准,主讲教师组织任课教师讨论,选择典型的工作任务,制定教学计划。实施阶段以学生为主体,以教师为主导,以职业能力培养为中心,融‘教、学、做’为一体教学。总结阶段主讲教师组织任课教师讨论,提出存在问题,找出解决方案。

针对课程特点,灵活使用“启发式教学”、“趣味教学”“任务驱动”等方法,突出“理论教学构筑学生的知识结构,实践教学构筑学生的职业技能结构”的教学原则。课程教学全面推行“学中练,练中学”教学思路。

接下来以循环结构的第一次课为例来阐述一下教学流程:学生对循环结构没有概念,对while和dowhile语句也不感兴趣,为了提高他们的学习积极性,首先使用五分钟的时间情境导入,选取杭电ACM平台上面的三个案例:猜数字游戏,百钱百鸡问题,谁是骗子,在学生对将要学的知识有了一定的期待后,用十五分钟的时间讲解相关的语法知识,接下来通过解决案例的方式教师给学生示范编程,并且给学生留出一定的时间自己动手实现,最后十分钟进行总结反思。

这门课程的教学评价由三部分组成:其中平时成绩和课内实验成绩分别占20%,期末笔试成绩占60%。

四、教学条件

程序设计课程有一支不论是年龄结构还是职称结构都比较合理的教学团队,每个老师都有自己的优势,有的具有多年的企业编程经验,有的主持多项相关的省级课题,有的对指导学生程序竞赛有丰富的经验。此外课程聘请杭电ACM集训队教练刘老师担任学校ACM集训队特聘教练,刘老师也参与系相关的实习实训活动。

该门课程的教学资源也很丰富,主要包含以下几个部分:教学大纲、授课计划、教材、实验实训项目指导书、多媒体教学课件、网上C语言精品课程、试题库、图书资料等。教材选用谭浩强教授编著的《C语言程序设计》,系周岳松老师自主研发了客观题在线测试软件,该软件分为教师版和学生版,教师版可用于平时随堂测试,学生版可用于学生自主学习,网络资源主要有C语言网等。学院也提供了相应的硬件支持,设有软件开发实训室、大学生程序竞赛实训室等多个实训室。

五、教学效果

校内督导组和校外专家都对《程序设计基础》这门课程给予了充分的肯定,专家评语是以项目为导向,以任务驱动,符合高职教育教学特点,以提高学生的编程能力为宗旨,能较好符合企业对软件人才的需求。

迄今为止,该专业共有一千七百余人修了这门课程,取得了丰硕的成果。我校代表队参加了十届浙江省大学程序设计竞赛,共获32块奖牌,尤其去年今年连续两次获得专科组的特等奖,同时四次获得优秀组织奖。除了ACM竞赛,在蓝桥杯比赛中我系学生也取得了不错的成绩。

通过这门课的学习,锻炼了学生的逻辑思维能力和基本程序设计能力,为以后的工作和创业打下了坚实的基础,2008级计应学生林清瑞,曾经参加ACM竞赛并获得银奖,自主创业,建立了杭州安豆信息技术有限公司,从事手机游戏开发。2003级计应学生黄道笑,自主创立了杭州五角星科技有限公司,从事网站开发。2010年公司销售额超过了200万;2011年被评为杭州市高新技术企业;2012年被评为杭州市雏鹰计划企业。

六、课程特色

这门课程特色:以赛促教,赛教结合。把ACM竞赛平台里面的题目融入到平时的教学过程中,也会把平时表现好的学生充实到竞赛集训队伍里面;教学结合,学以致用,教师指导,学生自主研发一些小游戏,比如石头剪刀布的游戏。

参考文献: